Merge "Revert "On let jack retry with debug on 2 curl errors"" into ub-jack
diff --git a/.gitignore b/.gitignore
index fc8c579..d50522a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,12 +11,19 @@
# Generated output / temp files
**/bin/
**/build/
+**/gradle-build/
**/dist/
+**/gradle-dist/
**/libs/
*/tools/
+.gradle/
jack-tests/intermediates/
tests-results/
-# Version propertie files
+# Version property files
jack/rsc/jack-version.properties
jill/rsc/jill-version.properties
+
+# Code coverage
+jack-coverage/testResults/
+
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/args4j/build.gradle
similarity index 71%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to args4j/build.gradle
index 0b9fd92..850bae5 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/args4j/build.gradle
@@ -13,8 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+apply plugin: 'java'
+apply plugin: 'maven'
-package com.android.jack.coverage.test002;
-
-public interface Interface {}
-
+sourceSets {
+ main {
+ java {
+ srcDirs = ['args4j/src']
+ }
+ resources {
+ srcDirs = ['args4j/src']
+ include '**/*.properties'
+ }
+ }
+}
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..897146d
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+subprojects {
+
+ repositories {
+ jcenter()
+ }
+ apply plugin: 'java'
+}
+
+ buildscript {
+
+apply from: "$rootDir/gradle-script/libversions.gradle"
+
+ repositories {
+ jcenter()
+ maven {
+ url "https://plugins.gradle.org/m2/"
+ }
+ }
+
+ dependencies {
+ classpath libs.shadow_plugin
+ classpath libs.gradle_processors_plugin
+ classpath libs.jarjar_plugin
+ }
+}
+
+project.ext {
+ uuid = java.util.UUID.randomUUID()
+ emitterId = System.getProperty("user.name") + "@" + java.net.InetAddress.getLocalHost().getCanonicalHostName()
+}
+
+task stopShip() {
+ doLast {
+ int nbStopShips = 0
+ new File("${rootDir}").eachDirRecurse { File dir ->
+ dir.eachFileMatch(~/.+.java/) { File f ->
+ f.eachLine { String l ->
+ if(l.matches(~/.*STOPSHIP.*/)) {
+ nbStopShips++
+ }
+ }
+ }
+ }
+ println "STOPSHIP: " + nbStopShips
+ }
+}
diff --git a/build.xml b/build.xml
index fec24af..b798d0d 100644
--- a/build.xml
+++ b/build.xml
@@ -36,8 +36,7 @@
schedtests-lib,
jill,
jill-api,
- jack-jar-tools,
- jack-jacoco-reporter"/>
+ jack-jar-tools"/>
<target name="clean" depends="jack-clean,
jack-api-lib-clean,
@@ -79,10 +78,7 @@
jill-api-lib-clean,
jill-api-src-clean,
jack-jar-tools-clean,
- jack-jacoco-reporter-clean,
- jacoco-clean,
asm4-clean,
- gson-clean,
dist-clean" />
<dirname property="jack-project.dir" file="${ant.file.jack}"/>
@@ -112,13 +108,10 @@
<property name="dx-ref.dir" value="${jack-project.dir}/dx-ref"/>
<property name="core-stubs-mini.dir" value="${jack-project.dir}/core-stubs-mini"/>
<property name="jack-jar-tools.dir" value="${jack-project.dir}/jack-jar-tools"/>
- <property name="jack-jacoco-reporter.dir" value="${jack-project.dir}/jack-jacoco-reporter"/>
- <property name="jacoco.dir" value="${jack-project.dir}/jacoco"/>
<property name="jill.dir" value="${jack-project.dir}/jill" />
<property name="jill-api.dir" value="${jack-project.dir}/jill-api" />
<property name="asm4.dir" value="${jack-project.dir}/asm4" />
- <property name="gson.dir" value="${jack-project.dir}/gson"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
classpath="${jack-project.dir}/jarjar/jarjar.jar"/>
@@ -134,7 +127,6 @@
<property name="jack-internal-doc.dir" value="${jack.doc.dir}/jack-internal" />
<property name="jack-external-doc.dir" value="${jack.doc.dir}/jack-external" />
<property name="jack-server.doc.dir" value="${jack.dist-doc.dir}/server" />
- <property name="jack.coverage.doc.dir" value="${jack.dist-doc.dir}/coverage" />
<target name="dist-clean">
<delete dir="${jack-top-dist.dir}"/>
@@ -196,7 +188,7 @@
</javadoc>
<!-- Jack API and Jill API -->
<mkdir dir="${jack-external-doc.dir}/jack-api" />
- <javadoc destdir="${jack-external-doc.dir}"
+ <javadoc destdir="${jack-external-doc.dir}/jack-api"
author="true"
version="true"
use="true"
@@ -222,6 +214,17 @@
<arg value="--sanity-checks"/>
<arg value="on"/>
</java>
+ <!-- Jack annotations -->
+ <mkdir dir="${jack-external-doc.dir}/jack-annotations" />
+ <javadoc destdir="${jack-external-doc.dir}/jack-annotations"
+ author="true"
+ version="true"
+ use="true"
+ windowtitle="Jack annotations"
+ classpath="${dist-doc.classpath.path}"
+ nodeprecated="true">
+ <fileset dir="${jack.dir}/src" includes="com/android/jack/annotations/**/*.java" />
+ </javadoc>
<!-- Jack server -->
<mkdir dir="${jack-server.doc.dir}" />
<copy file="${jack-project.dir}/server/jack-server/README-jack-server.md"
@@ -234,13 +237,6 @@
<exec executable="pandoc" failifexecutionfails="false">
<arg line="--from=markdown --to=plain --output=${jack-server.doc.dir}/README-jack-server.txt ${jack-server.doc.dir}/README-jack-server.md"/>
</exec>
- <!-- Jack coverage -->
- <mkdir dir="${jack.coverage.doc.dir}" />
- <copy file="${jack-project.dir}/jacoco/README.md"
- todir="${jack.coverage.doc.dir}" />
- <exec executable="pandoc" failifexecutionfails="false">
- <arg line="--from=markdown --to=plain --output=${jack.coverage.doc.dir}/README.txt ${jack.coverage.doc.dir}/README.md"/>
- </exec>
</target>
<target name="jack-dist"
@@ -326,10 +322,6 @@
<mkdir dir="${jack-top-dist.dir}"/>
- <jar destfile="${jack-top-dist.dir}/${jill.execname}" filesetmanifest="merge">
- <zipfileset src="${jill.dist.dir}/${jill.execname}"
- excludes="jill-version.properties"/>
- </jar>
<jar destfile="${jack-top-dist.dir}/${jill-api.name}" filesetmanifest="merge">
<zipfileset src="${jill-api.dist.dir}/${jill-api.name}"
excludes="jill-api-version.properties"/>
@@ -339,6 +331,25 @@
<mkdir dir="${jill-sign.tmp}"/>
<copy file="${dist.version.file}" tofile="${jill-sign.tmp}/version.properties"/>
+ <jarjar jarfile="${jill-sign.tmp}/${jill.execname}" filesetmanifest="merge">
+ <zipfileset src="${jill.dist.dir}/${jill.execname}"
+ excludes="jill-version.properties"/>
+ <rule pattern="org.objectweb.**" result="com.android.jill.objectweb.@1"/>
+ <rule pattern="org.kohsuke.**" result="com.android.jill.kohsuke.@1"/>
+ <rule pattern="javax.annotation.**" result="com.android.jill.javax.annotation.@1"/>
+ <rule pattern="com.google.**" result="com.android.jill.google.@1"/>
+ </jarjar>
+ <mkdir dir="${jill-sign.tmp}/with-empty-directories" />
+ <mkdir dir="${jill-sign.tmp}/without-empty-directories" />
+ <unzip src="${jill-sign.tmp}/${jill.execname}" dest="${jill-sign.tmp}/with-empty-directories"/>
+ <copy includeemptydirs="false" todir="${jill-sign.tmp}/without-empty-directories">
+ <fileset dir="${jill-sign.tmp}/with-empty-directories" />
+ </copy>
+ <jar destfile="${jack-top-dist.dir}/${jill.execname}" manifest="${jill.dir}/etc/manifest.txt">
+ <fileset dir="${jill-sign.tmp}/without-empty-directories"/>
+ </jar>
+
+
<propertyfile file="${jill-sign.tmp}/version.properties">
<entry key="releaser" default="${sign.eng.releaser}"/>
<entry key="version.buildid" default="${sign.eng.buildid}"/>
@@ -362,7 +373,6 @@
description="package a tools distribution"
depends="dist-check-version-files,
jack-jar-tools,
- jack-jacoco-reporter,
generate-eng-signature">
<mkdir dir="${jack-top-dist.dir}"/>
@@ -385,10 +395,6 @@
basedir="${tools-sign.tmp}"
includes="jack-jar-tools-version.properties"/>
- <jar destfile="${jack-top-dist.dir}/${jack-jacoco-reporter.name}" filesetmanifest="merge">
- <zipfileset src="${jack-jacoco-reporter.dist.dir}/${jack-jacoco-reporter.name}"/>
- </jar>
-
<delete dir="${tools-sign.tmp}"/>
</target>
@@ -526,7 +532,7 @@
</dependset>
<javac encoding="UTF-8" srcdir="${jack.dir}/src"
destdir="${jack.build.outdir}"
- source="1.7" target="1.7"
+ source="1.8" target="1.8"
debug="true" includeantruntime="false" includeDestClasses="false">
<classpath>
<filelist refid="jack.link.libs.fileset" />
@@ -660,7 +666,7 @@
</targets>
</dependset>
<javac encoding="UTF-8" srcdir="${jack-api.dir}/src" destdir="${jack-api.lib.build.outdir}"
- source="1.6" target="1.6" debug="true"
+ source="1.8" target="1.8" debug="true"
includeantruntime="false" includeDestClasses="false" nowarn="true">
<classpath>
<filelist dir="/" files="${jsr305.dist.dir}/${jsr305.libname}" />
@@ -735,7 +741,7 @@
<javac encoding="UTF-8" srcdir="${jack-tests.dir}/src"
includes="com/android/jack/annotations/**/*.java"
destdir="${jack-test-annotations.build.outdir}"
- source="1.6" target="1.6" debug="true"
+ source="1.8" target="1.8" debug="true"
includeantruntime="false" includeDestClasses="false" nowarn="true" />
<copy file="${jack-project.dir}/version.properties"
@@ -791,7 +797,7 @@
<javac encoding="UTF-8" srcdir="${jack.dir}/src"
includes="com/android/jack/annotations/**/*.java"
destdir="${jack-annotations.build.outdir}"
- source="1.6" target="1.6" debug="true"
+ source="1.8" target="1.8" debug="true"
includeantruntime="false" includeDestClasses="false" nowarn="true" />
<copy file="${jack-project.dir}/version.properties"
@@ -855,7 +861,7 @@
<copy file="${sched-build.dist.dir}/${sched-build.execname}" todir="${jackunittests.tools.dir}" />
<!-- compile -->
<javac encoding="UTF-8" srcdir="${jack.dir}/tests" destdir="${jackunittests.build.outdir}"
- source="1.7" target="1.7" debug="true"
+ source="1.8" target="1.8" debug="true"
includeantruntime="false" includeDestClasses="false" nowarn="true">
<classpath>
<filelist refid="jackunittests.link.libs.fileset"/>
@@ -965,12 +971,12 @@
<javac
encoding="UTF-8"
destdir="${jack-tests.build.outdir}"
- source="1.7" target="1.7"
+ source="1.8" target="1.8"
debug="true" includeantruntime="false" nowarn="true">
<src path="${jack-tests.dir}/src"/>
<src path="${jack-tests.dir}/tests"/>
- <exclude name="com/android/jack/annotation/processor/sample2/src/**"/>
- <exclude name="com/android/jack/annotation/test019/jack/**"/>
+ <exclude name="com/android/jack/annotation/processor/sample2/src/"/>
+ <exclude name="com/android/jack/annotation/processor/sample2/src/"/>
<exclude name="com/android/jack/classpath/test002/lib1override/**"/>
<exclude name="com/android/jack/encoding/tests/**"/>
<exclude name="com/android/jack/enums/test003/link/Other.java"/>
@@ -978,6 +984,9 @@
<exclude name="com/android/jack/error/test001/jack/A.java"/>
<exclude name="com/android/jack/error/test002/jack/A.java"/>
<exclude name="com/android/jack/frontend/test002/jack/PackageName/ClassInConflictingPackage.java"/>
+ <exclude name="com/android/jack/frontend/test005/jack/**"/>
+ <exclude name="com/android/jack/frontend/test006/jack/**"/>
+ <exclude name="com/android/jack/frontend/test007/jackduplicate/"/>
<exclude name="com/android/jack/frontend/test008/jack/NoOuterContext.java"/>
<exclude name="com/android/jack/frontend/test010/jack/UnusedLocalVar.java"/>
<exclude name="com/android/jack/frontend/test013/jack/ExtendingInnerOnly.java"/>
@@ -985,45 +994,25 @@
<exclude name="com/android/jack/frontend/test015/jack/WithOuterContextButStatic.java"/>
<exclude name="com/android/jack/frontend/test016/jack/WithDuplicated.java"/>
<exclude name="com/android/jack/frontend/test017/jack/InvalidQualification.java"/>
- <exclude name="com/android/jack/frontend/generic/test002/jack/**"/>
- <exclude name="com/android/jack/frontend/generic/test003/jack/**"/>
- <exclude name="com/android/jack/nopackage/jack/**"/>
- <exclude name="com/android/jack/multidex/test004/jack/**"/>
- <exclude name="com/android/jack/java8/lambda/**"/>
- <exclude name="com/android/jack/java8/defaultmethod/**"/>
- <exclude name="com/android/jack/java8/staticmethod/**"/>
- <exclude name="com/android/jack/java8/methodref/**"/>
- <exclude name="com/android/jack/java8/inference/**"/>
- <exclude name="com/android/jack/java8/gwt/**"/>
- <exclude name="com/android/jack/java8/retrolambda/**"/>
- <exclude name="com/android/jack/java8/intersectiontype/**"/>
- <exclude name="com/android/jack/java8/annotation/**"/>
- <exclude name="com/android/jack/java8/variable/**"/>
- <exclude name="com/android/jack/java8/bridges/**"/>
- <exclude name="com/android/jack/jarjar/test003/dontcompile/**"/>
- <exclude name="com/android/jack/jarjar/test004/dontcompile/**"/>
- <exclude name="com/android/jack/jarjar/test006/dontcompile/**"/>
- <exclude name="com/android/jack/lookup/test001/liboverride/**"/>
- <exclude name="com/android/jack/frontend/test005/jack/**"/>
- <exclude name="com/android/jack/frontend/test006/jack/**"/>
- <exclude name="com/android/jack/frontend/test007/**"/>
+ <exclude name="com/android/jack/frontend/test019/jack/TooBig.java"/>
+ <exclude name="com/android/jack/jarjar/test003/dontcompile/"/>
+ <exclude name="com/android/jack/jarjar/test006/dontcompile/"/>
+ <exclude name="com/android/jack/jarjar/test006/dontcompile/"/>
+ <exclude name="com/android/jack/java8/gwt/test019/jack/Java8Test.java"/>
+ <exclude name="com/android/jack/java8/intersectiontype/test004/"/>
+ <exclude name="com/android/jack/java8/intersectiontype/test005/"/>
+ <exclude name="com/android/jack/java8/intersectiontype/test006/"/>
+ <exclude name="com/android/jack/java8/lambda/test019/"/>
+ <exclude name="com/android/jack/java8/methodref/test014/jack/Tests.java"/>
+ <exclude name="com/android/jack/java8/variable/test001/"/>
+ <exclude name="com/android/jack/java8/variable/test003/"/>
<exclude name="com/android/jack/jill/test001/**"/>
<exclude name="com/android/jack/jill/test002/**"/>
<exclude name="com/android/jack/jill/test003/**"/>
<exclude name="com/android/jack/jill/test004/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test001/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test002/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test003/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test004/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test005/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test006/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test007/**"/>
- <exclude name="com/android/jack/optimizations/lambdas/test008/**"/>
+ <exclude name="com/android/jack/jill/test005/**"/>
+ <exclude name="com/android/jack/lookup/test001/liboverride/"/>
<exclude name="com/android/jack/sourcepath/test002/jack/Sourcepath002.java"/>
- <exclude name="com/android/jack/shrob/test062/jack/**"/>
- <exclude name="com/android/jack/shrob/test066/jack/**"/>
- <exclude name="com/android/jack/shrob/test067/jack/**"/>
- <exclude name="com/android/jack/shrob/test068/jack/**"/>
<classpath>
<filelist dir="/">
<file name="${jill-api.dist.dir}/${jill-api.lib.name}" />
@@ -1135,7 +1124,7 @@
<!-- compile -->
<javac encoding="UTF-8" srcdir="${jill.dir}/src"
destdir="${jill.build.outdir}"
- source="1.7" target="1.7"
+ source="1.8" target="1.8"
debug="true" includeantruntime="false">
<classpath>
<filelist refid="jill.libs.filelist" />
@@ -1227,7 +1216,7 @@
<delete dir="${jill-api.lib.build.outdir}"/>
<mkdir dir="${jill-api.lib.build.outdir}"/>
<javac encoding="UTF-8" srcdir="${jill-api.dir}/src" destdir="${jill-api.lib.build.outdir}"
- source="1.6" target="1.6" debug="true"
+ source="1.8" target="1.8" debug="true"
includeantruntime="false" includeDestClasses="false" nowarn="true">
<classpath>
<filelist dir="/" files="${jsr305.dist.dir}/${jsr305.libname}" />
@@ -1360,7 +1349,7 @@
<target name="ecj">
<mkdir dir="${ecj.dist.dir}"/>
- <copy file="${ecj.dir}/ecj-4.6M4.jar" tofile="${ecj.dist.dir}/${ecj.libname}"/>
+ <copy file="${ecj.dir}/ecj-4.7M3.jar" tofile="${ecj.dist.dir}/${ecj.libname}"/>
</target>
@@ -1601,7 +1590,7 @@
</targets>
</dependset>
<javac encoding="UTF-8" srcdir="${sched.dir}/src" destdir="${schedlib.build.outdir}"
- source="1.7" target="1.7" debug="true" includeantruntime="false" includeDestClasses="false">
+ source="1.8" target="1.8" debug="true" includeantruntime="false" includeDestClasses="false">
<classpath>
<filelist refid="schedlib.link.libs.fileset"/>
</classpath>
@@ -1654,7 +1643,7 @@
encoding="UTF-8"
srcdir="${sched.dir}/src"
destdir="${sched-build.build.outdir}"
- source="1.6" target="1.6"
+ source="1.8" target="1.8"
debug="true" includeantruntime="false" includeDestClasses="false">
<compilerarg line="-Xlint:-options"/>
<classpath>
@@ -1743,7 +1732,7 @@
<javac encoding="UTF-8"
srcdir="${sched.dir}/tests"
destdir="${schedtests.build.outdir}"
- source="1.7" target="1.7"
+ source="1.8" target="1.8"
debug="true" includeantruntime="false" includeDestClasses="false">
<compilerarg line="-Xlint:-options"/>
<classpath>
@@ -2078,7 +2067,7 @@
<delete dir="${dexcomparator.dist.dir}" />
</target>
- <target name="dexcomparator-compile" depends="jack-lib, dex-lib,jsr305-lib,guava-lib,args4j-lib">
+ <target name="dexcomparator-compile" depends="jack-lib, dex-lib,jsr305-lib,guava-lib,args4j-lib,sched-lib">
<!-- project layout -->
<mkdir dir="${dexcomparator.build.outdir}"/>
<mkdir dir="${dexcomparator.libs.dir}"/>
@@ -2091,6 +2080,7 @@
<file name="${guava.dist.dir}/${guava.libname}" />
<file name="${args4j.dist.dir}/${args4j.libname}" />
<file name="${jack.dist.dir}/${jack.libname}" />
+ <file name="${schedlib.dist.dir}/${schedlib.libname}" />
</filelist>
</copy>
<!-- compile -->
@@ -2109,7 +2099,7 @@
<javac encoding="UTF-8"
srcdir="${dexcomparator.dir}/src"
destdir="${dexcomparator.build.outdir}"
- source="1.6" target="1.6"
+ source="1.8" target="1.8"
debug="true" includeantruntime="false" includeDestClasses="false">
<compilerarg line="-Xlint:-options"/>
<classpath>
@@ -2233,59 +2223,6 @@
</target>
<!-- ******************* -->
- <!-- gson -->
- <!-- ******************* -->
- <property name="gson.build.dir" value="${gson.dir}/build" />
- <property name="gson.build.outdir" value="${gson.build.dir}/classes" />
- <property name="gson.dist.dir" value="${gson.dir}/dist" />
- <property name="gson.libname" value="gson.jar"/>
-
- <target name="gson-clean">
- <delete dir="${gson.build.dir}" />
- <delete dir="${gson.dist.dir}" />
- </target>
-
- <target name="gson-lib">
- <!-- project layout -->
- <mkdir dir="${gson.build.outdir}"/>
- <mkdir dir="${gson.dist.dir}"/>
- <!-- compile -->
- <dependset>
- <sources>
- <fileset dir="${gson.dir}/gson/src/main/java" />
- </sources>
- <targets>
- <fileset file="${gson.dist.dir}/${gson.libname}"/>
- </targets>
- </dependset>
- <javac encoding="UTF-8" srcdir="${gson.dir}/gson/src/main/java"
- destdir="${gson.build.outdir}"
- source="1.5" target="1.5"
- debug="true" includeantruntime="false"/>
- <!-- package -->
- <jar destfile="${gson.dist.dir}/${gson.libname}"
- basedir="${gson.build.outdir}"
- includes="**"/>
- </target>
-
- <!-- ******************* -->
- <!-- jacoco -->
- <!-- ******************* -->
- <property name="jacoco.dist.dir" value="${jacoco.dir}/dist" />
- <property name="jacoco.core.libname" value="org.jacoco.core.jar"/>
- <property name="jacoco.report.libname" value="org.jacoco.report.jar"/>
-
- <target name="jacoco-clean">
- <delete dir="${jacoco.dist.dir}"/>
- </target>
-
- <target name="jacoco-libs">
- <mkdir dir="${jacoco.dist.dir}"/>
- <copy file="${jacoco.dir}/org.jacoco.core-0.7.5.201505241946.jar" tofile="${jacoco.dist.dir}/${jacoco.core.libname}"/>
- <copy file="${jacoco.dir}/org.jacoco.report-0.7.5.201505241946.jar" tofile="${jacoco.dist.dir}/${jacoco.report.libname}"/>
- </target>
-
- <!-- ******************* -->
<!-- jack-default-lib -->
<!-- ******************* -->
<property name="jack-default-lib.build.jack" value="${jack.dir}/build/default-lib.jack"/>
@@ -2435,6 +2372,7 @@
<java fork="true" failonerror="true"
output="${jack-tests.dir}/dump/PreSubmitTests.js"
+ logError="true"
classname="com.android.jack.test.junit.JackJUnitLauncher">
<jvmarg value="-Dtests.dump=true" />
<jvmarg value="-Dtests.config=${tests.config}"/>
@@ -2452,6 +2390,7 @@
<java fork="true" failonerror="true"
output="${jack-tests.dir}/dump/LongLastingTests.js"
+ logError="true"
classname="com.android.jack.test.junit.JackJUnitLauncher">
<jvmarg value="-Dtests.dump=true" />
<jvmarg value="-Dtests.config=${tests.config}"/>
@@ -2469,6 +2408,7 @@
<java fork="true" failonerror="true"
output="${jack-tests.dir}/dump/SchedAllTests.js"
+ logError="true"
classname="com.android.jack.test.junit.JackJUnitLauncher">
<jvmarg value="-Dtests.dump=true" />
<jvmarg value="-Dtests.config=${tests.config}"/>
@@ -2694,7 +2634,7 @@
<delete dir="${jack-jar-tools.build.outdir}"/>
<mkdir dir="${jack-jar-tools.build.outdir}"/>
<javac encoding="UTF-8" srcdir="${jack-jar-tools.dir}/src" destdir="${jack-jar-tools.build.outdir}"
- source="1.6" target="1.6" debug="true"
+ source="1.8" target="1.8" debug="true"
includeantruntime="false" includeDestClasses="false" nowarn="true">
<classpath>
<filelist refid="jack-jar-tools.static.libs.fileset"/>
@@ -2712,79 +2652,6 @@
<!-- ************************* -->
- <!-- jack-jacoco-reporter -->
- <!-- ************************* -->
- <property name="jack-jacoco-reporter.build.dir" value="${jack-jacoco-reporter.dir}/build" />
- <property name="jack-jacoco-reporter.dist.dir" value="${jack-jacoco-reporter.dir}/dist" />
- <property name="jack-jacoco-reporter.libs.dir" value="${jack-jacoco-reporter.dir}/libs" />
- <property name="jack-jacoco-reporter.build.outdir" value="${jack-jacoco-reporter.build.dir}/classes" />
- <property name="jack-jacoco-reporter.name" value="jack-jacoco-reporter.jar" />
-
- <target name="jack-jacoco-reporter-clean">
- <delete dir="${jack-jacoco-reporter.build.dir}" />
- <delete dir="${jack-jacoco-reporter.dist.dir}" />
- <delete dir="${jack-jacoco-reporter.libs.dir}" />
- </target>
-
- <target name="jack-jacoco-reporter-copy-libs" depends="jsr305-lib,args4j-lib,asm4-lib,gson-lib,jacoco-libs">
- <copy todir="${jack-jacoco-reporter.libs.dir}" flatten="true">
- <filelist dir="/" >
- <file name="${jsr305.dist.dir}/${jsr305.libname}"/>
- <file name="${schedlib.dist.dir}/${schedlib.libname}" />
- <file name="${args4j.dist.dir}/${args4j.libname}"/>
- <file name="${asm4.dist.dir}/${asm4.libname}"/>
- <file name="${gson.dist.dir}/${gson.libname}"/>
- <file name="${jacoco.dist.dir}/${jacoco.core.libname}"/>
- <file name="${jacoco.dist.dir}/${jacoco.report.libname}"/>
- </filelist>
- </copy>
- </target>
-
- <target name="jack-jacoco-reporter-check">
- <union id="jack-jacoco-reporter.uptodate.files">
- <fileset dir="${jack-jacoco-reporter.dir}/src" />
- <fileset dir="${jack-jacoco-reporter.dir}/etc" />
- <filelist id="jack-jacoco-reporter.static.libs.fileset" dir="/">
- <file name="${jack-jacoco-reporter.libs.dir}/${jsr305.libname}"/>
- <file name="${jack-jacoco-reporter.libs.dir}/${schedlib.libname}"/>
- <file name="${jack-jacoco-reporter.libs.dir}/${args4j.libname}"/>
- <file name="${jack-jacoco-reporter.libs.dir}/${asm4.libname}"/>
- <file name="${jack-jacoco-reporter.libs.dir}/${gson.libname}"/>
- <file name="${jack-jacoco-reporter.libs.dir}/${jacoco.core.libname}"/>
- <file name="${jack-jacoco-reporter.libs.dir}/${jacoco.report.libname}"/>
- </filelist>
- </union>
-
- <uptodate property="jack-jacoco-reporter.uptodate"
- targetfile="${jack-jacoco-reporter.dist.dir}/${jack-jacoco-reporter.name}">
- <srcresources refid="jack-jacoco-reporter.uptodate.files" />
- </uptodate>
- </target>
-
- <target name="jack-jacoco-reporter"
- depends="jack-jacoco-reporter-copy-libs,jack-jacoco-reporter-check"
- unless="${jack-jacoco-reporter.uptodate}">
- <delete dir="${jack-jacoco-reporter.build.outdir}"/>
- <mkdir dir="${jack-jacoco-reporter.build.outdir}"/>
- <javac encoding="UTF-8" srcdir="${jack-jacoco-reporter.dir}/src" destdir="${jack-jacoco-reporter.build.outdir}"
- source="1.6" target="1.6" debug="true"
- includeantruntime="false" includeDestClasses="false" nowarn="true">
- <classpath>
- <filelist refid="jack-jacoco-reporter.static.libs.fileset"/>
- </classpath>
- </javac>
- <unzip dest="${jack-jacoco-reporter.build.outdir}">
- <filelist refid="jack-jacoco-reporter.static.libs.fileset"/>
- </unzip>
- <copy file="${jack-project.dir}/version.properties"
- tofile="${jack-jacoco-reporter.build.outdir}/jack-jacoco-reporter-version.properties"/>
- <jar destfile="${jack-jacoco-reporter.dist.dir}/${jack-jacoco-reporter.name}" manifest="${jack-jacoco-reporter.dir}/etc/manifest.txt">
- <fileset dir="${jack-jacoco-reporter.build.outdir}"/>
- </jar>
- </target>
-
-
- <!-- ************************* -->
<!-- Checkstyle -->
<!-- ************************* -->
<property name="ivy.install.version" value="2.4.0" />
@@ -2827,11 +2694,10 @@
classname="com.puppycrawl.tools.checkstyle.Main"
fork="true"
failonerror="true">
- <jvmarg line="-Dconfig_loc=./jack"/>
<arg value="-f"/>
<arg value="plain"/>
<arg value="-c"/>
- <arg value="./jack/jackstyle.xml"/>
+ <arg value="./jack/config/checkstyle/checkstyle.xml"/>
<arg value="jack/src"/>
<arg value="jack-api/src"/>
<arg value="jack-tests/src"/>
@@ -2843,5 +2709,3 @@
</java>
</target>
</project>
-
-
diff --git a/core-stubs-mini/build.gradle b/core-stubs-mini/build.gradle
new file mode 100644
index 0000000..fa2cdcc
--- /dev/null
+++ b/core-stubs-mini/build.gradle
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+
+sourceCompatibility = 1.6
+targetCompatibility = 1.6
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ }
+}
+
+configurations {
+ coreStubsMiniJack
+}
+
+dependencies {
+ // jackConfig project(':jack')
+ //compile project(path: ':jack', configuration: 'jackFull')
+}
+
+task compileWithJack (type: Exec, dependsOn: project(path: ':jack', configuration: 'jackFull')) {
+ commandLine 'java', '-jar', project(':jack').configurations.jackFull.singleFile, '--verbose', 'error', '-D', 'jack.classpath.default-libraries=false', '--import', jar.archivePath, '--output-jack', "${project.buildDir}/core-stubs-mini.jack"
+}
+
+/*
+task showDeps << {
+ println configurations.jackConfig.files
+}
+*/
+
+artifacts {
+ coreStubsMiniJack file("${project.buildDir}/core-stubs-mini.jack")
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/ddmlib/build.gradle
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to ddmlib/build.gradle
index 0b9fd92..68d741d 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/ddmlib/build.gradle
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+apply plugin: 'java'
-public interface Interface {}
-
+jar {
+ from zipTree("ddmlib.jar")
+}
diff --git a/dexcomparator/.classpath b/dexcomparator/.classpath
index 645477c..ec1f6a8 100644
--- a/dexcomparator/.classpath
+++ b/dexcomparator/.classpath
@@ -2,7 +2,7 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="testing"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" path=".apt_generated">
<attributes>
<attribute name="optional" value="true"/>
@@ -14,5 +14,6 @@
<classpathentry kind="lib" path="libs/args4j-lib.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry combineaccessrules="false" kind="src" path="/Jack"/>
+ <classpathentry kind="src" path="/Scheduler"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/dexcomparator/.settings/org.eclipse.jdt.core.prefs b/dexcomparator/.settings/org.eclipse.jdt.core.prefs
index 88b949f..0a5bb1e 100644
--- a/dexcomparator/.settings/org.eclipse.jdt.core.prefs
+++ b/dexcomparator/.settings/org.eclipse.jdt.core.prefs
@@ -6,9 +6,9 @@
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -96,7 +96,7 @@
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/dexcomparator/Android.mk b/dexcomparator/Android.mk
index e78edb0..f0b81c4 100644
--- a/dexcomparator/Android.mk
+++ b/dexcomparator/Android.mk
@@ -13,6 +13,7 @@
LOCAL_JAVA_LIBRARIES := \
jack \
+ schedlib \
dexlib-jack \
jsr305lib-jack \
args4j-jack
@@ -30,6 +31,7 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
jack \
+ schedlib \
dexlib-jack \
jsr305lib-jack \
args4j-jack
diff --git a/dexcomparator/build.gradle b/dexcomparator/build.gradle
new file mode 100644
index 0000000..03bd43b
--- /dev/null
+++ b/dexcomparator/build.gradle
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+apply from: "$rootDir/gradle-script/checkstyle.gradle"
+apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ }
+}
+
+dependencies {
+ compile project(':args4j')
+ compile project(':dexlib')
+ compile project(':jack')
+ compile project(':sched')
+ compileOnly libs.jsr305
+ compile libs.guava
+}
+
+javadoc {
+ failOnError false
+}
diff --git a/dexcomparator/src/com/android/jack/comparator/DexComparator.java b/dexcomparator/src/com/android/jack/comparator/DexComparator.java
index 395e0df..e152d8f 100644
--- a/dexcomparator/src/com/android/jack/comparator/DexComparator.java
+++ b/dexcomparator/src/com/android/jack/comparator/DexComparator.java
@@ -29,6 +29,8 @@
import com.android.jack.dx.rop.code.AccessFlags;
import com.android.jack.dx.rop.type.Prototype;
import com.android.jack.dx.util.ByteInput;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
@@ -137,8 +139,8 @@
enableDebugInfoComparison = compareDebugInfo;
}
- public void compare(@Nonnull File referenceFile, @Nonnull File candidateFile) throws IOException,
- DifferenceFoundException {
+ public void compare(@Nonnull File referenceFile, @Nonnull File candidateFile)
+ throws DifferenceFoundException, CannotReadException, CannotCloseException {
if (enableBinaryDebugInfoComparison && !enableDebugInfoComparison) {
throw new IllegalArgumentException(
@@ -1052,6 +1054,12 @@
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(PROBLEM);
+ } catch (CannotReadException e) {
+ System.err.println(e.getMessage());
+ System.exit(PROBLEM);
+ } catch (CannotCloseException e) {
+ System.err.println(e.getMessage());
+ System.exit(PROBLEM);
} catch (DifferenceFoundException e) {
System.err.println(e.getMessage());
System.exit(DIFFERENCE);
diff --git a/dexcomparator/testing/com/android/jack/dexcomparator/test/BinaryCodeComparisonTest.java b/dexcomparator/testing/com/android/jack/dexcomparator/test/BinaryCodeComparisonTest.java
index 7c8c40f..e64636c 100644
--- a/dexcomparator/testing/com/android/jack/dexcomparator/test/BinaryCodeComparisonTest.java
+++ b/dexcomparator/testing/com/android/jack/dexcomparator/test/BinaryCodeComparisonTest.java
@@ -18,6 +18,8 @@
import com.android.jack.comparator.DexComparator;
import com.android.jack.comparator.DifferenceFoundException;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
import org.junit.Assert;
import org.junit.Test;
@@ -36,7 +38,8 @@
private static final File testSource2 = new File("testsource2");
@Test
- public void testDifferentBinaryCodeComparison() throws IOException {
+ public void testDifferentBinaryCodeComparison()
+ throws IOException, CannotReadException, CannotCloseException {
String sourcePath = "com/android/jack/dexcomparator/test/A.java";
File a1 = new File(testSource1, sourcePath);
File a2 = new File(testSource2, sourcePath);
@@ -61,7 +64,8 @@
}
@Test
- public void testIdenticalBinaryCodeComparison() throws IOException {
+ public void testIdenticalBinaryCodeComparison()
+ throws IOException, CannotReadException, CannotCloseException {
String sourcePath = "com/android/jack/dexcomparator/test/A.java";
File a1 = new File(testSource1, sourcePath);
File dex1 = File.createTempFile("dex1", ".dex");
diff --git a/dexlib/build.gradle b/dexlib/build.gradle
index 3bb2eaa..96eab44 100644
--- a/dexlib/build.gradle
+++ b/dexlib/build.gradle
@@ -29,7 +29,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+apply plugin: 'java'
+
dependencies {
- compile 'com.google.code.findbugs:jsr305:1.3.9'
+ compileOnly 'com.google.code.findbugs:jsr305:1.3.9'
compile 'com.google.guava:guava:13.0.1'
-}
\ No newline at end of file
+}
+
+javadoc {
+ failOnError false
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/dx-ref/build.gradle
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to dx-ref/build.gradle
index 0b9fd92..996c07e 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/dx-ref/build.gradle
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+apply plugin: 'java'
-package com.android.jack.coverage.test002;
-
-public interface Interface {}
-
+jar {
+ from zipTree("dx.jar")
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/ecj-tests-lib/build.gradle
similarity index 61%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to ecj-tests-lib/build.gradle
index 0b9fd92..6b5047d 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/ecj-tests-lib/build.gradle
@@ -14,7 +14,13 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+apply plugin: 'java'
-public interface Interface {}
-
+jar {
+ from zipTree("ecj-4.6M2.jar")
+ from zipTree("org.eclipse.equinox.common_3.8.0.v20150911-2106.jar")
+ from zipTree("org.eclipse.jdt.core_3.12.0.v20150913-1717.jar")
+ from zipTree("org.eclipse.jdt.core.tests.compiler_3.12.0.v20150913-1717.jar")
+ from zipTree("org.eclipse.test.performance_3.11.0.v20150223-0658.jar")
+ exclude 'META-INF/*'
+}
diff --git a/ecj/Android.mk b/ecj/Android.mk
index 1a01ba7..8d1baa7 100644
--- a/ecj/Android.mk
+++ b/ecj/Android.mk
@@ -19,6 +19,6 @@
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_JAVA_LIBRARIES := \
- ecj-jack:ecj-4.6M4$(COMMON_JAVA_PACKAGE_SUFFIX)
+ ecj-jack:ecj-4.7M3$(COMMON_JAVA_PACKAGE_SUFFIX)
include $(BUILD_HOST_PREBUILT)
diff --git a/ecj/README.android b/ecj/README.android
index 1506c9d..c92a7b5 100644
--- a/ecj/README.android
+++ b/ecj/README.android
@@ -1,5 +1,5 @@
-URL: http://download.eclipse.org/eclipse/downloads/drops4/S-4.6M4-201512092300/
-Tag: I20151209-2300, jdt 4.6M4, ecj version 3.12.0
+URL: http://download.eclipse.org/eclipse/downloads/drops4/S-4.7M3-201610270700/
+Tag: I20161027-0700, ecj version 3.13.0 (v20161020-2113)
License: EPL 1
Description: An incremental Java compiler.
Local Modifications: None.
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/ecj/build.gradle
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to ecj/build.gradle
index 0b9fd92..4cb92d9 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/ecj/build.gradle
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+apply plugin: 'java'
-public interface Interface {}
-
+jar {
+ from zipTree("ecj-4.7M3.jar")
+}
diff --git a/ecj/ecj-4.6M4.jar b/ecj/ecj-4.6M4.jar
deleted file mode 100644
index 56d696c..0000000
--- a/ecj/ecj-4.6M4.jar
+++ /dev/null
Binary files differ
diff --git a/ecj/ecj-4.7M3.jar b/ecj/ecj-4.7M3.jar
new file mode 100644
index 0000000..8b16e12
--- /dev/null
+++ b/ecj/ecj-4.7M3.jar
Binary files differ
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/gradle-script/checkstyle.gradle
similarity index 67%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to gradle-script/checkstyle.gradle
index 0b9fd92..7517c2e 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/gradle-script/checkstyle.gradle
@@ -14,7 +14,19 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+apply plugin: 'checkstyle'
-public interface Interface {}
+tasks.withType(Checkstyle) {
+ reports {
+ xml.enabled = false
+ html.enabled = true
+ }
+}
+checkstyle {
+ toolVersion = "7.2"
+ ignoreFailures = true
+ configFile = file("${rootDir}/project-settings/jackstyle.xml")
+}
+
+checkstyleTest.enabled false
diff --git a/gradle-script/dependencies.properties b/gradle-script/dependencies.properties
new file mode 100644
index 0000000..3940012
--- /dev/null
+++ b/gradle-script/dependencies.properties
@@ -0,0 +1,27 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+antlr_runtime = org.antlr:antlr-runtime:3.5.2
+asm_all = org.ow2.asm:asm-debug-all:5.0.4
+freemarker = org.freemarker:freemarker:2.3.25-incubating
+guava = com.google.guava:guava:18.0
+java_allocation_intrumenter = com.google.code.java-allocation-instrumenter:java-allocation-instrumenter:3.0.1
+jsr305 = com.google.code.findbugs:jsr305:3.0.1
+junit = junit:junit:4.12
+maths = io.gatling.uncommons.maths:uncommons-maths:1.2.3
+watchmaker = org.uncommons.watchmaker:watchmaker-framework:0.7.1
+
+gradle_processors_plugin = gradle.plugin.org.inferred:gradle-processors:1.2.5
+jarjar_plugin = org.anarres.jarjar:jarjar-gradle:1.0.0
+shadow_plugin = com.github.jengelman.gradle.plugins:shadow:1.2.4
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/gradle-script/findbugs.gradle
similarity index 64%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to gradle-script/findbugs.gradle
index 0b9fd92..4d18b23 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/gradle-script/findbugs.gradle
@@ -14,7 +14,21 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+apply plugin: 'findbugs'
-public interface Interface {}
+tasks.withType(FindBugs) {
+ reports {
+ xml.enabled = false
+ html.enabled = true
+ }
+}
+findbugs {
+ toolVersion = "3.0.1"
+ reportLevel = "medium"
+ effort = "max"
+ // omitVisitors = ["edu.umd.cs.findbugs.detect.EmptyZipFileEntry"]
+ ignoreFailures = true
+}
+
+findbugsTest.enabled false
diff --git a/gradle-script/libversions.gradle b/gradle-script/libversions.gradle
new file mode 100644
index 0000000..f0a2962
--- /dev/null
+++ b/gradle-script/libversions.gradle
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Add ext.libs for library versions
+Properties dependencies = new Properties()
+File dependenciesProperties = new File(rootDir, "gradle-script/dependencies.properties")
+dependenciesProperties.withReader { dependencies.load(it) }
+
+def libs = [:].withDefault { key -> throw new IllegalArgumentException('"' + key + '" not a valid dependency.') }
+for (name in dependencies.stringPropertyNames()) {
+ libs[name] = dependencies.getProperty(name)
+}
+rootProject.ext['libs'] = libs
diff --git a/gradle-script/versionfile.gradle b/gradle-script/versionfile.gradle
new file mode 100644
index 0000000..1a932b1
--- /dev/null
+++ b/gradle-script/versionfile.gradle
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+task deleteVersionFile(type: Delete) {
+ delete "${project.buildDir}/${jar.baseName}-version.properties"
+}
+
+task copyVersionPropertiesFile(type: Copy, dependsOn: deleteVersionFile) {
+ String pathToVersionFile
+ if (!System.getProperty("version.file", "").equals("")) {
+ pathToVersionFile = System.getProperty("version.file")
+ } else {
+ pathToVersionFile = "${rootDir}/version.properties"
+ }
+
+ // TODO: currently needs to be an absolute path
+ // add checks, message, and/or add pwd to path
+ from (pathToVersionFile) {
+ rename file(pathToVersionFile).name, "${jar.baseName}-version.properties"
+ }
+ into file("${project.buildDir}/")
+
+}
+
+task createJackVersionFile (dependsOn: copyVersionPropertiesFile) {
+ outputs.file "${project.buildDir}/${jar.baseName}-version.properties"
+ doLast {
+ if (System.getProperty("version.file", "").equals("")) {
+ ant.propertyfile(
+ file: "${project.buildDir}/${jar.baseName}-version.properties") {
+ entry( key: "releaser", value: "${rootProject.emitterId}")
+ entry( key: "version.buildid", value: "${rootProject.uuid}")
+ }
+ }
+ }
+}
+copyVersionPropertiesFile.dependsOn deleteVersionFile
+gradle.taskGraph.whenReady { graph ->
+ if (!graph.hasTask(dist)) {
+ createJackVersionFile.enabled = false
+ deleteVersionFile.enabled = false
+ }
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..e7ee39d
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,15 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+buildDir=gradle-build
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..3baa851
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..333db47
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Oct 28 10:36:18 CEST 2016
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-bin.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..27309d9
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f6d5974
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/jack-api/.classpath b/jack-api/.classpath
index 09808fb..4c675c8 100644
--- a/jack-api/.classpath
+++ b/jack-api/.classpath
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="src" path="example"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" path=".apt_generated">
<attributes>
<attribute name="optional" value="true"/>
diff --git a/jack-api/.settings/org.eclipse.jdt.core.prefs b/jack-api/.settings/org.eclipse.jdt.core.prefs
index dc66277..73739d4 100644
--- a/jack-api/.settings/org.eclipse.jdt.core.prefs
+++ b/jack-api/.settings/org.eclipse.jdt.core.prefs
@@ -7,9 +7,9 @@
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -113,7 +113,7 @@
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/jack-api/build.gradle b/jack-api/build.gradle
new file mode 100644
index 0000000..77386d5
--- /dev/null
+++ b/jack-api/build.gradle
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+apply plugin: 'com.github.johnrengelman.shadow'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+apply from: "$rootDir/gradle-script/checkstyle.gradle"
+apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ }
+}
+
+dependencies {
+ compileOnly libs.jsr305
+}
+
+javadoc {
+ failOnError false
+ destinationDir = file("${rootDir}/gradle-dist/doc/jack/jack-external/jack")
+}
+
+apply from: "$rootDir/gradle-script/versionfile.gradle"
+
+jar {
+ classifier 'lib'
+}
+
+shadowJar {
+ dependsOn createJackVersionFile
+ classifier ''
+ from ("${project.buildDir}") {
+ include "jack-api-version.properties"
+ }
+}
+
+task dist (type: Copy, dependsOn: shadowJar) {
+ from shadowJar.archivePath
+ into file("${rootDir}/gradle-dist/")
+}
+
+task zipSources(type: Zip){
+ classifier 'src'
+ doFirst {
+ file("$rootDir/gradle-dist").mkdirs()
+ }
+ from 'src'
+ destinationDir file("${rootDir}/gradle-dist")
+}
+
+dist.dependsOn zipSources
+
+project(':jack-api:sample') {
+
+ apply plugin: 'application'
+
+ mainClassName = "com.android.jack.api.example.WithServiceLoader"
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = ['../example']
+ }
+ }
+ }
+
+ dependencies {
+ compile project(':jack-api')
+ }
+}
diff --git a/jack-api/src/com/android/jack/api/example/WithServiceLoader.java b/jack-api/example/com/android/jack/api/example/WithServiceLoader.java
similarity index 98%
rename from jack-api/src/com/android/jack/api/example/WithServiceLoader.java
rename to jack-api/example/com/android/jack/api/example/WithServiceLoader.java
index e776559..a5df92e 100644
--- a/jack-api/src/com/android/jack/api/example/WithServiceLoader.java
+++ b/jack-api/example/com/android/jack/api/example/WithServiceLoader.java
@@ -42,6 +42,11 @@
* @throws SecurityException indicate a security violation.
*/
public static void main(String[] args) throws SecurityException {
+
+ for (String a : args) {
+ System.out.println(a);
+ }
+
if (args.length != 3) {
System.out.println(
"Usage: <jack-core-library> <source-files-directory> <output-dex-files-directory>");
diff --git a/jack-coverage/Android.mk b/jack-coverage/Android.mk
index b23622d..b798d87 100644
--- a/jack-coverage/Android.mk
+++ b/jack-coverage/Android.mk
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 The Android Open Source Project
+# Copyright (C) 2017 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -12,24 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := jack-coverage-plugin
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_JAVA_RESOURCE_DIRS := rsc
-LOCAL_JAVACFLAGS := -processor com.android.sched.build.SchedAnnotationProcessor
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-
-LOCAL_JAVA_LIBRARIES := \
- jsr305lib-jack \
- schedlib \
- jack \
- sched-build
-
-include $(BUILD_HOST_JAVA_LIBRARY)
+include $(call all-subdir-makefiles)
diff --git a/jack-coverage/README-jack-coverage.md b/jack-coverage/README-jack-coverage.md
new file mode 100644
index 0000000..d8dfe46
--- /dev/null
+++ b/jack-coverage/README-jack-coverage.md
@@ -0,0 +1,94 @@
+# Code coverage with Jack
+
+Jack supports code coverage with `JaCoCo` (http://eclemma.org/jacoco). During the compilation,
+it will instrument code using JaCoCo API. Therefore, it requires a dependency to a jacoco-agent.jar
+that can be imported in the DEX output. Jack supports Jacoco v0.7.5 (see directory external/jacoco
+in the Android source tree).
+
+Besides, Jack will also produce a coverage metadata file (or description file) in a JSON format.
+It will be used to generate the report so we can match coverage execution file with source code.
+
+Starting with the Jack Douarn release (4.x), the code coverage is provided with the Jack plugin
+`jack-coverage-plugin.jar`.
+
+## Enabling code coverage with Jack
+
+To enable code coverage with Jack command-line, pass the following command-line options:
+
+```
+--pluginpath <code_coverage_plugin_jar>
+--plugin com.android.jack.coverage.CodeCoverage
+-D jack.coverage=true
+-D jack.coverage.metadata.file=<coverage_metadata_file_path>
+-D jack.coverage.jacoco.package=<jacoco_internal_package_name>
+```
+
+where
+* `<code_coverage_plugin_jar>` is the path to the plugin jar file. In the Android tree, it is
+ located in the `prebuilts/sdk/tools` directory.
+* `<coverage_metadata_file_path>` is a *mandatory* property that indicates the path of the file that
+ will contain coverage information. This file must be passed to reporting tool to generate the
+ report (see section Generating the report below)
+* `<jacoco_internal_package_name>` is an *optional* property that indicates the fully qualified name
+ of the internal package name containing the class 'Offline' in the associated jacoco-agent.jar
+ file. This package name is different for each release of JaCoCo library. If this property is not
+ provided, Jack will automatically look for a Jacoco package which starts with
+ `org.jacoco.agent.rt.internal`.
+
+Note: because Jack's code coverage support is based on Jacoco, it is mandatory that Jacoco classes
+are available at compilation time. They can be either on the classpath (--classpath) or imported
+as a static library in the output (--import).
+
+Jack also supports optional include and exclude class filtering based on class name:
+
+```
+-D jack.coverage.jacoco.include=<includes>
+-D jack.coverage.jacoco.exclude=<excludes>
+```
+
+where
+* `<includes>` is a comma-separated list of fully-qualified class names to include
+* `<excludes>` is a comma-separated list of fully-qualified class names to exclude
+
+Wildcards characters '?' and '*' are accepted to replace respectively one character or multiple
+characters.
+
+You can find the full command-line usage with
+
+ java -jar <jack_jar> --help
+
+You can also find the description of all properties (including those for code coverage) with
+
+ java -jar <jack_jar> --pluginpath <code_coverage_plugin_jar> --plugin com.android.jack.coverage.CodeCoverage --help-properties
+
+## Collecting code coverage
+
+To produce coverage execution data, instrumented classes must be executed and coverage data be
+dumped in a coverage execution file. For Android instrumentation tests, the frameworks can do
+so automatically:
+
+ adb shell am instrument -w -e coverage true <package_name>/<instrumentation_class_name>
+
+Once the tests are finished, the location of the coverage execution file should be printed in the
+console.
+
+## Generating the report
+
+A coverage report can be generated using the `jack-jacoco-reporter.jar` file. This is a command-line
+tool taking at least three inputs:
+
+* the coverage metadata file(s) produced by Jack
+* the coverage execution file(s) produced during execution
+* an existing directory where the report is generated
+
+It is also recommended to indicate the directories containing the source code of classes being
+analyzed to link coverage information with the source code.
+
+The command then looks like:
+
+ java -jar jack-jacoco-reporter.jar --metadata-file <metadata_file> --coverage-file <execution_file> --report-dir <report_directory> --source-dir <source_dir_1> ... --source-dir <source_dir_N>
+
+You can find the full command-line usage with
+
+ java -jar jack-jacoco-reporter.jar --help
+
diff --git a/jack-coverage/build.xml b/jack-coverage/build.xml
index e52f3bb..27e9134 100644
--- a/jack-coverage/build.xml
+++ b/jack-coverage/build.xml
@@ -17,49 +17,66 @@
<project name="jack-coverage" default="all">
- <dirname property="jack-project.dir" file="${ant.file.jack-coverage}" />
- <property name="jack-coverage-libs.dir" value="${jack-project.dir}/libs" />
- <property name="jack-coverage-tools.dir" value="${jack-project.dir}/tools" />
- <property name="jack-coverage-rsc.dir" value="${jack-project.dir}/rsc" />
- <property name="jack-coverage-build.dir" value="${jack-project.dir}/build" />
- <property name="jack-coverage-build-classes.dir" value="${jack-coverage-build.dir}/classes" />
- <property name="jack-coverage-build-test-classes.dir"
- value="${jack-coverage-build.dir}/testClasses" />
- <property name="jack-coverage-dist.dir" value="${jack-project.dir}/dist" />
- <property name="jack-coverage.execname" value="jack-coverage-plugin.jar" />
- <property name="jack-coverage-tests.execname" value="jack-coverage-tests.jar" />
- <property name="jack-coverage-tests.output.dir" value="${jack-project.dir}/testResults" />
+ <dirname property="jack-coverage-project.dir" file="${ant.file.jack-coverage}" />
+ <property name="jack-coverage-dist.dir" value="${jack-coverage-project.dir}/dist" />
+ <property name="jack-coverage-rsc.dir" value="${jack-coverage-project.dir}/rsc" />
+ <property name="jack-coverage-doc.dir" value="${jack-coverage-dist.dir}/doc" />
+ <property name="jack-coverage-tests.output.dir"
+ value="${jack-coverage-project.dir}/testResults" />
<property name="jack-coverage-tests.dump.dir" value="${jack-coverage-dist.dir}/dump" />
<property name="jack-coverage-tests.suite.name"
value="com.android.jack.coverage.AllCoverageTests" />
<target name="all"
description="Build plugin and tests"
- depends="jack-coverage-plugin,jack-coverage-tests" />
+ depends="jack-coverage-plugin,jack-coverage-tests,jack-jacoco-reporter" />
- <target name="clean" description="deletes files produced by all targets">
- <delete dir="${jack-coverage-build.dir}" />
+ <target name="clean"
+ description="deletes files produced by all targets"
+ depends="plugin-clean,reporter-clean,gson-clean">
<delete dir="${jack-coverage-dist.dir}" />
- <delete dir="${jack-coverage-libs.dir}" />
- <delete dir="${jack-coverage-tools.dir}" />
<delete dir="${jack-coverage-tests.output.dir}" />
</target>
+ <!-- *************** -->
+ <!-- Coverage plugin -->
+ <!-- *************** -->
+ <property name="plugin.dir" value="${jack-coverage-project.dir}/plugin"/>
+ <property name="plugin.libs.dir" value="${plugin.dir}/libs" />
+ <property name="plugin.tools.dir" value="${plugin.dir}/tools" />
+ <property name="plugin.rsc.dir" value="${plugin.dir}/rsc" />
+ <property name="plugin.build.dir" value="${plugin.dir}/build" />
+ <property name="plugin.build.src.classes.dir" value="${plugin.build.dir}/classes" />
+ <property name="plugin.build.test.classes.dir" value="${plugin.build.dir}/testClasses" />
+ <property name="plugin.execname" value="jack-coverage-plugin.jar" />
+ <property name="plugin.tests.execname" value="jack-coverage-tests.jar" />
+
+ <target name="plugin-clean" description="deletes files produced by all targets">
+ <delete dir="${plugin.build.dir}" />
+ <delete dir="${plugin.libs.dir}" />
+ <delete dir="${plugin.tools.dir}" />
+ </target>
+
<target name="copy-jack-libs-and-tools"
- description="update the project libraries (must be used at least once to install them)">
- <mkdir dir="${jack-coverage-libs.dir}" />
- <mkdir dir="${jack-coverage-tools.dir}" />
+ description="update the project libraries (must be used at least once to install them)"
+ depends="gson-lib">
+ <mkdir dir="${plugin.libs.dir}" />
+ <mkdir dir="${plugin.tools.dir}" />
<!-- Copy required libraries -->
- <copy file="../jack/dist/jack-lib.jar" todir="${jack-coverage-libs.dir}" />
- <copy file="../jack-tests/dist/jack-tests.jar" todir="${jack-coverage-libs.dir}" />
- <copy file="../gson/dist/gson.jar" todir="${jack-coverage-libs.dir}" />
- <copy file="../sched/dist/sched-lib.jar" todir="${jack-coverage-libs.dir}" />
- <copy file="../junit4/dist/junit4.jar" todir="${jack-coverage-libs.dir}" />
- <copy file="../jsr305/dist/jsr305-lib.jar" todir="${jack-coverage-libs.dir}" />
+ <copy todir="${plugin.libs.dir}" flatten="true">
+ <filelist dir="${jack-coverage-project.dir}/../" >
+ <file name="jack/dist/jack-lib.jar"/>
+ <file name="jack-tests/dist/jack-tests.jar" />
+ <file name="sched/dist/sched-lib.jar"/>
+ <file name="junit4/dist/junit4.jar"/>
+ <file name="jsr305/dist/jsr305-lib.jar"/>
+ </filelist>
+ </copy>
+ <copy file="${gson.dist.dir}/${gson.libname}" todir="${plugin.libs.dir}" />
<!-- Copy required tools for packaging -->
- <copy file="../sched/dist/sched-build.jar" todir="${jack-coverage-tools.dir}" />
+ <copy file="../sched/dist/sched-build.jar" todir="${plugin.tools.dir}" />
</target>
@@ -67,9 +84,9 @@
description="build Jack code coverage support"
depends="copy-jack-libs-and-tools">
- <mkdir dir="${jack-coverage-build-classes.dir}" />
- <javac srcdir="src"
- destdir="${jack-coverage-build-classes.dir}"
+ <mkdir dir="${plugin.build.src.classes.dir}" />
+ <javac srcdir="${plugin.dir}/src"
+ destdir="${plugin.build.src.classes.dir}"
source="1.7"
target="1.7"
encoding="UTF-8"
@@ -77,24 +94,28 @@
includeantruntime="false"
includeDestClasses="false">
<classpath>
- <filelist dir="${jack-coverage-libs.dir}">
+ <filelist dir="${plugin.libs.dir}">
<file name="jsr305-lib.jar" />
<file name="sched-lib.jar" />
<file name="jack-lib.jar" />
</filelist>
</classpath>
- <compilerarg line="-processorpath ${jack-coverage-tools.dir}/sched-build.jar" />
+ <compilerarg line="-processorpath ${plugin.tools.dir}/sched-build.jar" />
<compilerarg line="-processor com.android.sched.build.SchedAnnotationProcessor" />
</javac>
<!-- copy resource files -->
- <copy todir="${jack-coverage-build-classes.dir}">
- <fileset dir="${jack-coverage-rsc.dir}" />
+ <copy todir="${plugin.build.src.classes.dir}">
+ <fileset dir="${plugin.rsc.dir}" />
</copy>
+ <!-- Copy the version.properties -->
+ <copy file="${jack-coverage-rsc.dir}/jack-coverage-plugin-version.properties"
+ todir="${plugin.build.src.classes.dir}"/>
+
<mkdir dir="${jack-coverage-dist.dir}" />
- <jar basedir="${jack-coverage-build-classes.dir}"
- destfile="${jack-coverage-dist.dir}/${jack-coverage.execname}" />
+ <jar basedir="${plugin.build.src.classes.dir}"
+ destfile="${jack-coverage-dist.dir}/${plugin.execname}" />
</target>
@@ -102,38 +123,38 @@
description="build coverage tests"
depends="jack-coverage-plugin">
- <mkdir dir="${jack-coverage-build-test-classes.dir}" />
- <javac srcdir="tests"
- destdir="${jack-coverage-build-test-classes.dir}"
+ <mkdir dir="${plugin.build.test.classes.dir}" />
+ <javac srcdir="${plugin.dir}/tests"
+ destdir="${plugin.build.test.classes.dir}"
source="1.7"
target="1.7"
encoding="UTF-8"
debug="true"
includeantruntime="false"
includeDestClasses="false">
- <exclude name="com/android/jack/coverage/test*/**" />
+ <exclude name="com/android/jack/coverage/**/test*/**" />
<classpath>
- <filelist dir="${jack-coverage-libs.dir}">
+ <filelist dir="${plugin.libs.dir}">
<file name="jsr305-lib.jar" />
<file name="sched-lib.jar" />
<file name="jack-tests.jar" />
- <file name="gson.jar" />
+ <file name="${gson.libname}" />
</filelist>
- <file name="${jack-coverage-dist.dir}/${jack-coverage.execname}" />
+ <file name="${jack-coverage-dist.dir}/${plugin.execname}" />
</classpath>
</javac>
<!-- Extract jack-tests classes to embed them in the final jar -->
- <unzip dest="${jack-coverage-build-test-classes.dir}">
- <filelist dir="${jack-coverage-libs.dir}">
+ <unzip dest="${plugin.build.test.classes.dir}">
+ <filelist dir="${plugin.libs.dir}">
<file name="jack-tests.jar" />
- <file name="gson.jar" />
+ <file name="${gson.libname}" />
</filelist>
</unzip>
<!-- TODO can we strip out Jack tests to only keep infrastrcture ? -->
- <jar basedir="${jack-coverage-build-test-classes.dir}"
- destfile="${jack-coverage-dist.dir}/${jack-coverage-tests.execname}"
+ <jar basedir="${plugin.build.test.classes.dir}"
+ destfile="${jack-coverage-dist.dir}/${plugin.tests.execname}"
manifest="etc/manifest.txt" />
</target>
@@ -143,7 +164,7 @@
<filelist id="jack.junit.tests.classpath" dir="${jack-coverage-dist.dir}">
- <file name="${jack-coverage-tests.execname}" />
+ <file name="${plugin.tests.execname}" />
</filelist>
<condition property="jack.tests.assertions" value="-da" else="-ea">
@@ -203,6 +224,7 @@
<java fork="true"
failonerror="true"
output="${jack-coverage-tests.dump.dir}/AllCoverageTests.js"
+ logError="true"
classname="com.android.jack.test.junit.JackJUnitLauncher">
<jvmarg value="-Dtests.dump=true" />
<jvmarg value="-Dtests.config=${tests.config}" />
@@ -215,8 +237,153 @@
</target>
+ <!-- ***************** -->
+ <!-- Coverage reporter -->
+ <!-- ***************** -->
+ <property name="reporter.dir" value="${jack-coverage-project.dir}/reporter"/>
+ <property name="reporter.build.dir" value="${reporter.dir}/build" />
+ <property name="reporter.libs.dir" value="${reporter.dir}/libs" />
+ <property name="reporter.build.src.classes.dir" value="${reporter.build.dir}/classes" />
+ <property name="reporter.execname" value="jack-jacoco-reporter.jar" />
+
+ <target name="reporter-clean">
+ <delete dir="${reporter.build.dir}" />
+ <delete dir="${reporter.libs.dir}" />
+ </target>
+
+ <target name="jack-jacoco-reporter-copy-libs" depends="gson-lib">
+ <copy todir="${reporter.libs.dir}" flatten="true">
+ <filelist dir="${jack-coverage-project.dir}/.." >
+ <file name="jsr305/dist/jsr305-lib.jar"/>
+ <file name="sched/dist/sched-lib.jar" />
+ <file name="args4j/dist/args4j-lib.jar"/>
+ <file name="asm4/dist/asm4-lib.jar"/>
+ <file name="junit4/dist/junit4.jar"/>
+ </filelist>
+ </copy>
+
+ <copy file="${gson.dist.dir}/${gson.libname}" todir="${reporter.libs.dir}" />
+ <copy file="../jacoco/org.jacoco.core-0.7.5.201505241946.jar"
+ tofile="${reporter.libs.dir}/org.jacoco.core.jar"/>
+ <copy file="../jacoco/org.jacoco.report-0.7.5.201505241946.jar"
+ tofile="${reporter.libs.dir}/org.jacoco.report.jar"/>
+ </target>
+
+ <target name="jack-jacoco-reporter-check">
+ <union id="jack-jacoco-reporter.uptodate.files">
+ <fileset dir="${reporter.dir}/src" />
+ <fileset dir="${reporter.dir}/etc" />
+ <filelist id="jack-jacoco-reporter.static.libs.fileset" dir="/">
+ <file name="${reporter.libs.dir}/jsr305-lib.jar"/>
+ <file name="${reporter.libs.dir}/sched-lib.jar"/>
+ <file name="${reporter.libs.dir}/args4j-lib.jar"/>
+ <file name="${reporter.libs.dir}/asm4-lib.jar"/>
+ <file name="${reporter.libs.dir}/${gson.libname}"/>
+ <file name="${reporter.libs.dir}/org.jacoco.core.jar"/>
+ <file name="${reporter.libs.dir}/org.jacoco.report.jar"/>
+ </filelist>
+ </union>
+
+ <uptodate property="jack-jacoco-reporter.uptodate"
+ targetfile="${jack-coverage-dist.dir}/${reporter.execname}">
+ <srcresources refid="jack-jacoco-reporter.uptodate.files" />
+ </uptodate>
+ </target>
+
+ <target name="jack-jacoco-reporter"
+ depends="jack-jacoco-reporter-copy-libs,jack-jacoco-reporter-check"
+ unless="${jack-jacoco-reporter.uptodate}">
+ <delete dir="${reporter.build.src.classes.dir}"/>
+ <mkdir dir="${reporter.build.src.classes.dir}"/>
+ <javac encoding="UTF-8" srcdir="${reporter.dir}/src"
+ destdir="${reporter.build.src.classes.dir}"
+ source="1.6" target="1.6" debug="true"
+ includeantruntime="false" includeDestClasses="false" nowarn="true">
+ <classpath>
+ <filelist refid="jack-jacoco-reporter.static.libs.fileset"/>
+ </classpath>
+ </javac>
+ <unzip dest="${reporter.build.src.classes.dir}">
+ <filelist refid="jack-jacoco-reporter.static.libs.fileset"/>
+ </unzip>
+
+ <!-- Reuse the same version.properties than the plugin. -->
+ <copy file="${jack-coverage-rsc.dir}/jack-coverage-plugin-version.properties"
+ tofile="${reporter.build.src.classes.dir}/jack-jacoco-reporter-version.properties"/>
+
+ <jar destfile="${jack-coverage-dist.dir}/${reporter.execname}"
+ manifest="${reporter.dir}/etc/manifest.txt">
+ <fileset dir="${reporter.build.src.classes.dir}"/>
+ </jar>
+ </target>
+
<target name="dist" description="distribution of the code coverage plugin" depends="all">
<!-- Placeholder for future release process -->
</target>
+ <target name="dist-doc" description="documentation of the code coverage support" depends="dist">
+ <union id="dist-doc.classpath.files">
+ <fileset dir="${plugin.dir}/libs" />
+ <fileset file="${jack-coverage-dist.dir}/${plugin.execname}" />
+ </union>
+ <pathconvert property="dist-doc.classpath.path" refid="dist-doc.classpath.files" />
+ <mkdir dir="${jack-coverage-doc.dir}" />
+ <!-- Plugin javadoc -->
+ <javadoc destdir="${jack-coverage-doc.dir}/javadoc/plugin"
+ author="true"
+ version="true"
+ use="true"
+ windowtitle="Jack's code coverage plugin"
+ classpath="${dist-doc.classpath.path}"
+ nodeprecated="true">
+ <fileset dir="${plugin.dir}/src" includes="**/*.java" />
+ </javadoc>
+ <!-- README.md -->
+ <copy file="${jack-coverage-project.dir}/README-jack-coverage.md"
+ todir="${jack-coverage-doc.dir}" />
+ <exec executable="pandoc" failifexecutionfails="false">
+ <arg line="--from=markdown" />
+ <arg line="--to=plain" />
+ <arg line="--output=${jack-coverage-doc.dir}/README-jack-coverage.txt" />
+ <arg line="${jack-coverage-doc.dir}/README-jack-coverage.md"/>
+ </exec>
+ </target>
+
+ <!-- ******************* -->
+ <!-- gson -->
+ <!-- ******************* -->
+ <property name="gson.dir" value="${jack-coverage-project.dir}/../gson"/>
+ <property name="gson.build.dir" value="${gson.dir}/build" />
+ <property name="gson.build.outdir" value="${gson.build.dir}/classes" />
+ <property name="gson.dist.dir" value="${gson.dir}/dist" />
+ <property name="gson.libname" value="gson.jar"/>
+
+ <target name="gson-clean">
+ <delete dir="${gson.build.dir}" />
+ <delete dir="${gson.dist.dir}" />
+ </target>
+
+ <target name="gson-lib">
+ <!-- project layout -->
+ <mkdir dir="${gson.build.outdir}"/>
+ <mkdir dir="${gson.dist.dir}"/>
+ <!-- compile -->
+ <dependset>
+ <sources>
+ <fileset dir="${gson.dir}/gson/src/main/java" />
+ </sources>
+ <targets>
+ <fileset file="${gson.dist.dir}/${gson.libname}"/>
+ </targets>
+ </dependset>
+ <javac encoding="UTF-8" srcdir="${gson.dir}/gson/src/main/java"
+ destdir="${gson.build.outdir}"
+ source="1.5" target="1.5"
+ debug="true" includeantruntime="false"/>
+ <!-- package -->
+ <jar destfile="${gson.dist.dir}/${gson.libname}"
+ basedir="${gson.build.outdir}"
+ includes="**"/>
+ </target>
+
</project>
diff --git a/jack-coverage/.classpath b/jack-coverage/plugin/.classpath
similarity index 91%
rename from jack-coverage/.classpath
rename to jack-coverage/plugin/.classpath
index d06fd1a..989b865 100644
--- a/jack-coverage/.classpath
+++ b/jack-coverage/plugin/.classpath
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
- <classpathentry excluding="com/android/jack/coverage/test001/|com/android/jack/coverage/test002/|com/android/jack/coverage/test003/foo/|com/android/jack/coverage/test004/|com/android/jack/coverage/test005/|com/android/jack/coverage/test006_v1/jack/|com/android/jack/coverage/test006_v2/jack/" kind="src" path="tests"/>
+ <classpathentry excluding="com/android/jack/coverage/test001/|com/android/jack/coverage/test002/|com/android/jack/coverage/test003/foo/|com/android/jack/coverage/test004/|com/android/jack/coverage/test005/|com/android/jack/coverage/test006_v1/jack/|com/android/jack/coverage/test006_v2/jack/|com/android/jack/coverage/java8/" kind="src" path="tests"/>
<classpathentry kind="src" path="rsc"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
diff --git a/jack-coverage/.factorypath b/jack-coverage/plugin/.factorypath
similarity index 100%
rename from jack-coverage/.factorypath
rename to jack-coverage/plugin/.factorypath
diff --git a/jack-coverage/.project b/jack-coverage/plugin/.project
similarity index 100%
rename from jack-coverage/.project
rename to jack-coverage/plugin/.project
diff --git a/jack-coverage/.settings/edu.umd.cs.findbugs.core.prefs b/jack-coverage/plugin/.settings/edu.umd.cs.findbugs.core.prefs
similarity index 100%
rename from jack-coverage/.settings/edu.umd.cs.findbugs.core.prefs
rename to jack-coverage/plugin/.settings/edu.umd.cs.findbugs.core.prefs
diff --git a/jack-coverage/.settings/org.eclipse.core.resources.prefs b/jack-coverage/plugin/.settings/org.eclipse.core.resources.prefs
similarity index 100%
rename from jack-coverage/.settings/org.eclipse.core.resources.prefs
rename to jack-coverage/plugin/.settings/org.eclipse.core.resources.prefs
diff --git a/jack-coverage/.settings/org.eclipse.jdt.core.prefs b/jack-coverage/plugin/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from jack-coverage/.settings/org.eclipse.jdt.core.prefs
rename to jack-coverage/plugin/.settings/org.eclipse.jdt.core.prefs
diff --git a/jack-coverage/.settings/org.eclipse.jdt.ui.prefs b/jack-coverage/plugin/.settings/org.eclipse.jdt.ui.prefs
similarity index 100%
rename from jack-coverage/.settings/org.eclipse.jdt.ui.prefs
rename to jack-coverage/plugin/.settings/org.eclipse.jdt.ui.prefs
diff --git a/jack-coverage/.settings/org.eclipse.ltk.core.refactoring.prefs b/jack-coverage/plugin/.settings/org.eclipse.ltk.core.refactoring.prefs
similarity index 100%
rename from jack-coverage/.settings/org.eclipse.ltk.core.refactoring.prefs
rename to jack-coverage/plugin/.settings/org.eclipse.ltk.core.refactoring.prefs
diff --git a/jack-coverage/plugin/Android.mk b/jack-coverage/plugin/Android.mk
new file mode 100644
index 0000000..1eb21e7
--- /dev/null
+++ b/jack-coverage/plugin/Android.mk
@@ -0,0 +1,35 @@
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := jack-coverage-plugin
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_RESOURCE_DIRS := rsc ../rsc
+LOCAL_JAVACFLAGS := -processor com.android.sched.build.SchedAnnotationProcessor
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+
+LOCAL_JAVA_LIBRARIES := \
+ jsr305lib-jack \
+ schedlib \
+ jack \
+ sched-build
+
+include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/jack-coverage/rsc/META-INF/services/com.android.jack.plugin.v01.Plugin b/jack-coverage/plugin/rsc/META-INF/services/com.android.jack.plugin.v01.Plugin
similarity index 100%
rename from jack-coverage/rsc/META-INF/services/com.android.jack.plugin.v01.Plugin
rename to jack-coverage/plugin/rsc/META-INF/services/com.android.jack.plugin.v01.Plugin
diff --git a/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageAnalyzer.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageAnalyzer.java
new file mode 100644
index 0000000..dd19697
--- /dev/null
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageAnalyzer.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import com.android.jack.cfg.BasicBlock;
+import com.android.jack.cfg.ConditionalBasicBlock;
+import com.android.jack.cfg.ControlFlowGraph;
+import com.android.jack.cfg.SwitchBasicBlock;
+import com.android.jack.ir.ast.JDefinedClassOrInterface;
+import com.android.jack.ir.ast.JExpression;
+import com.android.jack.ir.ast.JIfStatement;
+import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JStatement;
+import com.android.jack.ir.ast.JSwitchStatement;
+import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.sourceinfo.SourceInfo;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
+import com.android.jack.transformations.EmptyClinit;
+import com.android.sched.item.Description;
+import com.android.sched.schedulable.Constraint;
+import com.android.sched.schedulable.Filter;
+import com.android.sched.schedulable.RunnableSchedulable;
+import com.android.sched.schedulable.Support;
+import com.android.sched.schedulable.Transform;
+
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Analyzes control flow graph of a method to determine the coverage probes required to instrument
+ * the method.
+ */
+@Description("Code coverage analyzer")
+@Support(CodeCoverageFeature.class)
+@Constraint(need = {CodeCoverageMarker.Initialized.class, ControlFlowGraph.class},
+ no = EmptyClinit.class)
+@Transform(
+ add = {CodeCoverageMarker.Analyzed.class, ProbeMarker.class}, modify = CodeCoverageMarker.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
+public class CodeCoverageAnalyzer implements RunnableSchedulable<JMethod> {
+ @Override
+ public void run(@Nonnull JMethod m) {
+ if (m.isNative() || m.isAbstract()) {
+ // This method has no code so cannot be instrumented.
+ return;
+ }
+
+ JDefinedClassOrInterface declaringClass = m.getEnclosingType();
+ CodeCoverageMarker coverageMarker = declaringClass.getMarker(CodeCoverageMarker.class);
+ if (coverageMarker == null) {
+ // The declaring class is not selected for code coverage.
+ return;
+ }
+
+ ControlFlowGraph controlFlowGraph = m.getMarker(ControlFlowGraph.class);
+ assert controlFlowGraph != null;
+
+ analyzeCFG(m, controlFlowGraph, coverageMarker);
+ }
+
+ /**
+ * Analyzes the control flow graph to identify all required probes. This does not modify the IR,
+ * only adding {@link ProbeMarker} on {@link BasicBlock}.
+ * @param method the method being analyzed
+ * @param controlFlowGraph
+ * @param coverageMarker
+ */
+ private static void analyzeCFG(@Nonnull JMethod method,
+ @Nonnull ControlFlowGraph controlFlowGraph, @Nonnull CodeCoverageMarker coverageMarker) {
+ // We use a LIFO work queue to follow a depth-first traversal of the CFG.
+ final Deque<BasicBlock> workQueue = new ArrayDeque<BasicBlock>();
+
+ // Remember which blocks has been visited.
+ final Set<BasicBlock> visitedBlocks = new HashSet<BasicBlock>();
+
+ final BasicBlock entryBlock = controlFlowGraph.getEntryNode();
+ final BasicBlock exitBlock = controlFlowGraph.getExitNode();
+
+ // We process each node using a depth-first traversal and stop when all nodes have been
+ // visited. We push the successors of the entry block because we do not need to process it.
+ workQueue.addAll(entryBlock.getSuccessors());
+
+ // The current probe. When it is null, it means that a new probe must be created for the next
+ // visited block.
+ assert !workQueue.isEmpty();
+ ProbeDescription currentProbe = coverageMarker.createProbe(method);
+
+ while (!workQueue.isEmpty()) {
+ final BasicBlock bb = workQueue.removeFirst();
+ assert bb != entryBlock;
+ assert bb != exitBlock;
+ assert !visitedBlocks.contains(bb);
+ assert !bb.containsMarker(ProbeMarker.class);
+ assert currentProbe != null;
+
+ // Remember that this block has been visited.
+ visitedBlocks.add(bb);
+
+ // Add successors to the queue.
+ for (BasicBlock succ : bb.getSuccessors()) {
+ if (succ == exitBlock) {
+ // We don't want to process the exit block.
+ continue;
+ }
+ if (visitedBlocks.contains(succ)) {
+ // This successor has been visited already.
+ continue;
+ }
+ if (workQueue.contains(succ)) {
+ // This successor is already in the work queue.
+ continue;
+ }
+ // Add it to the head of the queue to visit in depth-first mode.
+ workQueue.addFirst(succ);
+ }
+
+ // Update probe with source information of each statement it covers.
+ for (JStatement st : bb.getStatements()) {
+ ProbeUpdater visitor = new ProbeUpdater(currentProbe);
+ visitor.accept(st);
+ }
+
+ // Mark branch lines when coming from an 'if' (including conditional) or 'switch' statement.
+ // This is required to generate the coverage report.
+ for (BasicBlock pred : bb.getPredecessors()) {
+ if (pred instanceof ConditionalBasicBlock || pred instanceof SwitchBasicBlock) {
+ // Get last statement of predecessor.
+ List<JStatement> predStatements = pred.getStatements();
+ JStatement branchStatement = predStatements.get(predStatements.size() - 1);
+ assert branchStatement instanceof JIfStatement ||
+ branchStatement instanceof JSwitchStatement;
+ SourceInfo branchSourceInfo = branchStatement.getSourceInfo();
+ currentProbe.incrementLine(branchSourceInfo.getStartLine(), 1, true);
+ }
+ }
+
+ // Is the block terminating a probe?
+ if (isLastBlockForProbe(bb, exitBlock)) {
+ // This basic blocks ends the current probe. The instrumentation will add extra statements
+ // at its end to enable the probe at runtime.
+ bb.addMarker(new ProbeMarker(currentProbe));
+
+ // We need to start a new probe for the next block being visited, if there is at least one.
+ if (!workQueue.isEmpty()) {
+ currentProbe = coverageMarker.createProbe(method);
+ }
+ }
+ }
+
+ // We must have visited all the nodes of the cfg.
+ assert visitedBlocks.size() == controlFlowGraph.getNodes().size();
+ }
+
+ // TODO(shertz) Jacoco does not seem to split probe on throwing instructions. If we want
+ // to do the same thing, we could test whether the predecessor is a Pei block, in which
+ // case we continue with the same probe instead of creating a new one.
+ private static boolean isLastBlockForProbe(@Nonnull BasicBlock bb,
+ @Nonnull BasicBlock exitBlock) {
+ assert bb != exitBlock;
+ List<BasicBlock> successors = bb.getSuccessors();
+ int successorsCount = successors.size();
+ if (successorsCount > 1) {
+ // There are multiple paths from this block so the probe ends.
+ return true;
+ } else {
+ assert successorsCount == 1;
+ BasicBlock succ = successors.get(0);
+ if (succ.getPredecessors().size() > 1) {
+ // There are multiple paths to the successor so the probe ends.
+ return true;
+ } else if (succ == exitBlock) {
+ // The block exits the method (return or throw) so the probe ends
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Updates probes with source information.
+ */
+ private static class ProbeUpdater extends JVisitor {
+ @Nonnull
+ private final ProbeDescription probe;
+
+ public ProbeUpdater(@Nonnull ProbeDescription probe) {
+ this.probe = probe;
+ }
+
+ @Override
+ public void endVisit(@Nonnull JExpression x) {
+ updateProbe(x.getSourceInfo());
+ }
+
+ @Override
+ public boolean visit(@Nonnull JIfStatement x) {
+ // Do not visit 'then' and 'else' statements: they will be assigned to different probes
+ // so we do not want to update the current probe with their source information.
+ accept(x.getIfExpr());
+ return false;
+ }
+
+ @Override
+ public boolean visit(@Nonnull JSwitchStatement x) {
+ // Do not visit 'case' and 'default' statements: they will be assigned to different probes
+ // so we do not want to update the current probe with their source information.
+ accept(x.getExpr());
+ return false;
+ }
+
+ @Override
+ public boolean visit(@Nonnull JStatement x) {
+ updateProbe(x.getSourceInfo());
+ return false;
+ }
+
+ private void updateProbe(@Nonnull SourceInfo sourceInfo) {
+ // Without debug info, JaCoCo considers instruction's line to be -1.
+ int line = (sourceInfo != SourceInfo.UNKNOWN) ? sourceInfo.getStartLine() : -1;
+ probe.incrementLine(line, 1, false);
+ }
+ }
+}
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageFeature.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageFeature.java
similarity index 89%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageFeature.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageFeature.java
index 1fed31a..dc35703 100644
--- a/jack-coverage/src/com/android/jack/coverage/CodeCoverageFeature.java
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageFeature.java
@@ -23,6 +23,7 @@
import com.android.sched.util.codec.WriterFileCodec;
import com.android.sched.util.config.HasKeyId;
import com.android.sched.util.config.id.BooleanPropertyId;
+import com.android.sched.util.config.id.EnumPropertyId;
import com.android.sched.util.config.id.PropertyId;
import com.android.sched.util.config.id.WriterFilePropertyId;
import com.android.sched.util.file.FileOrDirectory.Existence;
@@ -85,5 +86,12 @@
.requiredIf(CODE_COVERAGE.getValue().isTrue())
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
-}
+ @Nonnull
+ public static final EnumPropertyId<CoverageScope> COVERAGE_SCOPE = EnumPropertyId
+ .create("jack.coverage.jacoco.scope", "Scope of code coverage", CoverageScope.class)
+ .addDefaultValue(CoverageScope.ALL)
+ .requiredIf(CODE_COVERAGE.getValue().isTrue())
+ .addCategory(DumpInLibrary.class)
+ .addCategory(PrebuiltCompatibility.class);
+}
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageLookupException.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageLookupException.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageLookupException.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageLookupException.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageMarker.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMarker.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageMarker.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMarker.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageMetadataFile.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMetadataFile.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageMetadataFile.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMetadataFile.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageMetadataFileWriter.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMetadataFileWriter.java
similarity index 99%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageMetadataFileWriter.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMetadataFileWriter.java
index 27995a1..c35469d 100644
--- a/jack-coverage/src/com/android/jack/coverage/CodeCoverageMetadataFileWriter.java
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageMetadataFileWriter.java
@@ -280,7 +280,7 @@
while (list.hasNext()) {
JDefinedClassOrInterface c = list.next();
CodeCoverageMarker marker = c.removeMarker(CodeCoverageMarker.class);
- if (marker == null) {
+ if (marker == null || marker.getProbes().isEmpty()) {
// No code coverage for this class.
continue;
}
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoveragePlugin.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoveragePlugin.java
similarity index 98%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoveragePlugin.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoveragePlugin.java
index f93003f..7880e31 100644
--- a/jack-coverage/src/com/android/jack/coverage/CodeCoveragePlugin.java
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoveragePlugin.java
@@ -106,9 +106,9 @@
return set;
}
- // Plugin is compatible starting from 1.3-b4.
+ // Plugin is compatible starting from 1.3-b16.
private static final int JACK_COMPATIBLE_VERSION_RELEASE_CODE = 4;
- private static final int JACK_COMPATIBLE_VERSION_SUBRELEASE_CODE = 9;
+ private static final int JACK_COMPATIBLE_VERSION_SUBRELEASE_CODE = 21;
@Override
public boolean isCompatibileWithJack(@Nonnull Version jackVersion) {
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageSelector.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageSelector.java
similarity index 78%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageSelector.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageSelector.java
index 831deb9..742d834 100644
--- a/jack-coverage/src/com/android/jack/coverage/CodeCoverageSelector.java
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageSelector.java
@@ -17,8 +17,8 @@
package com.android.jack.coverage;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.ir.ast.JDefinedInterface;
import com.android.jack.ir.formatter.SourceFormatter;
+import com.android.jack.library.TypeInInputLibraryLocation;
import com.android.jack.shrob.obfuscation.OriginalNames;
import com.android.sched.item.Description;
import com.android.sched.schedulable.Constraint;
@@ -53,6 +53,9 @@
ThreadConfig.get(CodeCoverageFeature.COVERAGE_JACOCO_INCLUDES),
ThreadConfig.get(CodeCoverageFeature.COVERAGE_JACOCO_EXCLUDES));
+ @Nonnull
+ private final CoverageScope scope = ThreadConfig.get(CodeCoverageFeature.COVERAGE_SCOPE);
+
@Override
public void run(@Nonnull JDefinedClassOrInterface t) {
if (needsCoverage(t)) {
@@ -65,12 +68,29 @@
// Do not instrument classes that will no be part of the output.
return false;
}
- if (declaredType instanceof JDefinedInterface) {
- // Interface are not covered.
+ if (!isInScope(declaredType)) {
+ // Type is not in the scope.
return false;
}
// Manage class filtering.
String typeName = formatter.getName(declaredType);
return filter.matches(typeName);
}
+
+ private boolean isInScope(@Nonnull JDefinedClassOrInterface declaredType) {
+ switch (scope) {
+ case SOURCE:
+ return isSourceType(declaredType);
+ case IMPORTS:
+ return !isSourceType(declaredType);
+ case ALL:
+ return true;
+ default:
+ throw new AssertionError();
+ }
+ }
+
+ private static boolean isSourceType(@Nonnull JDefinedClassOrInterface declaredType) {
+ return !(declaredType.getLocation() instanceof TypeInInputLibraryLocation);
+ }
}
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageTransformer.java b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageTransformer.java
similarity index 91%
rename from jack-coverage/src/com/android/jack/coverage/CodeCoverageTransformer.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageTransformer.java
index d2f339a..d8d2a6f 100644
--- a/jack-coverage/src/com/android/jack/coverage/CodeCoverageTransformer.java
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CodeCoverageTransformer.java
@@ -39,6 +39,7 @@
import com.android.jack.ir.ast.JGoto;
import com.android.jack.ir.ast.JIfStatement;
import com.android.jack.ir.ast.JIntLiteral;
+import com.android.jack.ir.ast.JInterface;
import com.android.jack.ir.ast.JLocal;
import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JLongLiteral;
@@ -120,10 +121,18 @@
NamingTools.getNonSourceConflictingName("jacocoData");
/**
- * The modifiers of the added field.
+ * The modifiers of the added field for a class.
*/
- private static final int COVERAGE_DATA_FIELD_MODIFIERS =
- JModifier.PRIVATE | JModifier.STATIC | JModifier.FINAL | JModifier.TRANSIENT;
+ private static final int CLASS_COVERAGE_DATA_FIELD_MODIFIERS = JModifier.PRIVATE
+ | JModifier.STATIC | JModifier.FINAL | JModifier.TRANSIENT | JModifier.SYNTHETIC;
+
+ /**
+ * The modifiers of the added field for an interface.
+ *
+ * Note: the ART runtime rejects the {@code transient} modifier for interfaces.
+ */
+ private static final int INTERFACE_COVERAGE_DATA_FIELD_MODIFIERS =
+ JModifier.PUBLIC | JModifier.STATIC | JModifier.FINAL | JModifier.SYNTHETIC;
/**
* The name of the method that registers (once) and returns the array of coverage probes.
@@ -135,7 +144,7 @@
* The modifiers of the added method.
*/
private static final int COVERAGE_DATA_INIT_METHOD_MODIFIERS =
- JModifier.PRIVATE | JModifier.STATIC;
+ JModifier.PRIVATE | JModifier.STATIC | JModifier.SYNTHETIC;
private static final String LOCAL_VAR_NAME_PREFIX = "cov";
@@ -287,8 +296,8 @@
@Override
public void run(@Nonnull JDefinedClassOrInterface declaredType) {
CodeCoverageMarker marker = declaredType.getMarker(CodeCoverageMarker.class);
- if (marker == null) {
- // This class is excluded from code coverage.
+ if (marker == null || marker.getProbes().isEmpty()) {
+ // No code coverage for this class.
return;
}
@@ -319,9 +328,11 @@
@Nonnull
private JField createProbesArrayField(@Nonnull JDefinedClassOrInterface declaredType) {
JType booleanArrayType = getCoverageDataType();
- SourceInfo sourceInfo = declaredType.getSourceInfo();
- return new JField(sourceInfo, COVERAGE_DATA_FIELD_NAME, declaredType, booleanArrayType,
- COVERAGE_DATA_FIELD_MODIFIERS);
+ int modifiers = (declaredType instanceof JInterface)
+ ? INTERFACE_COVERAGE_DATA_FIELD_MODIFIERS
+ : CLASS_COVERAGE_DATA_FIELD_MODIFIERS;
+ return new JField(SourceInfo.UNKNOWN, COVERAGE_DATA_FIELD_NAME, declaredType, booleanArrayType,
+ modifiers);
}
/**
@@ -395,35 +406,23 @@
// Iterates over every basic block to insert code for probe and removes the ProbeMarker.
ControlFlowGraph controlFlowGraph = m.getMarker(ControlFlowGraph.class);
assert controlFlowGraph != null;
- final BasicBlock entryBlock = controlFlowGraph.getEntryNode();
- final BasicBlock exitBlock = controlFlowGraph.getExitNode();
for (BasicBlock bb : controlFlowGraph.getNodes()) {
ProbeMarker probeMarker = bb.removeMarker(ProbeMarker.class);
if (probeMarker == null) {
- // The basic block may not have been marked.
- assert (bb == entryBlock || bb == exitBlock);
continue;
}
- if (bb == entryBlock || bb == exitBlock) {
- continue;
+ // We must set the probe at the end of this basic block.
+ assert !bb.getStatements().isEmpty();
+ JStatement insertionPoint = bb.getLastInstruction();
+ ProbeDescription probe = probeMarker.getProbe();
+ TransformationStep transformationStep;
+ JStatement probeStatement = createProbeStatement(insertionPoint.getSourceInfo(), probe);
+ if (canInsertProbeBeforeLastStatement(bb)) {
+ transformationStep = new AppendBefore(insertionPoint, probeStatement);
+ } else {
+ transformationStep = new PrependAfter(insertionPoint, probeStatement);
}
- BasicBlock insertionBlock = probeMarker.getInsertionBlock();
- assert insertionBlock != null;
- if (bb == insertionBlock) {
- // We must set the probe at the end of this basic block.
- assert !bb.getStatements().isEmpty() : bb;
- JStatement insertionPoint = bb.getLastInstruction();
- ProbeDescription probe = probeMarker.getProbe();
- TransformationStep transformationStep;
- JStatement probeStatement = createProbeStatement(insertionPoint.getSourceInfo(), probe);
- boolean insertBeforeLastStatement = canInsertProbeBeforeLastStatement(bb);
- if (insertBeforeLastStatement) {
- transformationStep = new AppendBefore(insertionPoint, probeStatement);
- } else {
- transformationStep = new PrependAfter(insertionPoint, probeStatement);
- }
- transformationRequest.append(transformationStep);
- }
+ transformationRequest.append(transformationStep);
}
return false;
}
@@ -438,7 +437,7 @@
// Insert initialization statement as the first statement.
JLocalRef localRef = local.makeRef(sourceInfo);
JExpression expr = new JMethodCall(sourceInfo, null, coverageMethod.getEnclosingType(),
- coverageMethod.getMethodIdWide(), booleanArrayType, false);
+ coverageMethod.getMethodId(), false);
JAsgOperation assign = new JAsgOperation(sourceInfo, localRef, expr);
transformationRequest.append(
new PrependStatement(x.getBlock(), new JExpressionStatement(sourceInfo, assign)));
@@ -468,19 +467,18 @@
private JMethod createProbesArrayInitMethod(@Nonnull JDefinedClassOrInterface declaredType,
@Nonnegative int probeCount, @Nonnull TransformationRequest transformationRequest,
@Nonnull JField coverageDataField, long classId) {
- SourceInfo sourceInfo = declaredType.getSourceInfo();
JType returnType = getCoverageDataType();
JMethodId methodId = new JMethodId(
new JMethodIdWide(COVERAGE_DATA_INIT_METHOD_NAME, MethodKind.STATIC),
returnType);
JMethod coverageInitMethod = new JMethod(
- sourceInfo, methodId, declaredType, COVERAGE_DATA_INIT_METHOD_MODIFIERS);
+ SourceInfo.UNKNOWN, methodId, declaredType, COVERAGE_DATA_INIT_METHOD_MODIFIERS);
fillCoverageInitMethodBody(coverageInitMethod, declaredType, probeCount, transformationRequest,
coverageDataField, classId);
return coverageInitMethod;
}
- /** Generates body of JaCoCo initialization method in three-adress-code form.
+ /** Generates body of JaCoCo initialization method in three-address-code form.
*
* @param coverageInitMethod
* @param coverageDataField
@@ -553,8 +551,8 @@
transformationRequest.append(new AppendStatement(ifBlock, probeCountInit));
// Add '<local> = org.jacoco...Offline.getProbes(<classId>, <className>, <probeCount>)'
- JMethodCall methodCall = new JMethodCall(ifBlock.getSourceInfo(), null, jacocoClass,
- jacocoMethodId.getMethodIdWide(), JPrimitiveTypeEnum.BOOLEAN.getType().getArray(), false);
+ JMethodCall methodCall =
+ new JMethodCall(ifBlock.getSourceInfo(), null, jacocoClass, jacocoMethodId, false);
methodCall.addArg(classIdLocal.makeRef(ifBlock.getSourceInfo()));
methodCall.addArg(classNameLocal.makeRef(ifBlock.getSourceInfo()));
methodCall.addArg(probeCountLocal.makeRef(ifBlock.getSourceInfo()));
diff --git a/jack-coverage/src/com/android/jack/coverage/CoverageFilter.java b/jack-coverage/plugin/src/com/android/jack/coverage/CoverageFilter.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CoverageFilter.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CoverageFilter.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CoverageFilterSet.java b/jack-coverage/plugin/src/com/android/jack/coverage/CoverageFilterSet.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CoverageFilterSet.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CoverageFilterSet.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CoverageFilterSetCodec.java b/jack-coverage/plugin/src/com/android/jack/coverage/CoverageFilterSetCodec.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CoverageFilterSetCodec.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CoverageFilterSetCodec.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CoveragePattern.java b/jack-coverage/plugin/src/com/android/jack/coverage/CoveragePattern.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CoveragePattern.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CoveragePattern.java
diff --git a/jack-coverage/src/com/android/jack/coverage/CoveragePatternCodec.java b/jack-coverage/plugin/src/com/android/jack/coverage/CoveragePatternCodec.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/CoveragePatternCodec.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/CoveragePatternCodec.java
diff --git a/jack-coverage/plugin/src/com/android/jack/coverage/CoverageScope.java b/jack-coverage/plugin/src/com/android/jack/coverage/CoverageScope.java
new file mode 100644
index 0000000..4123eb6
--- /dev/null
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/CoverageScope.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import com.android.sched.util.codec.EnumName;
+import com.android.sched.util.codec.VariableName;
+
+/**
+ * Represents the scope of the coverage instrumentation.
+ */
+@VariableName("scope")
+public enum CoverageScope {
+ /**
+ * A scope that contains only classes from source files.
+ */
+ @EnumName(name = "source", description = "instrument only types from source files")
+ SOURCE,
+ /**
+ * A scope that contains only classes from imported libraries.
+ */
+ @EnumName(name = "imports", description = "instrument only types from imported libraries")
+ IMPORTS,
+ /**
+ * A scope that contains classes coming from source files and imported libraries.
+ */
+ @EnumName(name = "all", description = "instrument all types")
+ ALL;
+}
\ No newline at end of file
diff --git a/jack-coverage/src/com/android/jack/coverage/JacocoPackage.java b/jack-coverage/plugin/src/com/android/jack/coverage/JacocoPackage.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/JacocoPackage.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/JacocoPackage.java
diff --git a/jack-coverage/src/com/android/jack/coverage/ProbeDescription.java b/jack-coverage/plugin/src/com/android/jack/coverage/ProbeDescription.java
similarity index 100%
rename from jack-coverage/src/com/android/jack/coverage/ProbeDescription.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/ProbeDescription.java
diff --git a/jack-coverage/src/com/android/jack/coverage/ProbeMarker.java b/jack-coverage/plugin/src/com/android/jack/coverage/ProbeMarker.java
similarity index 70%
rename from jack-coverage/src/com/android/jack/coverage/ProbeMarker.java
rename to jack-coverage/plugin/src/com/android/jack/coverage/ProbeMarker.java
index 7e63b16..49b7564 100644
--- a/jack-coverage/src/com/android/jack/coverage/ProbeMarker.java
+++ b/jack-coverage/plugin/src/com/android/jack/coverage/ProbeMarker.java
@@ -21,26 +21,19 @@
import com.android.sched.marker.Marker;
import com.android.sched.marker.ValidOn;
-import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
- * A marker representing a unique code coverage probe on a {@link BasicBlock}.
+ * A marker representing a unique code coverage probe on a {@link BasicBlock} that must be
+ * instrumented to activate this probe at execution time.
*/
-@Description("A probe assigned to a basic block.")
+@Description("A code coverage probe assigned to a basic block that must be instrumented.")
@ValidOn(BasicBlock.class)
public class ProbeMarker implements Marker {
@Nonnull
private final ProbeDescription probe;
- /**
- * Indicates whether the corresponding {@link BasicBlock} contains instrumentation code for
- * this probe.
- */
- @CheckForNull
- private BasicBlock insertionBlock = null;
-
public ProbeMarker(@Nonnull ProbeDescription probe) {
this.probe = probe;
}
@@ -50,16 +43,6 @@
return probe;
}
- @CheckForNull
- public BasicBlock getInsertionBlock() {
- return insertionBlock;
- }
-
- public void setInsertionBlock(@Nonnull BasicBlock insertionBlock) {
- assert this.insertionBlock == null;
- this.insertionBlock = insertionBlock;
- }
-
@Override
public Marker cloneIfNeeded() {
return this;
diff --git a/jack-coverage/tests/com/android/jack/coverage/AllCoverageTests.java b/jack-coverage/plugin/tests/com/android/jack/coverage/AllCoverageTests.java
similarity index 88%
rename from jack-coverage/tests/com/android/jack/coverage/AllCoverageTests.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/AllCoverageTests.java
index 2f7525b..4600119 100644
--- a/jack-coverage/tests/com/android/jack/coverage/AllCoverageTests.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/AllCoverageTests.java
@@ -22,6 +22,10 @@
import org.junit.runners.Suite.SuiteClasses;
@RunWith(JackTestRunner.class)
-@SuiteClasses(value = {CoverageTests.class})
+@SuiteClasses(value = {
+ CoverageJava8Tests.class,
+ CoverageShrobTests.class,
+ CoverageTests.class
+})
public class AllCoverageTests {
}
diff --git a/jack-coverage/tests/com/android/jack/coverage/AllUnitTests.java b/jack-coverage/plugin/tests/com/android/jack/coverage/AllUnitTests.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/AllUnitTests.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/AllUnitTests.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/CoverageFilterSetCodecTest.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageFilterSetCodecTest.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/CoverageFilterSetCodecTest.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/CoverageFilterSetCodecTest.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/CoverageFilterSetTest.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageFilterSetTest.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/CoverageFilterSetTest.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/CoverageFilterSetTest.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/CoverageFilterTest.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageFilterTest.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/CoverageFilterTest.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/CoverageFilterTest.java
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageJava8Tests.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageJava8Tests.java
new file mode 100644
index 0000000..726bb93
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageJava8Tests.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.test.toolchain.Toolchain.SourceLevel;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.io.File;
+
+public class CoverageJava8Tests extends CoverageTest {
+ /**
+ * Tests that lambda anonymous classes are not instrumented.
+ */
+ @Test
+ public void test001() throws Exception {
+ String testPackageName = getTestPackageName("java8.test001");
+ File srcDir = CoverageTest.getTestRootDir(testPackageName);
+
+ JackBasedToolchain toolchain = createJackToolchain();
+ toolchain.setSourceLevel(SourceLevel.JAVA_8);
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+
+ File outDexFolder = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolder, false, srcDir);
+
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+ Assert.assertEquals(1, classes.size()); // Foo class only
+
+ JsonObject jsonClass = getJsonClass(classes, getClassNameForJson(testPackageName + ".Foo"));
+ Assert.assertNotNull(jsonClass);
+
+ JsonArray jsonClassMethods = jsonClass.get("methods").getAsJsonArray();
+ Assert.assertEquals(4, jsonClassMethods.size()); // constructor + 2 methods + lambda
+ }
+
+ /**
+ * Tests that static and default methods from interfaces are instrumented.
+ */
+ @Test
+ public void test002() throws Exception {
+ String testPackageName = getTestPackageName("java8.test002");
+ File srcDir = CoverageTest.getTestRootDir(testPackageName);
+
+ JackBasedToolchain toolchain = createJackToolchain();
+ toolchain.setSourceLevel(SourceLevel.JAVA_8);
+ // Static and default methods in interfaces are only allowed since API level 24.
+ toolchain.addProperty("jack.android.min-api-level", "24");
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+
+ File outDexFolder = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolder, false, srcDir);
+
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+ Assert.assertEquals(2, classes.size()); // Foo + SAM classes
+ Assert.assertNotNull(getJsonClass(classes, getClassNameForJson(testPackageName + ".Foo")));
+ Assert.assertNotNull(getJsonClass(classes, getClassNameForJson(testPackageName + ".SAM")));
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/CoveragePatternCodecTest.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoveragePatternCodecTest.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/CoveragePatternCodecTest.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/CoveragePatternCodecTest.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/CoveragePatternTest.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoveragePatternTest.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/CoveragePatternTest.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/CoveragePatternTest.java
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageShrobTests.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageShrobTests.java
new file mode 100644
index 0000000..9b43736
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageShrobTests.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import com.google.gson.JsonArray;
+
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+public class CoverageShrobTests extends CoverageTest {
+
+ /**
+ * Tests that shrunk classes are not in the coverage metadata file.
+ */
+ @Test
+ public void testShrob001() throws Exception {
+ String testPackageName = getTestPackageName("shrob.test001");
+ File testRootDir = getTestRootDir(testPackageName);
+ File srcDir = getTestRootDir(testPackageName);
+
+ JackBasedToolchain toolchain = createJackToolchain();
+ toolchain.addProguardFlags(new File(testRootDir, "proguard.flags"));
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+
+ File outDexFolder = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolder, false, srcDir);
+
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+ Assert.assertEquals(1, classes.size());
+ Assert.assertNotNull(getJsonClass(classes, getClassNameForJson(testPackageName + ".Foo")));
+ }
+
+ /**
+ * Tests that coverage is applied on obfuscated classes.
+ *
+ * Note: deobfuscation of classes is the job of the code coverage reporter tool.
+ */
+ @Test
+ public void testShrob002() throws Exception {
+ String testPackageName = getTestPackageName("shrob.test002");
+ File testRootDir = getTestRootDir(testPackageName);
+ File srcDir = getTestRootDir(testPackageName);
+
+ JackBasedToolchain toolchain = createJackToolchain();
+ toolchain.addProguardFlags(new File(testRootDir, "proguard.flags"));
+ // Dump the mapping file to know obfuscated classes' names.
+ File mappingFile = AbstractTestTools.createTempFile("coverage-mapping", ".txt");
+ toolchain.addProperty("jack.obfuscation.mapping.dump", Boolean.toString(true));
+ toolchain.addProperty("jack.obfuscation.mapping.dump.file", mappingFile.getAbsolutePath());
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+
+ File outDexFolder = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolder, false, srcDir);
+
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+ Assert.assertEquals(2, classes.size());
+
+ // Extract class names from mapping file and check that they are in the coverage metadata file.
+ List<String> obfuscatedNames = extractObfuscatedClassNames(mappingFile);
+ for (String className : obfuscatedNames) {
+ Assert.assertNotNull(getJsonClass(classes, getClassNameForJson(className)));
+ }
+ }
+
+ @Nonnull
+ private List<String> extractObfuscatedClassNames(@Nonnull File mappingFile)
+ throws FileNotFoundException, IOException {
+ List<String> names = new ArrayList<String>();
+ try (BufferedReader reader = new BufferedReader(new FileReader(mappingFile))) {
+ String line;
+ while (true) {
+ line = reader.readLine();
+ if (line == null) {
+ break;
+ }
+ // Remove leading and trailing spaces.
+ line = line.trim();
+ final int lastPos = line.length() - 1;
+ if (line.charAt(lastPos) != ':') {
+ // Not a class line
+ continue;
+ }
+ final int separatorPos = line.indexOf(MAPPING_FILE_SEPARATOR);
+ if (separatorPos < 0) {
+ throw new AssertionError();
+ }
+ // Extract obfuscated class name.
+ String className =
+ line.substring(separatorPos + MAPPING_FILE_SEPARATOR.length(), lastPos).trim();
+ names.add(className);
+ }
+ }
+ return names;
+ }
+
+ private static final String MAPPING_FILE_SEPARATOR = "->";
+}
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageTest.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageTest.java
new file mode 100644
index 0000000..08ed6be
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageTest.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import com.android.jack.test.TestsProperties;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.util.NamingTools;
+
+import junit.framework.Assert;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nonnull;
+
+public abstract class CoverageTest {
+
+ @Nonnull
+ private static final String COVERAGE_TEST_PACKAGE = "com.android.jack.coverage";
+
+ @Nonnull
+ protected static String getTestPackageName(@Nonnull String testName) {
+ return COVERAGE_TEST_PACKAGE + "." + testName;
+ }
+
+ /**
+ * Workaround AbstractTestTools.getTestRootDir hardcoded for Jack tests only.
+ */
+ @Nonnull
+ protected static final File getTestRootDir(@Nonnull String testPackageName) {
+ File rootDir = TestsProperties.getJackRootDir();
+ rootDir = new File(rootDir, "jack-coverage");
+ rootDir = new File(rootDir, "plugin");
+ rootDir = new File(rootDir, "tests");
+ return new File(rootDir, testPackageName.replace('.', File.separatorChar));
+ }
+
+ @Nonnull
+ protected static JackBasedToolchain createJackToolchain() {
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
+ return toolchain;
+ }
+
+
+ protected static void assertNotEquals(@Nonnull String msg, long expected, long actual) {
+ if (expected == actual) {
+ StringBuilder stringBuilder = new StringBuilder(msg);
+ stringBuilder.append(": expected=");
+ stringBuilder.append(Long.toHexString(expected));
+ stringBuilder.append(", actual=");
+ stringBuilder.append(Long.toHexString(actual));
+ Assert.fail(stringBuilder.toString());
+ }
+ }
+
+ protected static long getClassIdOf(@Nonnull File coverageFile, @Nonnull String className)
+ throws IOException {
+ JsonArray classesArray = loadJsonCoverageClasses(coverageFile);
+ JsonObject classObject = getJsonClass(classesArray, className);
+ return classObject.get("id").getAsLong();
+ }
+
+ @CheckForNull
+ protected static JsonObject getJsonClass(@Nonnull JsonArray jsonClasses,
+ @Nonnull String className) {
+ for (JsonElement jsonElement : jsonClasses) {
+ JsonObject jsonClass = jsonElement.getAsJsonObject();
+ if (jsonClass.get("name").getAsString().equals(className)) {
+ return jsonClass;
+ }
+ }
+ return null;
+ }
+
+ @Nonnull
+ protected static String getClassNameForJson(@Nonnull String className) {
+ return NamingTools.getBinaryName(className);
+ }
+
+ @Nonnull
+ protected static String getClassName(@Nonnull JsonArray classArray, @Nonnegative int index) {
+ return getClassName(classArray.get(index).getAsJsonObject());
+ }
+
+ @Nonnull
+ protected static String getClassName(@Nonnull JsonObject classObject) {
+ return classObject.get("name").getAsString();
+ }
+
+ @Nonnull
+ protected Collection<? extends String> collectClassNames(@Nonnull JsonArray classes) {
+ Set<String> classNames = new HashSet<String>();
+ for (JsonElement arrayElt : classes) {
+ classNames.add(getClassName(arrayElt.getAsJsonObject()));
+ }
+ return classNames;
+ }
+
+ @Nonnull
+ protected static JsonArray loadJsonCoverageClasses(@Nonnull File coverageMetadataFile)
+ throws IOException {
+ Assert.assertTrue(coverageMetadataFile.length() > 0);
+
+ JsonObject root = loadJson(coverageMetadataFile).getAsJsonObject();
+ Assert.assertNotNull(root);
+
+ String version = root.get("version").getAsString();
+ Assert.assertNotNull(version);
+ Assert.assertEquals("1.0", version);
+
+ JsonArray classes = root.get("data").getAsJsonArray();
+ Assert.assertNotNull(classes);
+ return classes;
+ }
+
+ @Nonnull
+ protected static JsonElement loadJson(@Nonnull File jsonFile) throws IOException {
+ JsonParser parser = new JsonParser();
+ try (FileReader reader = new FileReader(jsonFile)) {
+ return parser.parse(reader);
+ }
+ }
+}
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageTests.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageTests.java
new file mode 100644
index 0000000..4063636
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageTests.java
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import com.google.common.collect.Sets;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+import com.android.jack.test.junit.KnownIssue;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.test.toolchain.JillBasedToolchain;
+import com.android.jack.util.NamingTools;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
+public class CoverageTests extends CoverageTest {
+
+ @Test
+ public void testSingleClass() throws Exception {
+ final String testPackageName = getTestPackageName("test001");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // We expect only one class
+ Assert.assertNotNull(classes);
+ Assert.assertEquals(1, classes.size());
+ JsonObject testClass = classes.get(0).getAsJsonObject();
+ Assert.assertNotNull(testClass);
+ Assert.assertEquals(getClassNameForJson(testPackageName + ".AbstractClass"),
+ getClassName(testClass));
+
+ // Check its methods.
+ JsonArray methods = testClass.get("methods").getAsJsonArray();
+ Assert.assertEquals(3, methods.size()); // abstract and native methods are excluded.
+ Set<NameAndDesc> expectedMethods = new HashSet<NameAndDesc>();
+ expectedMethods.add(new NameAndDesc(NamingTools.INIT_NAME, "()V"));
+ expectedMethods.add(new NameAndDesc("staticMethod", "()V"));
+ expectedMethods.add(new NameAndDesc("instanceMethod", "()V"));
+ for (JsonElement methodElt : methods) {
+ String name = methodElt.getAsJsonObject().get("name").getAsString();
+ String desc = methodElt.getAsJsonObject().get("desc").getAsString();
+ Assert.assertTrue(expectedMethods.contains(new NameAndDesc(name, desc)));
+ }
+ }
+
+ @Test
+ public void testInterface() throws Exception {
+ String testPackageName = getTestPackageName("test002");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false, getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // Interface without code must not be instrumented
+ assertNull(getJsonClass(classes, getClassNameForJson(testPackageName + ".EmptyInterface")));
+
+ // Interface with a static initializer must be instrumented
+ assertNotNull(
+ getJsonClass(classes, getClassNameForJson(testPackageName + ".InterfaceWithInit")));
+ }
+
+ @Test
+ public void testIncludeAll() throws Exception {
+ String testPackageName = getTestPackageName("test003");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setIncludeFilter("*")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // Full coverage: Foo and Bar classes.
+ Assert.assertEquals(2, classes.size());
+ Collection<? extends String> actualClassNames = collectClassNames(classes);
+ Set<String> expectedClassNames =
+ Sets.newHashSet(getClassNameForJson(testPackageName + ".foo.Foo"),
+ getClassNameForJson(testPackageName + ".foo.bar.Bar"));
+ Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
+ }
+
+ @Test
+ public void testIncludeSingle() throws Exception {
+ String testPackageName = getTestPackageName("test003");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setIncludeFilter(testPackageName + ".foo.bar.Bar")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // Partial coverage: only Bar class.
+ Assert.assertEquals(1, classes.size());
+ Collection<? extends String> actualClassNames = collectClassNames(classes);
+ Set<String> expectedClassNames =
+ Sets.newHashSet(getClassNameForJson(testPackageName + ".foo.bar.Bar"));
+ Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
+ }
+
+ @Test
+ public void testIncludeWildcard() throws Exception {
+ String testPackageName = getTestPackageName("test003");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setIncludeFilter(testPackageName + ".foo.bar.*")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // Partial coverage: only Bar class.
+ Assert.assertEquals(1, classes.size());
+ Collection<? extends String> actualClassNames = collectClassNames(classes);
+ Set<String> expectedClassNames =
+ Sets.newHashSet(getClassNameForJson(testPackageName + ".foo.bar.Bar"));
+ Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
+ }
+
+ @Test
+ public void testExcludeAll() throws Exception {
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setExcludeFilter("*")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(getTestPackageName("test003")));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // No coverage at all
+ Assert.assertEquals(0, classes.size());
+ }
+
+ @Test
+ public void testExcludeSingle() throws Exception {
+ String testPackageName = getTestPackageName("test003");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setExcludeFilter(testPackageName + ".foo.bar.Bar")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // Partial coverage: only Foo class.
+ Assert.assertEquals(1, classes.size());
+ Collection<? extends String> actualClassNames = collectClassNames(classes);
+ Set<String> expectedClassNames =
+ Sets.newHashSet(getClassNameForJson(testPackageName + ".foo.Foo"));
+ Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
+ }
+
+ @Test
+ public void testExcludeWildcard() throws Exception {
+ String testPackageName = getTestPackageName("test003");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setExcludeFilter(testPackageName + ".foo.bar.*")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // Partial coverage: only Foo class.
+ Assert.assertEquals(1, classes.size());
+ Collection<? extends String> actualClassNames = collectClassNames(classes);
+ Set<String> expectedClassNames =
+ Sets.newHashSet(getClassNameForJson(testPackageName + ".foo.Foo"));
+ Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
+ }
+
+ @Test
+ public void testIncludeExclude() throws Exception {
+ String testPackageName = getTestPackageName("test003");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setIncludeFilter(testPackageName + ".foo.bar.*")
+ .setExcludeFilter(testPackageName + ".foo.*")
+ .build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false,
+ getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // No coverage at all
+ Assert.assertEquals(0, classes.size());
+ }
+
+ @Test
+ @KnownIssue(candidate = JillBasedToolchain.class)
+ public void testScope_SourceOnly() throws Exception {
+ String testPackageName = getTestPackageName("test004");
+ JsonArray classes = runTestScope("source", testPackageName);
+
+ Assert.assertEquals(1, classes.size());
+ JsonObject srcClass = getJsonClass(classes,
+ getClassNameForJson(testPackageName + ".src.SrcClass"));
+ Assert.assertNotNull(srcClass);
+ Assert.assertNotNull(srcClass.get("probes").getAsJsonArray());
+ }
+
+ @Test
+ @KnownIssue(candidate = JillBasedToolchain.class)
+ public void testScope_ImportsOnly() throws Exception {
+ String testPackageName = getTestPackageName("test004");
+ JsonArray classes = runTestScope("imports", testPackageName);
+
+ Assert.assertEquals(1, classes.size());
+ JsonObject libClass = getJsonClass(classes,
+ getClassNameForJson(testPackageName + ".lib.LibClass"));
+ Assert.assertNotNull(libClass);
+ Assert.assertNotNull(libClass.get("probes").getAsJsonArray());
+ }
+
+ @Test
+ public void testScope_All() throws Exception {
+ String testPackageName = getTestPackageName("test004");
+ JsonArray classes = runTestScope("all", testPackageName);
+
+ Assert.assertEquals(2, classes.size());
+ JsonObject srcClass = getJsonClass(classes,
+ getClassNameForJson(testPackageName + ".src.SrcClass"));
+ Assert.assertNotNull(srcClass);
+ Assert.assertNotNull(srcClass.get("probes").getAsJsonArray());
+ JsonObject libClass = getJsonClass(classes,
+ getClassNameForJson(testPackageName + ".lib.LibClass"));
+ Assert.assertNotNull(libClass);
+ Assert.assertNotNull(libClass.get("probes").getAsJsonArray());
+ }
+
+ private JsonArray runTestScope(@Nonnull String scope, @Nonnull String testPackageName)
+ throws Exception {
+ // Create a lib.
+ JackBasedToolchain toolchain = createJackToolchain();
+ File libDir = AbstractTestTools.createTempDir();
+ File libSrcFiles = new File(getTestRootDir(testPackageName), "lib");
+ toolchain.srcToLib(libDir, false, libSrcFiles);
+
+ // Compile sources and the lib with coverage.
+ toolchain = createJackToolchain();
+ toolchain.addStaticLibs(libDir);
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain)
+ .setScope(scope)
+ .build();
+ File srcFiles = new File(getTestRootDir(testPackageName), "src");
+ File outDexFolder = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolder, false, srcFiles);
+
+ return loadJsonCoverageClasses(coverageMetadataFile);
+ }
+
+ @Test
+ public void testImportLibrary_NoPredexing() throws Exception {
+ runTestImportLibrary(false);
+ }
+
+ @Test
+ public void testImportLibrary_WithPredexing() throws Exception {
+ runTestImportLibrary(true);
+ }
+
+ private void runTestImportLibrary(boolean withPredexing) throws Exception {
+ String testPackageName = getTestPackageName("test004");
+
+ // 1 - Create a lib (with or without predexing)
+ JackBasedToolchain toolchain = createJackToolchain();
+ toolchain.addProperty("jack.library.dex", Boolean.toString(withPredexing));
+ File libDir = AbstractTestTools.createTempFile("lib", toolchain.getLibraryExtension());
+ File libSrcFiles = new File(getTestRootDir(testPackageName), "lib");
+ toolchain.srcToLib(libDir, true, libSrcFiles);
+
+ // 2 - Compile the lib with coverage.
+ toolchain = createJackToolchain();
+ toolchain.addStaticLibs(libDir);
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+ File srcFiles = new File(getTestRootDir(testPackageName), "src");
+ File outDexFolder = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolder, false, srcFiles);
+
+ // 3 - Check types from the lib are instrumented.
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+ Assert.assertEquals(2, classes.size());
+ checkClassIsInstrumented(testPackageName + ".src.SrcClass", classes);
+ checkClassIsInstrumented(testPackageName + ".lib.LibClass", classes);
+ }
+
+ private void checkClassIsInstrumented(@Nonnull String classFqName, @Nonnull JsonArray classes) {
+ JsonObject testClass = getJsonClass(classes, getClassNameForJson(classFqName));
+ Assert.assertNotNull(testClass);
+ JsonArray probesArray = testClass.get("probes").getAsJsonArray();
+ Assert.assertNotNull(probesArray);
+ Assert.assertTrue(probesArray.size() > 0);
+
+ }
+
+ @Test
+ @KnownIssue // flaky due to non-determinism
+ public void testClassId_005() throws Exception {
+ String testPackageName = getTestPackageName("test005");
+ File testRootDir = getTestRootDir(testPackageName);
+ final String className = getClassNameForJson(testPackageName + ".jack.LibClass");
+
+ long classIdOne;
+ long classIdTwo;
+ long classIdThree;
+ JackBasedToolchain toolchain;
+
+ // Compile with coverage only
+ {
+ toolchain = createJackToolchain();
+ File coverageFileOne = CoverageToolchainBuilder.create(toolchain).build();
+ File outDexFolderOne = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolderOne, false, testRootDir);
+ classIdOne = getClassIdOf(coverageFileOne, className);
+ }
+
+ // Compile with coverage only again into a different coverage file.
+ {
+ toolchain = createJackToolchain();
+ File coverageFileTwo = CoverageToolchainBuilder.create(toolchain).build();
+ File outDexFolderTwo = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolderTwo, false, testRootDir);
+ classIdTwo = getClassIdOf(coverageFileTwo, className);
+ }
+
+ // Compile with coverage *and* proguard to shrink LibClass so it loses its unusedMethod.
+ {
+ toolchain = createJackToolchain();
+ File coverageFileThree = CoverageToolchainBuilder.create(toolchain).build();
+ File proguardFile = new File(testRootDir, "proguard.flags");
+ toolchain.addProguardFlags(proguardFile);
+ File outDexFolderThree = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolderThree, false, testRootDir);
+ classIdThree = getClassIdOf(coverageFileThree, className);
+ }
+
+ // We should generate the same class ID for the same class.
+ Assert.assertEquals("Expected same class IDs", classIdOne, classIdTwo);
+
+ // We should generate different class IDs when they are different (after shrinking here).
+ assertNotEquals("Expected different class IDs", classIdOne, classIdThree);
+ }
+
+ @Test
+ public void testClassId_006() throws Exception {
+ String testPackageNameV1 = getTestPackageName("test006_v1");
+ File testRootDirV1 = getTestRootDir(testPackageNameV1);
+
+ String testPackageNameV2 = getTestPackageName("test006_v2");
+ File testRootDirV2 = getTestRootDir(testPackageNameV2);
+
+ final String className = getClassNameForJson("jack.SrcClass");
+ long classIdV1;
+ long classIdV2;
+ long classIdV2_2;
+ JackBasedToolchain toolchain;
+
+ // Compile with coverage the version v1
+ {
+ toolchain = createJackToolchain();
+ File coverageFileOne = CoverageToolchainBuilder.create(toolchain).build();
+ File outDexFolderOne = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolderOne, false, testRootDirV1);
+ classIdV1 = getClassIdOf(coverageFileOne, className);
+ }
+
+ // Compile with coverage the version v2
+ {
+ toolchain = createJackToolchain();
+ File coverageFileTwo = CoverageToolchainBuilder.create(toolchain).build();
+ File outDexFolderTwo = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolderTwo, false, testRootDirV2);
+ classIdV2 = getClassIdOf(coverageFileTwo, className);
+ }
+
+ // Compile with coverage the version v2 again
+ {
+ toolchain = createJackToolchain();
+ File coverageFileThree = CoverageToolchainBuilder.create(toolchain).build();
+ File outDexFolderThree = AbstractTestTools.createTempDir();
+ toolchain.srcToExe(outDexFolderThree, false, testRootDirV2);
+ classIdV2_2 = getClassIdOf(coverageFileThree, className);
+ }
+
+ // We should generate different class IDs when they are different (after shrinking here).
+ assertNotEquals("Expected different class IDs", classIdV1, classIdV2);
+
+ assertEquals("Expected different class IDs", classIdV2, classIdV2_2);
+ }
+
+ @Test
+ public void testThrowClass_007() throws Exception {
+ final String testPackageName = getTestPackageName("test007");
+ JackBasedToolchain toolchain = createJackToolchain();
+ File coverageMetadataFile = CoverageToolchainBuilder.create(toolchain).build();
+
+ toolchain.srcToExe(AbstractTestTools.createTempDir(), false, getTestRootDir(testPackageName));
+ JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
+
+ // We expect only one class
+ Assert.assertNotNull(classes);
+ Assert.assertEquals(1, classes.size());
+ JsonObject testClass = classes.get(0).getAsJsonObject();
+ Assert.assertNotNull(testClass);
+ Assert.assertEquals(
+ getClassNameForJson(testPackageName + ".ThrowClass"),
+ getClassName(testClass));
+
+ // Check its methods.
+ JsonArray methods = testClass.get("methods").getAsJsonArray();
+ Assert.assertEquals(4, methods.size());
+
+ Set<NameAndDesc> expectedMethods = new HashSet<NameAndDesc>();
+ expectedMethods.add(new NameAndDesc(NamingTools.INIT_NAME, "()V"));
+ expectedMethods.add(new NameAndDesc("throwNPE", "(Z)V"));
+ expectedMethods.add(new NameAndDesc("tryCatchNPE", "()V"));
+ expectedMethods.add(new NameAndDesc("emptyMethod", "()V"));
+ for (JsonElement methodElt : methods) {
+ String name = methodElt.getAsJsonObject().get("name").getAsString();
+ String desc = methodElt.getAsJsonObject().get("desc").getAsString();
+ Assert.assertTrue(expectedMethods.contains(new NameAndDesc(name, desc)));
+ }
+ }
+
+ static class NameAndDesc {
+ @Nonnull public final String name;
+ @Nonnull public final String desc;
+
+ public NameAndDesc(@Nonnull String name, @Nonnull String desc) {
+ this.name = name;
+ this.desc = desc;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof NameAndDesc) {
+ NameAndDesc other = (NameAndDesc) obj;
+ return name.equals(other.name) && desc.equals(other.desc);
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ String concat = name + desc;
+ return concat.hashCode();
+ }
+ }
+}
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageToolchainBuilder.java b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageToolchainBuilder.java
new file mode 100644
index 0000000..5d8efbf
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/CoverageToolchainBuilder.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.coverage;
+
+import com.android.jack.test.TestsProperties;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackApiV03Toolchain;
+import com.android.jack.test.toolchain.JackApiV04Toolchain;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.test.toolchain.JackCliToolchain;
+import com.android.sched.util.file.CannotChangePermissionException;
+import com.android.sched.util.file.CannotCreateFileException;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+/**
+ * A class to set up a {@link JackBasedToolchain} with code coverage.
+ */
+public class CoverageToolchainBuilder<T extends JackBasedToolchain> {
+ @Nonnull
+ private static final String COVERAGE_PLUGIN_NAME = "com.android.jack.coverage.CodeCoverage";
+
+ @Nonnull
+ private static final String JACOCO_RUNTIME_PACKAGE = "org.jacoco.agent.rt.internal_04864a1";
+
+ @Nonnull
+ private final T toolchain;
+
+ private CoverageToolchainBuilder(@Nonnull T toolchain) {
+ this.toolchain = toolchain;
+ }
+
+ /**
+ * Creates a {@link CoverageToolchainBuilder} for the given {@code toolchain}.
+ *
+ * @param toolchain the toolchain to configure for code coverage.
+ * @return a new builder instance
+ */
+ public static <T extends JackBasedToolchain> CoverageToolchainBuilder<T> create(
+ @Nonnull T toolchain) {
+ return new CoverageToolchainBuilder<T>(toolchain);
+ }
+
+ /**
+ * Sets coverage include filter.
+ *
+ * @param includeFilter a non-null include filter string
+ * @return this instance
+ */
+ @Nonnull
+ public CoverageToolchainBuilder<T> setIncludeFilter(@Nonnull String includeFilter) {
+ toolchain.addProperty("jack.coverage.jacoco.include", includeFilter);
+ return this;
+ }
+
+ /**
+ * Sets coverage exclude filter.
+ *
+ * @param excludeFilter a non-null exclude filter string
+ * @return this instance
+ */
+ @Nonnull
+ public CoverageToolchainBuilder<T> setExcludeFilter(@Nonnull String excludeFilter) {
+ toolchain.addProperty("jack.coverage.jacoco.exclude", excludeFilter);
+ return this;
+ }
+
+ /**
+ * Sets coverage scope.
+ *
+ * @param scope the scope of coverage instrumentation (passed through property).
+ * @return this instance
+ */
+ @Nonnull
+ public CoverageToolchainBuilder<T> setScope(@Nonnull String scope) {
+ toolchain.addProperty("jack.coverage.jacoco.scope", scope);
+ return this;
+ }
+
+ /**
+ * Applies code coverage configuration to the toolchain. It returns the coverage metadata file
+ * that will be produced by the compilation.
+ *
+ * This file is a temporary file that will be automatically deleted after the test.
+ *
+ * @return the coverage metadata file
+ */
+ @Nonnull
+ public File build() throws Exception {
+ // Enable code coverage
+ toolchain.addProperty("jack.coverage", "true");
+
+ // Set output metadata file
+ File coverageMetadataFile = createTempCoverageMetadataFile();
+ toolchain.addProperty("jack.coverage.metadata.file", coverageMetadataFile.getAbsolutePath());
+
+ // Set up jacoco library
+ toolchain.addProperty("jack.coverage.jacoco.package", JACOCO_RUNTIME_PACKAGE);
+ toolchain.addToClasspath(getJacocoAgentLib());
+
+ // Enable coverage plugin
+ File pluginFile = getCodeCoveragePluginFile();
+ List<File> pluginPath = Collections.singletonList(pluginFile);
+ List<String> pluginNames = Collections.singletonList(COVERAGE_PLUGIN_NAME);
+ if (toolchain instanceof JackCliToolchain) {
+ JackCliToolchain cliToolchain = (JackCliToolchain) toolchain;
+ cliToolchain.setPluginPath(pluginPath);
+ cliToolchain.setPluginNames(pluginNames);
+ } else {
+ // TODO: need to rework API toolchain hierarchy in test framework to avoid these if/else.
+ if (toolchain instanceof JackApiV03Toolchain) {
+ JackApiV03Toolchain jackApiV03 = (JackApiV03Toolchain) toolchain;
+ jackApiV03.setPluginPath(pluginPath);
+ jackApiV03.setPluginNames(pluginNames);
+ } else if (toolchain instanceof JackApiV04Toolchain) {
+ JackApiV04Toolchain jackApiV04 = (JackApiV04Toolchain) toolchain;
+ jackApiV04.setPluginPath(pluginPath);
+ jackApiV04.setPluginNames(pluginNames);
+ } else {
+ throw new AssertionError("Unsupported toolchain: " + toolchain.getClass().getName());
+ }
+ }
+ return coverageMetadataFile;
+ }
+
+ @Nonnull
+ private static File createTempCoverageMetadataFile()
+ throws CannotCreateFileException, CannotChangePermissionException {
+ return AbstractTestTools.createTempFile("coverage", ".metadata");
+ }
+
+ @Nonnull
+ private static File getJacocoAgentLib() {
+ return new File(TestsProperties.getJackRootDir(),
+ "jacoco/org.jacoco.agent.rt-0.7.5.201505241946-all.jar");
+ }
+
+ @Nonnull
+ private static File getCodeCoveragePluginFile() {
+ return new File(TestsProperties.getJackRootDir(),
+ "jack-coverage/dist/jack-coverage-plugin.jar");
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test001/Foo.java
similarity index 70%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/java8/test001/Foo.java
index 0b9fd92..8293d32 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test001/Foo.java
@@ -14,7 +14,17 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.java8.test001;
-public interface Interface {}
+public class Foo {
+ public static int getInt(SAM s) {
+ return s.getInt();
+ }
+ public static void printInt() {
+ int i = getInt(() -> {
+ return 5;
+ });
+ System.out.println(i);
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test001/SAM.java
similarity index 85%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/java8/test001/SAM.java
index 0b9fd92..a57a962 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test001/SAM.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.java8.test001;
-public interface Interface {}
-
+public interface SAM {
+ public int getInt();
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test002/Foo.java
similarity index 78%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/java8/test002/Foo.java
index 0b9fd92..963205d 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test002/Foo.java
@@ -14,7 +14,11 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.java8.test002;
-public interface Interface {}
-
+public class Foo implements SAM {
+ @Override
+ public int defaultMethod() {
+ return Integer.MAX_VALUE;
+ }
+}
\ No newline at end of file
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test002/SAM.java
similarity index 73%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/java8/test002/SAM.java
index 0b9fd92..49ffdb6 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/java8/test002/SAM.java
@@ -14,7 +14,14 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.java8.test002;
-public interface Interface {}
+public interface SAM {
+ public static int staticMethod() {
+ return Integer.MIN_VALUE;
+ }
+ default public int defaultMethod() {
+ return staticMethod();
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/Bar.java
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/Bar.java
index 0b9fd92..e4edcaa 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/Bar.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.shrob.test001;
-public interface Interface {}
+public class Bar {
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/Foo.java
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/Foo.java
index 0b9fd92..75f8de2 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/Foo.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.shrob.test001;
-public interface Interface {}
+public class Foo {
+}
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/proguard.flags b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/proguard.flags
new file mode 100644
index 0000000..c370eb5
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test001/proguard.flags
@@ -0,0 +1,2 @@
+-keep public class com.android.jack.coverage.shrob.test001.Foo
+-dontobfuscate
\ No newline at end of file
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/Foo.java
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/Foo.java
index 0b9fd92..c5dd549 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/Foo.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.shrob.test002;
-public interface Interface {}
+public class Foo {
+}
diff --git a/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/proguard.flags b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/proguard.flags
new file mode 100644
index 0000000..e02614c
--- /dev/null
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/proguard.flags
@@ -0,0 +1 @@
+-dontshrink
\ No newline at end of file
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/sub/Bar.java
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/sub/Bar.java
index 0b9fd92..590f8d3 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/shrob/test002/sub/Bar.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.shrob.test002.sub;
-public interface Interface {}
+public class Bar {
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test001/AbstractClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test001/AbstractClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test001/AbstractClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test001/AbstractClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test002/EmptyInterface.java
similarity index 94%
rename from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test002/EmptyInterface.java
index 0b9fd92..9109434 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/test002/EmptyInterface.java
@@ -16,5 +16,5 @@
package com.android.jack.coverage.test002;
-public interface Interface {}
+public interface EmptyInterface {}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test002/InterfaceWithInit.java
similarity index 87%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/test002/InterfaceWithInit.java
index 0b9fd92..2c19764 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/test002/InterfaceWithInit.java
@@ -16,5 +16,7 @@
package com.android.jack.coverage.test002;
-public interface Interface {}
+public interface InterfaceWithInit {
+ public static final Object obj = new Object();
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test003/foo/Foo.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test003/foo/Foo.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test003/foo/Foo.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test003/foo/Foo.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test003/foo/bar/Bar.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test003/foo/bar/Bar.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test003/foo/bar/Bar.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test003/foo/bar/Bar.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test004/lib/LibClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test004/lib/LibClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test004/lib/LibClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test004/lib/LibClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test004/src/SrcClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test004/src/SrcClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test004/src/SrcClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test004/src/SrcClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test005/jack/LibClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test005/jack/LibClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test005/jack/LibClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test005/jack/LibClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test005/jack/SrcClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test005/jack/SrcClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test005/jack/SrcClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test005/jack/SrcClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test005/proguard.flags b/jack-coverage/plugin/tests/com/android/jack/coverage/test005/proguard.flags
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test005/proguard.flags
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test005/proguard.flags
diff --git a/jack-coverage/tests/com/android/jack/coverage/test006_v1/jack/SrcClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test006_v1/jack/SrcClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test006_v1/jack/SrcClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test006_v1/jack/SrcClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test006_v2/jack/SrcClass.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test006_v2/jack/SrcClass.java
similarity index 100%
rename from jack-coverage/tests/com/android/jack/coverage/test006_v2/jack/SrcClass.java
rename to jack-coverage/plugin/tests/com/android/jack/coverage/test006_v2/jack/SrcClass.java
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/plugin/tests/com/android/jack/coverage/test007/ThrowClass.java
similarity index 62%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/plugin/tests/com/android/jack/coverage/test007/ThrowClass.java
index 0b9fd92..0fb8152 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/plugin/tests/com/android/jack/coverage/test007/ThrowClass.java
@@ -14,7 +14,24 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.coverage.test007;
-public interface Interface {}
+public class ThrowClass {
+ public static void throwNPE(boolean condition) {
+ if (condition) {
+ throw new NullPointerException();
+ }
+ }
+
+ public static void tryCatchNPE() {
+ try {
+ throwNPE(true);
+ } catch (NullPointerException e) {
+ emptyMethod();
+ }
+ }
+
+ public static void emptyMethod() {
+ }
+}
diff --git a/jack-jacoco-reporter/.checkstyle b/jack-coverage/reporter/.checkstyle
similarity index 100%
rename from jack-jacoco-reporter/.checkstyle
rename to jack-coverage/reporter/.checkstyle
diff --git a/jack-jacoco-reporter/.classpath b/jack-coverage/reporter/.classpath
similarity index 74%
rename from jack-jacoco-reporter/.classpath
rename to jack-coverage/reporter/.classpath
index 8554fba..73c2dbb 100644
--- a/jack-jacoco-reporter/.classpath
+++ b/jack-coverage/reporter/.classpath
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="tests"/>
<classpathentry kind="lib" path="libs/args4j-lib.jar"/>
<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
<classpathentry kind="lib" path="libs/gson.jar"/>
@@ -9,5 +10,11 @@
<classpathentry kind="lib" path="libs/asm4-lib.jar"/>
<classpathentry kind="lib" path="libs/sched-lib.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="src" path=".apt_generated">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="lib" path="libs/junit4.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/jack-jacoco-reporter/.project b/jack-coverage/reporter/.project
similarity index 100%
rename from jack-jacoco-reporter/.project
rename to jack-coverage/reporter/.project
diff --git a/jack-coverage/.settings/edu.umd.cs.findbugs.core.prefs b/jack-coverage/reporter/.settings/edu.umd.cs.findbugs.core.prefs
similarity index 100%
copy from jack-coverage/.settings/edu.umd.cs.findbugs.core.prefs
copy to jack-coverage/reporter/.settings/edu.umd.cs.findbugs.core.prefs
diff --git a/jack-coverage/.settings/org.eclipse.core.resources.prefs b/jack-coverage/reporter/.settings/org.eclipse.core.resources.prefs
similarity index 100%
copy from jack-coverage/.settings/org.eclipse.core.resources.prefs
copy to jack-coverage/reporter/.settings/org.eclipse.core.resources.prefs
diff --git a/jack-coverage/reporter/.settings/org.eclipse.jdt.core.prefs b/jack-coverage/reporter/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8e20aec
--- /dev/null
+++ b/jack-coverage/reporter/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,431 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=ignore
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=error
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=error
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.processAnnotations=enabled
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable.count_dependent=1585|-1|1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method.count_dependent=1585|-1|1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package.count_dependent=1585|-1|1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=1040
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter.count_dependent=1040|-1|1040
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=1585
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type.count_dependent=1585|-1|1585
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression.count_dependent=16|5|80
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation.count_dependent=16|-1|16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant.count_dependent=16|-1|16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call.count_dependent=16|5|80
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation.count_dependent=16|5|80
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression.count_dependent=16|4|80
+org.eclipse.jdt.core.formatter.alignment_for_assignment=16
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression.count_dependent=16|-1|16
+org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments=16
+org.eclipse.jdt.core.formatter.alignment_for_cascading_method_invocation_with_arguments.count_dependent=16|-1|16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants.count_dependent=16|5|48
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer.count_dependent=16|5|80
+org.eclipse.jdt.core.formatter.alignment_for_field_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_for_statement=16
+org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments=16
+org.eclipse.jdt.core.formatter.alignment_for_generic_type_arguments.count_dependent=16|-1|16
+org.eclipse.jdt.core.formatter.alignment_for_local_variable_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields.count_dependent=16|-1|16
+org.eclipse.jdt.core.formatter.alignment_for_new_anonymous_class=20
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration.count_dependent=16|5|80
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration.count_dependent=16|5|80
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation.count_dependent=16|4|48
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration.count_dependent=16|4|49
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration.count_dependent=16|4|48
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration.count_dependent=16|4|48
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration.count_dependent=16|4|48
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=0
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=0
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=2
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.comment_new_line_at_start_of_html_paragraph=true
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.force_if_else_statement_brace=true
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comment_prefix=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=100
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=3
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_comment_inline_tags=false
+org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation=true
+org.eclipse.jdt.core.formatter.wrap_non_simple_member_annotation=true
+org.eclipse.jdt.core.formatter.wrap_non_simple_package_annotation=true
+org.eclipse.jdt.core.formatter.wrap_non_simple_parameter_annotation=false
+org.eclipse.jdt.core.formatter.wrap_non_simple_type_annotation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.formatter.wrap_prefer_two_fragments=false
diff --git a/jack-coverage/reporter/.settings/org.eclipse.jdt.ui.prefs b/jack-coverage/reporter/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..7ecabe3
--- /dev/null
+++ b/jack-coverage/reporter/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,64 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Reporter
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_profile=_Reporter format 100
+formatter_settings_version=12
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*\n * Copyright (C) ${year} The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http\://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment"/><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment"/><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/jack-jacoco-reporter/etc/manifest.txt b/jack-coverage/reporter/etc/manifest.txt
similarity index 100%
rename from jack-jacoco-reporter/etc/manifest.txt
rename to jack-coverage/reporter/etc/manifest.txt
diff --git a/jack-jacoco-reporter/jackstyle.xml b/jack-coverage/reporter/jackstyle.xml
similarity index 100%
rename from jack-jacoco-reporter/jackstyle.xml
rename to jack-coverage/reporter/jackstyle.xml
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Constants.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Constants.java
new file mode 100644
index 0000000..5bc91cf
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Constants.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import javax.annotation.Nonnegative;
+import javax.annotation.Nonnull;
+
+/**
+ * Defines constants for the reporter.
+ */
+public interface Constants {
+ /**
+ * The default report name.
+ */
+ @Nonnull
+ public static final String DEFAULT_REPORT_NAME = "Report";
+
+ /**
+ * The default report type.
+ */
+ @Nonnull
+ public static final ReportType DEFAULT_REPORT_TYPE = ReportType.HTML;
+
+ /**
+ * The default output encoding.
+ */
+ @Nonnull
+ public static final String DEFAULT_OUTPUT_ENCODING = "UTF-8";
+
+ /**
+ * The default input encoding of source files.
+ */
+ @Nonnull
+ public static final String DEFAULT_INPUT_ENCODING = "UTF-8";
+
+ /**
+ * The default tab width.
+ */
+ @Nonnegative
+ public static final int DEFAULT_TAB_WIDTH = 4;
+}
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ExitStatus.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ExitStatus.java
new file mode 100644
index 0000000..977202d
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ExitStatus.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import javax.annotation.Nonnegative;
+
+/**
+ * An enumeration of possible exit status returned by the reporter.
+ */
+public enum ExitStatus {
+ /**
+ * Successful execution without any error.
+ */
+ SUCCESS(0),
+
+ /**
+ * Usage error from the user (incorrect argument, missing file, ...).
+ */
+ USAGE_ERROR(1),
+
+ /**
+ * Internal error.
+ */
+ INTERNAL_ERROR(2);
+
+ @Nonnegative
+ private final int exitStatusCode;
+
+ private ExitStatus(@Nonnegative int exitStatusCode) {
+ assert exitStatusCode > 0;
+ this.exitStatusCode = exitStatusCode;
+ }
+
+ /**
+ * Returns the exit status code used in {@link System#exit(int)}.
+ *
+ * @return the exit status code.
+ */
+ @Nonnegative
+ public int getExitStatus() {
+ return exitStatusCode;
+ }
+}
+
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/JackCoverageAnalyzer.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/JackCoverageAnalyzer.java
new file mode 100644
index 0000000..f18377b
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/JackCoverageAnalyzer.java
@@ -0,0 +1,425 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import com.google.gson.JsonParseException;
+import com.google.gson.stream.JsonReader;
+
+import org.jacoco.core.analysis.IClassCoverage;
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.analysis.ICoverageVisitor;
+import org.jacoco.core.analysis.IMethodCoverage;
+import org.jacoco.core.data.ExecutionData;
+import org.jacoco.core.data.ExecutionDataStore;
+import org.jacoco.core.internal.analysis.ClassCoverageImpl;
+import org.jacoco.core.internal.analysis.CounterImpl;
+import org.jacoco.core.internal.analysis.MethodCoverageImpl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nonnull;
+
+/**
+ * Code coverage report analyzer.
+ */
+public class JackCoverageAnalyzer {
+ @Nonnull
+ public static final String CURRENT_VERSION = "1.0";
+
+ @Nonnull
+ public static final String JSON_VERSION_ATTRIBUTE = "version";
+
+ @Nonnull
+ public static final String JSON_DATA_ATTRIBUTE = "data";
+
+ @Nonnull
+ private final ExecutionDataStore executionDataStore;
+
+ @Nonnull
+ private final ICoverageVisitor coverageVisitor;
+
+ @CheckForNull
+ private final MappingFileLoader mappingFileLoader;
+
+ @CheckForNull
+ private MappingFileLoader.ClassMapping currentClassMapping = null;
+
+ /**
+ * Count the real number of probes in the code, taking shrinking into account.
+ */
+ @Nonnegative
+ private int currentClassProbesCount;
+
+ /**
+ * Constructs a {@link JackCoverageAnalyzer}.
+ *
+ * @param executionDataStore a {@link ExecutionDataStore} containing runtime coverage information.
+ * @param coverageVisitor a {@link ICoverageVisitor} notified of each coverage element created
+ * during the analysis.
+ */
+ public JackCoverageAnalyzer(@Nonnull ExecutionDataStore executionDataStore,
+ @Nonnull ICoverageVisitor coverageVisitor,
+ @CheckForNull MappingFileLoader mappingFileLoader) {
+ this.executionDataStore = executionDataStore;
+ this.coverageVisitor = coverageVisitor;
+ this.mappingFileLoader = mappingFileLoader;
+ }
+
+ /**
+ * Analyzes a coverage description file.
+ *
+ * @param coverageDescriptionFile a coverage description file to be analyzed
+ * @throws IOException in case of file error
+ */
+ public void analyze(@Nonnull File coverageDescriptionFile) throws IOException {
+ InputStream inputStream = new FileInputStream(coverageDescriptionFile);
+ try {
+ analyze(inputStream);
+ } finally {
+ inputStream.close();
+ }
+ }
+
+ /**
+ * Analyzes a coverage description input stream.
+ *
+ * @param inputStream a coverage description input stream
+ * @throws IOException in case of read error
+ */
+ public void analyze(@Nonnull InputStream inputStream) throws IOException {
+ JsonReader jsonReader = new JsonReader(new InputStreamReader(inputStream));
+ readMetadata(jsonReader);
+ }
+
+ private void checkVersion(@CheckForNull String version) {
+ if (version == null) {
+ throw new JsonParseException("Missing 'version' attribute before coverage metadadata");
+ }
+ String[] parts = version.split(Pattern.quote("."));
+ if (parts.length != 2) {
+ throw new JsonParseException("Version number format must be x.y");
+ }
+ if (!version.equals(CURRENT_VERSION)) {
+ throw new JsonParseException("Unknown version " + version);
+ }
+ }
+
+ private void readMetadata(@Nonnull JsonReader jsonReader) throws IOException {
+ jsonReader.beginObject();
+
+ String version = null;
+ while (jsonReader.hasNext()) {
+ String attributeName = jsonReader.nextName();
+ if (attributeName.equals(JSON_VERSION_ATTRIBUTE)) {
+ // Reads the version so we can parse the JSON accordingly.
+ version = jsonReader.nextString();
+ } else if (attributeName.equals(JSON_DATA_ATTRIBUTE)) {
+ checkVersion(version);
+ readClasses(jsonReader);
+ } else {
+ jsonReader.skipValue();
+ }
+ }
+
+ jsonReader.endObject();
+ }
+
+ private void readClasses(@Nonnull JsonReader jsonReader) throws IOException {
+ jsonReader.beginArray();
+ while (jsonReader.hasNext()) {
+ IClassCoverage classCoverage = readClass(jsonReader);
+ if (classCoverage != null) {
+ coverageVisitor.visitCoverage(classCoverage);
+ }
+ }
+ jsonReader.endArray();
+ }
+
+ /**
+ * Returns {@link IClassCoverage} object parsed from class information, or null if the class
+ * was shrunk (according to the mapping file).
+ *
+ * @param jsonReader a reader
+ * @return {@link IClassCoverage} instance or null
+ * @throws IOException if an error occurred during file parsing
+ */
+ @CheckForNull
+ private IClassCoverage readClass(@Nonnull JsonReader jsonReader) throws IOException {
+ long id = 0;
+ String className = null;
+ String sourceFile = null;
+ String superClassName = null;
+ List<IMethodCoverage> methods = new ArrayList<IMethodCoverage>();
+ List<ProbeDescription> probes = new ArrayList<ProbeDescription>();
+ List<String> interfaces = new ArrayList<String>();
+
+ currentClassProbesCount = 0;
+
+ jsonReader.beginObject();
+ while (jsonReader.hasNext()) {
+ String attributeName = jsonReader.nextName();
+ if ("id".equals(attributeName)) {
+ id = jsonReader.nextLong();
+ } else if ("name".equals(attributeName)) {
+ className = jsonReader.nextString();
+ if (mappingFileLoader != null) {
+ currentClassMapping = mappingFileLoader.getClassMapping(className);
+ }
+ } else if ("sourceFile".equals(attributeName)) {
+ sourceFile = jsonReader.nextString();
+ } else if ("superClassName".equals(attributeName)) {
+ superClassName = jsonReader.nextString();
+ } else if ("interfaces".equals(attributeName)) {
+ readInterfaces(jsonReader, interfaces);
+ } else if ("methods".equals(attributeName)) {
+ readMethods(jsonReader, methods);
+ } else if ("probes".equals(attributeName)) {
+ readProbes(jsonReader, probes, methods);
+ } else {
+ throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
+ }
+ }
+ jsonReader.endObject();
+
+ // Check mandatory attributes.
+ if (id == 0) {
+ throw new JsonParseException("Missing 'id' attribute");
+ }
+ if (className == null) {
+ throw new JsonParseException("Missing 'name' attribute");
+ }
+ if (superClassName == null) {
+ throw new JsonParseException("Missing 'superClassName' attribute");
+ }
+
+ final ExecutionData executionData = executionDataStore.get(id);
+ boolean noMatch;
+ if (executionData != null) {
+ noMatch = false;
+ // Check there is no id collision.
+ executionData.assertCompatibility(id, className, currentClassProbesCount);
+ } else {
+ noMatch = executionDataStore.contains(className);
+ }
+
+ // Support shrinking and obfuscation.
+ if (currentClassMapping != null) {
+ className = currentClassMapping.getOriginalClassName();
+ assert className != null;
+ } else if (mappingFileLoader != null) {
+ // We did not find the class in the mapping file: it must have been shrunk so ignore it.
+ return null;
+ }
+
+ // Build the class coverage.
+ String[] interfacesArray = interfaces.toArray(new String[0]);
+ ClassCoverageImpl c = new ClassCoverageImpl(className, id, noMatch,
+ NamingUtils.binaryNameToSignature(className), superClassName, interfacesArray);
+ c.setSourceFileName(sourceFile);
+
+ // Update methods with probes.
+ final boolean[] executionProbes = executionData != null ? executionData.getProbes() : null;
+ for (ProbeDescription probe : probes) {
+ final int probeIndex = probe.id;
+ final boolean active = (executionProbes != null && executionProbes[probeIndex]);
+ final MethodCoverageImpl methodCoverage = probe.method;
+ for (ProbeDescription.Line line : probe.lines) {
+ ICounter instructionCounter;
+ ICounter branchCounter;
+ if (active) {
+ instructionCounter = CounterImpl.getInstance(0, line.instructionsCount);
+ branchCounter = CounterImpl.getInstance(0, line.branchesCount);
+ } else {
+ instructionCounter = CounterImpl.getInstance(line.instructionsCount, 0);
+ branchCounter = CounterImpl.getInstance(line.branchesCount, 0);
+ }
+ methodCoverage.increment(instructionCounter, branchCounter, line.line);
+ }
+ }
+
+ // Now methods have been updated with probes, add them to the class coverage.
+ for (IMethodCoverage method : methods) {
+ c.addMethod(method);
+ }
+
+ return c;
+ }
+
+ private void readInterfaces(@Nonnull JsonReader jsonReader, @Nonnull List<String> interfaces)
+ throws IOException {
+ jsonReader.beginArray();
+ while (jsonReader.hasNext()) {
+ interfaces.add(jsonReader.nextString());
+ }
+ jsonReader.endArray();
+ }
+
+ private void readProbes(@Nonnull JsonReader jsonReader,
+ @Nonnull List<ProbeDescription> probes, @Nonnull List<? extends IMethodCoverage> methods)
+ throws IOException {
+ jsonReader.beginArray();
+ while (jsonReader.hasNext()) {
+ ProbeDescription probe = readProbe(jsonReader, methods);
+ if (probe != null) {
+ probes.add(probe);
+ }
+ }
+ jsonReader.endArray();
+ }
+
+ /**
+ * Returns a {@link ProbeDescription} object representing the probe being parsed, or null if the
+ * method associated with the probe was shrunk.
+ *
+ * @param jsonReader a reader
+ * @param methods the list of methods in the current class
+ * @return a {@link ProbeDescription} instance or null
+ * @throws IOException if an error occurred during file parsing
+ */
+ @CheckForNull
+ private ProbeDescription readProbe(@Nonnull JsonReader jsonReader,
+ @Nonnull List<? extends IMethodCoverage> methods) throws IOException {
+ ++currentClassProbesCount;
+ ProbeDescription probe = new ProbeDescription();
+ jsonReader.beginObject();
+ while (jsonReader.hasNext()) {
+ String attributeName = jsonReader.nextName();
+ if ("id".equals(attributeName)) {
+ probe.setId(jsonReader.nextInt());
+ } else if ("method".equals(attributeName)) {
+ int methodId = jsonReader.nextInt();
+ for (IMethodCoverage mc : methods) {
+ if (((JackMethodCoverage) mc).getId() == methodId) {
+ probe.setMethod((MethodCoverageImpl) mc);
+ break;
+ }
+ }
+ } else if ("lines".equals(attributeName)) {
+ readLines(jsonReader, probe);
+ } else {
+ throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
+ }
+ }
+ jsonReader.endObject();
+
+ if (probe.method != null) {
+ return probe;
+ } else {
+ // Ignore shrob if there is no matching method (due to shrinking)
+ return null;
+ }
+ }
+
+ private static void readLines(@Nonnull JsonReader jsonReader, @Nonnull ProbeDescription probe)
+ throws IOException {
+ jsonReader.beginArray();
+ while (jsonReader.hasNext()) {
+ jsonReader.beginObject();
+ int line = -1;
+ int instructionsCount = -1;
+ int branchesCount = -1;
+ while (jsonReader.hasNext()) {
+ String attributeName = jsonReader.nextName();
+ if ("line".equals(attributeName)) {
+ line = jsonReader.nextInt();
+ } else if ("insnCount".equals(attributeName)) {
+ instructionsCount = jsonReader.nextInt();
+ } else if ("branchCount".equals(attributeName)) {
+ branchesCount = jsonReader.nextInt();
+ } else {
+ throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
+ }
+ }
+ probe.addLine(line, instructionsCount, branchesCount);
+ jsonReader.endObject();
+ }
+ jsonReader.endArray();
+ }
+
+ private void readMethods(@Nonnull JsonReader jsonReader,
+ @Nonnull List<IMethodCoverage> methods) throws IOException {
+ jsonReader.beginArray();
+ while (jsonReader.hasNext()) {
+ IMethodCoverage methodCoverage = readMethod(jsonReader);
+ if (methodCoverage != null) {
+ methods.add(methodCoverage);
+ }
+ }
+ jsonReader.endArray();
+ }
+
+ /**
+ * Returns a {@link IMethodCoverage} object representing the method being parsed, or null if this
+ * method was shrunk.
+ *
+ * @param jsonReader a reader
+ * @return a {@link IMethodCoverage} instance or null
+ * @throws IOException if an error occurred during file parsing
+ */
+ @CheckForNull
+ private IMethodCoverage readMethod(@Nonnull JsonReader jsonReader) throws IOException {
+ int id = -1;
+ String name = null;
+ String desc = null;
+ String signature = null;
+
+ jsonReader.beginObject();
+ while (jsonReader.hasNext()) {
+ String attributeName = jsonReader.nextName();
+ if ("id".equals(attributeName)) {
+ id = jsonReader.nextInt();
+ } else if ("name".equals(attributeName)) {
+ name = jsonReader.nextString();
+ } else if ("desc".equals(attributeName)) {
+ desc = jsonReader.nextString();
+ } else if ("signature".equals(attributeName)) {
+ signature = jsonReader.nextString();
+ } else {
+ throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
+ }
+ }
+ jsonReader.endObject();
+
+ if (currentClassMapping != null) {
+ assert mappingFileLoader != null;
+ // We have a mapping file and the class has not been shrunk. Let's see if this method was
+ // shrunk or obfuscated.
+ String methodSignature = name + desc;
+ String oldMethodSignature = currentClassMapping.getOriginalMethodSignature(methodSignature);
+ if (oldMethodSignature == null) {
+ // No corresponding method: method was shrunk
+ return null;
+ } else {
+ // Method may have been obfuscated.
+ int methodNameEndPos = oldMethodSignature.indexOf('(');
+ assert methodNameEndPos > 0;
+ name = oldMethodSignature.substring(0, methodNameEndPos);
+ desc = oldMethodSignature.substring(methodNameEndPos);
+ }
+ }
+ return new JackMethodCoverage(id, name, desc, signature);
+ }
+}
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/JackMethodCoverage.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/JackMethodCoverage.java
similarity index 98%
rename from jack-jacoco-reporter/src/com/android/jack/tools/jacoco/JackMethodCoverage.java
rename to jack-coverage/reporter/src/com/android/jack/tools/jacoco/JackMethodCoverage.java
index b716db9..f13f5e5 100644
--- a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/JackMethodCoverage.java
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/JackMethodCoverage.java
@@ -25,6 +25,7 @@
* Jack specialization of method coverage.
*/
public class JackMethodCoverage extends MethodCoverageImpl {
+ @Nonnegative
private final int id;
public JackMethodCoverage(
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Main.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Main.java
new file mode 100644
index 0000000..b61a485
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Main.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import com.android.sched.util.Version;
+
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.ParserProperties;
+import org.kohsuke.args4j.spi.OptionHandler;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Arrays;
+import javax.annotation.Nonnull;
+
+/**
+ * Main class for command-line usage.
+ */
+public class Main {
+ /**
+ * Generates a report from command-line.
+ *
+ * @param args the command-line arguments.
+ */
+ public static void main(@Nonnull String[] args) {
+ try {
+ Options options = Options.parseCommandLine(Arrays.asList(args));
+ if (options.askForHelp()) {
+ printUsage(System.out);
+ } else if (options.askForVersion()) {
+ printVersion(System.out);
+ } else {
+ Reporter reporter = createReporter(options);
+ reporter.createReport();
+ }
+ } catch (CmdLineException e) {
+ System.err.println(e.getMessage());
+ CmdLineParser parser = e.getParser();
+ if (parser != null) {
+ printUsage(System.err);
+ } else {
+ System.err.println("Try --help for help.");
+ }
+ } catch (ReporterException e) {
+ e.printStackTrace(System.err);
+ printErrorAndExit(ExitStatus.USAGE_ERROR, e.getMessage());
+ } catch (IOException e) {
+ e.printStackTrace(System.err);
+ printErrorAndExit(ExitStatus.INTERNAL_ERROR, e.getMessage());
+ }
+ }
+
+ private static void printVersion(@Nonnull PrintStream out) {
+ try {
+ Version version = new Version("jack-jacoco-reporter", Main.class.getClassLoader());
+ out.println("Jack Jacoco reporter: " + version.getVerboseVersion());
+ } catch (IOException e) {
+ throw new AssertionError("Failed to find reporter version", e);
+ }
+ }
+
+ @Nonnull
+ private static Reporter createReporter(@Nonnull Options options) throws ReporterException {
+ Reporter reporter = new Reporter();
+ reporter.setCoverageExecutionDataFiles(options.getCoverageExecutionFiles());
+ reporter.setCoverageDescriptionFiles(options.getCoverageDescriptionFiles());
+ reporter.setReportOutputDirectory(options.getReportOutputDirectory());
+ reporter.setSourceFilesDirectories(options.getSourceFilesDirectories());
+ reporter.setReportName(options.getReportName());
+ reporter.setReportType(options.getReportType());
+ reporter.setOutputEncoding(options.getOutputReportEncoding());
+ reporter.setSourceFilesEncoding(options.getInputSourceFilesEncoding());
+ reporter.setTabWidth(options.getTabWidth());
+ File mappingFile = options.getMappingFile();
+ if (mappingFile != null) {
+ reporter.setMappingFile(mappingFile);
+ }
+ return reporter;
+ }
+
+ private static void printUsage(@Nonnull PrintStream printStream) {
+ CmdLineParser parser =
+ new CmdLineParser(new Options(), ParserProperties.defaults().withUsageWidth(100));
+
+ // Prints one line with all required options.
+ StringBuilder oneLineUsage = new StringBuilder("Usage:");
+ for (OptionHandler<?> optionHandler : parser.getOptions()) {
+ if (optionHandler.option.required()) {
+ oneLineUsage.append(' ');
+ oneLineUsage.append(optionHandler.option.toString());
+ oneLineUsage.append(' ');
+ oneLineUsage.append(optionHandler.option.metaVar());
+ if (optionHandler.option.isMultiValued()) {
+ oneLineUsage.append(" ...");
+ }
+ }
+ }
+ oneLineUsage.append(" [<options>]");
+ printStream.println(oneLineUsage.toString());
+
+ // Print all options with their usage.
+ printStream.println();
+ printStream.println("Options:");
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ parser.printUsage(outputStream);
+ printStream.append(outputStream.toString());
+ }
+
+ private static void printErrorAndExit(@Nonnull ExitStatus error, @Nonnull String msg) {
+ System.err.println(msg);
+ System.exit(error.getExitStatus());
+ }
+}
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/MappingFileLoader.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/MappingFileLoader.java
new file mode 100644
index 0000000..f76e5b5
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/MappingFileLoader.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nonnull;
+
+/**
+ * A mapping file loader that loads only class and method mappings.
+ */
+public class MappingFileLoader {
+
+ @Nonnull
+ private static final char[] EMPTY_STOP_CHARS = new char[] {};
+
+ @Nonnull
+ private static final char[] CLASSINFO_STOP_CHARS = new char[] {':'};
+
+ @Nonnull
+ private final Map<String, ClassMapping> oldToNewClassMapping =
+ new HashMap<String, ClassMapping>();
+
+ @Nonnull
+ private final Map<String, ClassMapping> newToOldClassMapping =
+ new HashMap<String, ClassMapping>();
+
+ @CheckForNull
+ public ClassMapping getClassMapping(@Nonnull String classBinaryName) {
+ // It must be a class descriptor (like 'com/sub/Foo')
+ assert classBinaryName.indexOf('.') < 0;
+ assert classBinaryName.indexOf('/') > 0;
+ return newToOldClassMapping.get(classBinaryName);
+ }
+
+ public void load(@Nonnull InputStream input) throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(input));
+ ClassMapping currentClassDesc = null;
+ String line;
+ while ((line = reader.readLine()) != null) {
+ // Remove leading and trailing whitespaces.
+ line = line.trim();
+ if (line.charAt(line.length() - 1) == ':') {
+ // Class mapping line
+ currentClassDesc = readClassInfo(line);
+ ClassMapping previous =
+ newToOldClassMapping.put(currentClassDesc.getClassName(), currentClassDesc);
+ assert previous == null;
+ previous =
+ oldToNewClassMapping.put(currentClassDesc.getOriginalClassName(), currentClassDesc);
+ assert previous == null;
+ } else if (line.indexOf('(') > 0) {
+ // Method mapping line
+ readMethodInfo(line, currentClassDesc);
+ } else {
+ // Ignore other lines (like field info)
+ }
+ }
+
+ // Now that we know how types may have been renamed by obfuscation, we need to update method
+ // signatures accordingly.
+ updateMethodMappings();
+ }
+
+ private void updateMethodMappings() {
+ assert oldToNewClassMapping.size() == newToOldClassMapping.size();
+ for (ClassMapping cd : newToOldClassMapping.values()) {
+ cd.updateMethodMapping(this);
+ }
+ }
+
+ @Nonnull
+ private ClassMapping readClassInfo(@Nonnull String line) {
+ // qualifiedOldClassName -> newClassName:
+ try {
+ int startIndex = readWhiteSpaces(line, 0);
+ int endIndex = readNameUntilSeparatorOrWhitespace(line, startIndex);
+ String qualifiedOldClassName = line.substring(startIndex, endIndex);
+ startIndex = readWhiteSpaces(line, endIndex);
+ startIndex = readSeparator(line, startIndex);
+ startIndex = readWhiteSpaces(line, startIndex);
+ endIndex = readName(line, startIndex, CLASSINFO_STOP_CHARS);
+ String newClassName = line.substring(startIndex, endIndex);
+ return new ClassMapping(NamingUtils.fqNameToBinaryName(newClassName),
+ NamingUtils.fqNameToBinaryName(qualifiedOldClassName));
+ } catch (ArrayIndexOutOfBoundsException e) {
+ throw new AssertionError("Invalid line '" + line + "'");
+ }
+ }
+
+ private void readMethodInfo(@Nonnull String line, @Nonnull ClassMapping currentClassDesc) {
+ // (startLineInfo:endLineInfo:)? type oldMethodName\((type(, type)*)?\) -> newMethodName
+ int startIndex = readWhiteSpaces(line, 0);
+ startIndex = readLineInfo(line, startIndex);
+ startIndex = readWhiteSpaces(line, startIndex);
+ int endIndex = line.indexOf(')', startIndex);
+ assert endIndex > 0;
+ String oldMethodDeclaration = line.substring(startIndex, endIndex + 1);
+ startIndex = endIndex + 1;
+ startIndex = readWhiteSpaces(line, startIndex);
+ startIndex = readSeparator(line, startIndex);
+ startIndex = readWhiteSpaces(line, startIndex);
+ endIndex = readName(line, startIndex, EMPTY_STOP_CHARS);
+ String newMethodName = line.substring(startIndex, endIndex);
+
+ // Add method info to current class.
+ currentClassDesc.addMethod(oldMethodDeclaration, newMethodName);
+ }
+
+ @Nonnegative
+ private int readNameUntilSeparatorOrWhitespace(@Nonnull String line, @Nonnegative int index) {
+ int length = line.length();
+ char c = line.charAt(index);
+ while (!Character.isWhitespace(c)) {
+ if (c == '-' && line.charAt(index + 1) == '>') {
+ // We check the second char to avoid bad parsing of names containing '-'
+ break;
+ }
+ if (++index < length) {
+ c = line.charAt(index);
+ } else {
+ break;
+ }
+ }
+ return index;
+ }
+
+ private static int readSeparator(@Nonnull String line, int index) {
+ if (line.charAt(index) != '-' || line.charAt(index + 1) != '>') {
+ throw new AssertionError();
+ }
+ return index + 2;
+ }
+
+ private static int readName(@Nonnull String line, @Nonnegative int index,
+ @Nonnull char[] stopChars) {
+ int length = line.length();
+ char c = line.charAt(index);
+ while (!Character.isWhitespace(c) && !charInArray(c, stopChars)) {
+ if (++index < length) {
+ c = line.charAt(index);
+ } else {
+ break;
+ }
+ }
+ return index;
+ }
+
+ private static boolean charInArray(char c, @Nonnull char[] array) {
+ for (char c2 : array) {
+ if (c == c2) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static int readWhiteSpaces(@Nonnull String line, @Nonnegative int index) {
+ while (Character.isWhitespace(line.charAt(index))) {
+ ++index;
+ }
+ return index;
+ }
+
+ private static int readLineInfo(@Nonnull String line, @Nonnegative int index) {
+ char c = line.charAt(index);
+ while (Character.isDigit(c) || c == ':') {
+ index++;
+ c = line.charAt(index);
+ }
+ return index;
+ }
+
+
+ /**
+ * A description of the class in the mapping file
+ */
+ public static class ClassMapping {
+ @Nonnull
+ private final String className;
+ @Nonnull
+ private final String originalClassName;
+
+ /**
+ * Temporary map associating original method declarations to their new method name (without
+ * parameter signatures). This map is set to null once the final mapping is computed.
+ */
+ @CheckForNull
+ private Map<String, String> oldToNewMethodMap = new HashMap<String, String>();
+
+ /**
+ * Maps method signatures to their original one.
+ */
+ @CheckForNull
+ private Map<String, String> newToOldMethodMap = null;
+
+ public ClassMapping(@Nonnull String className, @Nonnull String originalName) {
+ this.className = className;
+ this.originalClassName = originalName;
+ }
+
+ @Nonnull
+ public String getClassName() {
+ return className;
+ }
+
+ @Nonnull
+ public String getOriginalClassName() {
+ return originalClassName;
+ }
+
+ public void updateMethodMapping(@Nonnull MappingFileLoader loader) {
+ assert newToOldMethodMap == null;
+ assert oldToNewMethodMap != null;
+
+ newToOldMethodMap = new HashMap<String, String>(oldToNewMethodMap.size());
+ for (Entry<String, String> e : oldToNewMethodMap.entrySet()) {
+ String oldMethodDeclaration = e.getKey();
+ String newMethodName = e.getValue();
+
+ // The old method declaration is '<returnType> <oldName>(<paramType>[,<paramType>]*)'
+
+ // Extract return type.
+ int returnTypeEndPos = oldMethodDeclaration.indexOf(' ');
+ String returnType = oldMethodDeclaration.substring(0, returnTypeEndPos);
+
+ // Extract methodName
+ int oldMethodNameStartPos = readWhiteSpaces(oldMethodDeclaration, returnTypeEndPos);
+ int oldMethodNameEndPos = oldMethodDeclaration.indexOf('(', oldMethodNameStartPos);
+ String oldMethodName =
+ oldMethodDeclaration.substring(oldMethodNameStartPos, oldMethodNameEndPos);
+
+ // Extract parameters
+ int parameterListStartPos = oldMethodNameEndPos + 1;
+ int parameterListEndPos = oldMethodDeclaration.indexOf(')', parameterListStartPos);
+ String parameterList =
+ oldMethodDeclaration.substring(parameterListStartPos, parameterListEndPos);
+ String[] paramTypes = parameterList.isEmpty() ? new String[0] : parameterList.split(",");
+
+ // Create old and new signatures.
+ StringBuilder oldMethodSig = new StringBuilder(oldMethodName);
+ StringBuilder newMethodSig = new StringBuilder(newMethodName);
+ oldMethodSig.append('(');
+ newMethodSig.append('(');
+
+ // Convert parameters.
+ for (String parameterType : paramTypes) {
+ // Remove leading/trailing whitespaces.
+ parameterType = parameterType.trim();
+ String oldParameterTypeSig = NamingUtils.fqNameToSignature(parameterType);
+ String newParameterTypeSig = oldToNewClassName(loader, oldParameterTypeSig);
+ oldMethodSig.append(oldParameterTypeSig);
+ newMethodSig.append(newParameterTypeSig);
+ }
+
+ oldMethodSig.append(')');
+ newMethodSig.append(')');
+
+ // Append return type
+ String oldReturnTypeSig = NamingUtils.fqNameToSignature(returnType);
+ String newReturnTypeSig = oldToNewClassName(loader, oldReturnTypeSig);
+ oldMethodSig.append(oldReturnTypeSig);
+ newMethodSig.append(newReturnTypeSig);
+
+ newToOldMethodMap.put(newMethodSig.toString(), oldMethodSig.toString());
+ }
+
+ // Reset the map with finalized entries.
+ oldToNewMethodMap = null;
+ }
+
+ @Nonnull
+ private static String oldToNewClassName(@Nonnull MappingFileLoader loader,
+ @Nonnull String oldClassName) {
+ int lastCharPos = oldClassName.length() - 1;
+ if (oldClassName.charAt(lastCharPos) != ';') {
+ // THis is not a reference type: nothing to convert
+ return oldClassName;
+ }
+ if (oldClassName.charAt(0) == '[') {
+ return '[' + oldToNewClassName(loader, oldClassName.substring(1));
+ }
+ assert oldClassName.charAt(0) == 'L';
+ String binaryName = NamingUtils.signatureToBinaryName(oldClassName);
+ ClassMapping cm = loader.oldToNewClassMapping.get(binaryName);
+ if (cm != null) {
+ // Convert old to new.
+ return NamingUtils.binaryNameToSignature(cm.getClassName());
+ } else {
+ // No mapping so nothing to convert.
+ return oldClassName;
+ }
+ }
+
+ /**
+ * Return the original method signature for the given signature or null if it is not part of
+ * the mapping.
+ */
+ @CheckForNull
+ public String getOriginalMethodSignature(@Nonnull String methodSignature) {
+ assert newToOldMethodMap != null;
+ assert oldToNewMethodMap == null;
+ return newToOldMethodMap.get(methodSignature);
+ }
+
+ public void addMethod(@Nonnull String oldMethodDeclaration, @Nonnull String newMethodName) {
+ assert oldToNewMethodMap != null;
+ assert newToOldMethodMap == null;
+ oldToNewMethodMap.put(oldMethodDeclaration, newMethodName);
+ }
+
+ }
+}
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/NamingUtils.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/NamingUtils.java
new file mode 100644
index 0000000..a882eb4
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/NamingUtils.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Utilities for class names.
+ */
+public class NamingUtils {
+
+ /**
+ * Convert fully qualified name (primitive or reference) to binary name.
+ *
+ * @param typeName the fully-qualified name to convert
+ * @return the binary name of the class
+ */
+ @Nonnull
+ public static String fqNameToBinaryName(@Nonnull String typeName) {
+ assert typeName.indexOf('/') < 0;
+ return typeName.replace('.', '/');
+ }
+
+ @Nonnull
+ public static String binaryNameToFqName(@Nonnull String binaryName) {
+ assert binaryName.indexOf('.') < 0;
+ return binaryName.replace('/', '.');
+ }
+
+ /**
+ * Converts the fully qualified name to a signature.
+ */
+ @Nonnull
+ public static String fqNameToSignature(@Nonnull String typeName) {
+ int arrayPos = typeName.lastIndexOf('[');
+ if (arrayPos > 0) {
+ assert arrayPos == typeName.length() - 2;
+ assert typeName.charAt(arrayPos + 1) == ']';
+ return '[' + fqNameToSignature(typeName.substring(0, arrayPos));
+ } else if (typeName.equals("boolean")) {
+ return "Z";
+ } else if (typeName.equals("byte")) {
+ return "B";
+ } else if (typeName.equals("char")) {
+ return "C";
+ } else if (typeName.equals("short")) {
+ return "S";
+ } else if (typeName.equals("int")) {
+ return "I";
+ } else if (typeName.equals("float")) {
+ return "F";
+ } else if (typeName.equals("double")) {
+ return "D";
+ } else if (typeName.equals("long")) {
+ return "J";
+ } else if (typeName.equals("void")) {
+ return "V";
+ } else {
+ return binaryNameToSignature(fqNameToBinaryName(typeName));
+ }
+ }
+
+ @Nonnull
+ public static String binaryNameToSignature(@Nonnull String binaryName) {
+ assert binaryName.indexOf('.') < 0;
+ return 'L' + binaryName + ';';
+ }
+
+ @Nonnull
+ public static String signatureToBinaryName(@Nonnull String signature) {
+ assert signature.length() > 2; // at least one character between 'L' and ';';
+ assert signature.charAt(0) == 'L';
+ int lastCharPos = signature.length() - 1;
+ assert lastCharPos > 1;
+ assert signature.charAt(lastCharPos) == ';';
+ return signature.substring(1, lastCharPos);
+ }
+}
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/Options.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Options.java
similarity index 76%
rename from jack-jacoco-reporter/src/com/android/jack/tools/jacoco/Options.java
rename to jack-coverage/reporter/src/com/android/jack/tools/jacoco/Options.java
index 2e2330d..a8d32e3 100644
--- a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/Options.java
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Options.java
@@ -16,12 +16,14 @@
package com.android.jack.tools.jacoco;
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
+import org.kohsuke.args4j.ParserProperties;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -58,26 +60,31 @@
@Option(name = "--report-name", metaVar = "<name>", usage = "the name of the report")
@Nonnull
- private String reportName = "Report";
+ private String reportName = Constants.DEFAULT_REPORT_NAME;
@Option(name = "--report-type", metaVar = "<type>",
usage = "the type of the report (default is HTML)")
@Nonnull
- private ReportType reportType = ReportType.HTML;
+ private ReportType reportType = Constants.DEFAULT_REPORT_TYPE;
@Option(name = "--output-encoding", metaVar = "<encoding>",
usage = "the encoding for output report files (default is UTF-8)")
@Nonnull
- private String outputReportEncoding = "UTF-8";
+ private String outputReportEncoding = Constants.DEFAULT_OUTPUT_ENCODING;
@Option(name = "--input-encoding", metaVar = "<encoding>",
usage = "the encoding for input source files (default is UTF-8)")
@Nonnull
- private String inputSourceFilesEncoding = "UTF-8";
+ private String inputSourceFilesEncoding = Constants.DEFAULT_INPUT_ENCODING;
@Option(name = "--tab-width", metaVar = "<value>",
usage = "the width of tabs in source code (default is 4)")
- private int tabWidth = 4;
+ private int tabWidth = Constants.DEFAULT_TAB_WIDTH;
+
+ @Option(name = "--mapping-file", metaVar = "<file>",
+ usage = "the mapping file to support shrinking and obfuscation")
+ @CheckForNull
+ private File mappingFile;
@Nonnull
public List<File> getCoverageDescriptionFiles() {
@@ -94,8 +101,9 @@
return sourceFilesDirectories;
}
- @CheckForNull
+ @Nonnull
public File getReportOutputDirectory() {
+ assert reportOutputDirectory != null;
return reportOutputDirectory;
}
@@ -123,6 +131,11 @@
return tabWidth;
}
+ @CheckForNull
+ public File getMappingFile() {
+ return mappingFile;
+ }
+
public boolean askForHelp() {
return showHelp;
}
@@ -130,4 +143,14 @@
public boolean askForVersion() {
return showVersion;
}
+
+ @Nonnull
+ public static Options parseCommandLine(@Nonnull List<String> list) throws CmdLineException {
+ Options options = new Options();
+ CmdLineParser parser =
+ new CmdLineParser(options, ParserProperties.defaults().withUsageWidth(100));
+ parser.parseArgument(list);
+ parser.stopOptionParsing();
+ return options;
+ }
}
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ProbeDescription.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ProbeDescription.java
similarity index 95%
rename from jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ProbeDescription.java
rename to jack-coverage/reporter/src/com/android/jack/tools/jacoco/ProbeDescription.java
index 3be8023..e071f27 100644
--- a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ProbeDescription.java
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ProbeDescription.java
@@ -23,6 +23,7 @@
import java.util.List;
import javax.annotation.CheckForNull;
+import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
class ProbeDescription {
@@ -36,7 +37,7 @@
private static final int UNKNOWN_LINE = -1;
- class Line {
+ static class Line {
public Line(int line, int instructionsCount, int branchesCount) {
if (line < UNKNOWN_LINE) {
throw new IllegalArgumentException("negative line");
@@ -53,7 +54,9 @@
}
final int line;
+ @Nonnegative
final int instructionsCount;
+ @Nonnegative
final int branchesCount;
@Override
@@ -75,6 +78,7 @@
}
@Override
+ @Nonnull
public String toString() {
return "Probe " + id + " lines=" + Arrays.toString(lines.toArray());
}
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ReportType.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ReportType.java
similarity index 100%
rename from jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ReportType.java
rename to jack-coverage/reporter/src/com/android/jack/tools/jacoco/ReportType.java
diff --git a/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Reporter.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Reporter.java
new file mode 100644
index 0000000..b5ccef9
--- /dev/null
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/Reporter.java
@@ -0,0 +1,479 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import org.jacoco.core.analysis.CoverageBuilder;
+import org.jacoco.core.analysis.IBundleCoverage;
+import org.jacoco.core.tools.ExecFileLoader;
+import org.jacoco.report.DirectorySourceFileLocator;
+import org.jacoco.report.FileMultiReportOutput;
+import org.jacoco.report.IReportVisitor;
+import org.jacoco.report.MultiSourceFileLocator;
+import org.jacoco.report.csv.CSVFormatter;
+import org.jacoco.report.html.HTMLFormatter;
+import org.jacoco.report.xml.XMLFormatter;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.MessageFormat;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nonnull;
+
+/**
+ * A class responsible for generating a coverage report.
+ */
+public class Reporter {
+ /**
+ * A list of coverage description files produced by Jack.
+ */
+ @Nonnull
+ private List<File> coverageDescriptionFiles = Collections.emptyList();
+
+ /**
+ * The coverage execution file produced during execution.
+ */
+ @Nonnull
+ private List<File> coverageExecutionDataFiles = Collections.emptyList();
+
+ /**
+ * The directory where the report must be generated into.
+ */
+ @CheckForNull
+ private File reportOutputDirectory;
+
+ /**
+ * A list of source files directories.
+ */
+ @Nonnull
+ private List<File> sourceFilesDirectories = Collections.emptyList();
+
+ /**
+ * The name of the report.
+ */
+ @Nonnull
+ private String reportName = Constants.DEFAULT_REPORT_NAME;
+
+ /**
+ * The type of the report.
+ */
+ @Nonnull
+ private ReportType reportType = Constants.DEFAULT_REPORT_TYPE;
+
+ /**
+ * The output encoding of the report.
+ */
+ @Nonnull
+ private String outputEncoding = Constants.DEFAULT_OUTPUT_ENCODING;
+
+ /**
+ * The input encoding of source files.
+ */
+ @Nonnull
+ private String sourceFilesEncoding = Constants.DEFAULT_INPUT_ENCODING;
+
+ /**
+ * The tab width of the report.
+ */
+ @Nonnegative
+ private int tabWidth = Constants.DEFAULT_TAB_WIDTH;
+
+ /**
+ * The mapping file for shrinking and obfuscation.
+ */
+ @CheckForNull
+ private File mappingFile;
+
+ /**
+ * @return a list of coverage description files.
+ */
+ @Nonnull
+ public List<File> getCoverageDescriptionFiles() {
+ return coverageDescriptionFiles;
+ }
+
+ /**
+ * @return a list of coverage execution data files.
+ */
+ @Nonnull
+ public List<File> getCoverageExecutionDataFiles() {
+ return coverageExecutionDataFiles;
+ }
+
+ /**
+ * @return the report output directory.
+ */
+ @CheckForNull
+ public File getReportOutputDirectory() {
+ return reportOutputDirectory;
+ }
+
+ /**
+ * @return a list of source files directories.
+ */
+ @Nonnull
+ public List<File> getSourceFilesDirectories() {
+ return sourceFilesDirectories;
+ }
+
+ /**
+ * @return the report name.
+ */
+ @Nonnull
+ public String getReportName() {
+ return reportName;
+ }
+
+ /**
+ * @return the report type.
+ */
+ @Nonnull
+ public ReportType getReportType() {
+ return reportType;
+ }
+
+ /**
+ * @return the output encoding.
+ */
+ @Nonnull
+ public String getOutputEncoding() {
+ return outputEncoding;
+ }
+
+ /**
+ * @return the source files encoding.
+ */
+ @Nonnull
+ public String getSourceFilesEncoding() {
+ return sourceFilesEncoding;
+ }
+
+ /**
+ * @return the tab width.
+ */
+ @Nonnegative
+ public int getTabWidth() {
+ return tabWidth;
+ }
+
+ /**
+ * @return the mapping file
+ */
+ @CheckForNull
+ public File getMappingFile() {
+ return mappingFile;
+ }
+
+ /**
+ * Sets input coverage description files.
+ *
+ * @param coverageDescriptionFiles the coverageDescriptionFiles to set
+ * @throws NullPointerException if one file is null in the list.
+ * @throws ReporterException if a file does not exist or is not readable.
+ */
+ public void setCoverageDescriptionFiles(@Nonnull List<File> coverageDescriptionFiles)
+ throws ReporterException {
+ for (File coverageDescriptionFile : coverageDescriptionFiles) {
+ if (coverageDescriptionFile == null) {
+ throw new NullPointerException();
+ }
+ checkFileExists(coverageDescriptionFile);
+ checkCanReadFromFile(coverageDescriptionFile);
+ }
+ this.coverageDescriptionFiles = coverageDescriptionFiles;
+ }
+
+ /**
+ * Sets input coverage execution files.
+ *
+ * @param coverageExecutionDataFiles the coverageExecutionDataFiles to set
+ * @throws NullPointerException if one file is null in the list.
+ * @throws ReporterException if a file does not exist or is not readable.
+ */
+ public void setCoverageExecutionDataFiles(@Nonnull List<File> coverageExecutionDataFiles)
+ throws ReporterException {
+ for (File coverageExecutionDataFile : coverageExecutionDataFiles) {
+ if (coverageExecutionDataFile == null) {
+ throw new NullPointerException();
+ }
+ checkFileExists(coverageExecutionDataFile);
+ checkCanReadFromFile(coverageExecutionDataFile);
+ }
+ this.coverageExecutionDataFiles = coverageExecutionDataFiles;
+ }
+
+ /**
+ * Sets output report directory.
+ *
+ * @param reportOutputDirectory the reportOutputDirectory to set
+ * @throws ReporterException if the file does not exist or is not writable.
+ */
+ public void setReportOutputDirectory(@Nonnull File reportOutputDirectory)
+ throws ReporterException {
+ checkDirectoryExists(reportOutputDirectory);
+ checkCanWriteToFile(reportOutputDirectory);
+ this.reportOutputDirectory = reportOutputDirectory;
+ }
+
+ /**
+ * Sets input source file directories.
+ *
+ * @param sourceFilesDirectories the sourceFilesDirectories to set
+ * @throws NullPointerException if one file is null in the list.
+ * @throws ReporterException if a file does not exist or is not readable.
+ */
+ public void setSourceFilesDirectories(@Nonnull List<File> sourceFilesDirectories)
+ throws ReporterException {
+ for (File sourceFilesDirectory : sourceFilesDirectories) {
+ if (sourceFilesDirectory == null) {
+ throw new NullPointerException();
+ }
+ checkDirectoryExists(sourceFilesDirectory);
+ checkCanReadFromFile(sourceFilesDirectory);
+ }
+ this.sourceFilesDirectories = sourceFilesDirectories;
+ }
+
+ /**
+ * Sets report name.
+ *
+ * @param reportName the reportName to set
+ */
+ public void setReportName(@Nonnull String reportName) {
+ this.reportName = reportName;
+ }
+
+ /**
+ * Sets report type.
+ *
+ * @param reportType the reportType to set
+ */
+ public void setReportType(@Nonnull ReportType reportType) {
+ this.reportType = reportType;
+ }
+
+ /**
+ * Sets output encoding of the report.
+ *
+ * @param outputEncoding the outputEncoding to set
+ */
+ public void setOutputEncoding(@Nonnull String outputEncoding) {
+ this.outputEncoding = outputEncoding;
+ }
+
+ /**
+ * Sets input encoding of the source files.
+ *
+ * @param sourceFilesEncoding the sourceFilesEncoding to set
+ */
+ public void setSourceFilesEncoding(@Nonnull String sourceFilesEncoding) {
+ this.sourceFilesEncoding = sourceFilesEncoding;
+ }
+
+ /**
+ * Sets tab width for the source files in the report.
+ *
+ * @param tabWidth the tabWidth to set
+ */
+ public void setTabWidth(@Nonnegative int tabWidth) {
+ this.tabWidth = tabWidth;
+ }
+
+ /**
+ * Set the mapping file for the report.
+ *
+ * @param mappingFile a mapping file
+ * @throws ReporterException if the file does not exist or is not readable.
+ */
+ public void setMappingFile(@Nonnull File mappingFile) throws ReporterException {
+ checkFileExists(mappingFile);
+ checkCanReadFromFile(mappingFile);
+ this.mappingFile = mappingFile;
+ }
+
+ public void createReport() throws IOException, ReporterException {
+ checkFiles();
+
+ // Load and analyze coverage execution file.
+ ExecFileLoader loader = loadCoverageExecutionFile();
+ IBundleCoverage bundleCoverage = createBundleCoverage(loader);
+
+ // Create report.
+ switch (reportType) {
+ case HTML:
+ createHtmlReport(loader, bundleCoverage);
+ break;
+
+ case XML:
+ createXmlReport(loader, bundleCoverage);
+ break;
+
+ case CSV:
+ createCsvReport(loader, bundleCoverage);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unknown report type");
+ }
+ }
+
+ private void checkFiles() throws ReporterException {
+ if (coverageDescriptionFiles.isEmpty()) {
+ throw new ReporterException("Missing coverage description file (at least one is required)");
+ }
+ if (coverageExecutionDataFiles.isEmpty()) {
+ throw new ReporterException("Missing coverage execution file");
+ }
+ if (reportOutputDirectory == null) {
+ throw new ReporterException("Missing report output directory");
+ }
+ }
+
+ @Nonnull
+ private ExecFileLoader loadCoverageExecutionFile() throws IOException {
+ ExecFileLoader loader = new ExecFileLoader();
+ for (File coverageExecutionDataFile : coverageExecutionDataFiles) {
+ loader.load(coverageExecutionDataFile);
+ }
+ return loader;
+ }
+
+ @Nonnull
+ private IBundleCoverage createBundleCoverage(@Nonnull ExecFileLoader loader) throws IOException {
+ CoverageBuilder coverageBuilder = new CoverageBuilder();
+ MappingFileLoader mappingFileLoader = null;
+ if (mappingFile != null) {
+ mappingFileLoader = new MappingFileLoader();
+ InputStream in = new FileInputStream(mappingFile);
+ try {
+ mappingFileLoader.load(in);
+ } finally {
+ in.close();
+ }
+ }
+ JackCoverageAnalyzer analyzer = new JackCoverageAnalyzer(loader.getExecutionDataStore(),
+ coverageBuilder, mappingFileLoader);
+ // Analyze each coverage description file to fill the coverage builder.
+ for (File coverageDescriptionFile : coverageDescriptionFiles) {
+ analyzer.analyze(coverageDescriptionFile);
+ }
+ return coverageBuilder.getBundle(reportName);
+ }
+
+ private void createHtmlReport(@Nonnull ExecFileLoader loader,
+ @Nonnull IBundleCoverage bundleCoverage) throws IOException {
+ HTMLFormatter htmlFormatter = new HTMLFormatter();
+ htmlFormatter.setOutputEncoding(outputEncoding);
+ IReportVisitor visitor =
+ htmlFormatter.createVisitor(new FileMultiReportOutput(reportOutputDirectory));
+ applyVisitor(loader, bundleCoverage, visitor);
+ File indexHtmlFile = new File(reportOutputDirectory, "index.html");
+ System.out.println("Created HTML report at " + indexHtmlFile.getAbsolutePath());
+ }
+
+ private void createXmlReport(@Nonnull ExecFileLoader loader,
+ @Nonnull IBundleCoverage bundleCoverage) throws IOException {
+ XMLFormatter xmlFormatter = new XMLFormatter();
+ xmlFormatter.setOutputEncoding(outputEncoding);
+ File xmlReportFile = new File(reportOutputDirectory, "report.xml");
+ OutputStream outputStream = new FileOutputStream(xmlReportFile);
+ try {
+ IReportVisitor visitor = xmlFormatter.createVisitor(outputStream);
+ applyVisitor(loader, bundleCoverage, visitor);
+ System.out.println("Created XML report at " + xmlReportFile.getAbsolutePath());
+ } finally {
+ outputStream.close();
+ }
+ }
+
+ private void createCsvReport(@Nonnull ExecFileLoader loader,
+ @Nonnull IBundleCoverage bundleCoverage) throws IOException {
+ CSVFormatter csvFormatter = new CSVFormatter();
+ csvFormatter.setOutputEncoding(outputEncoding);
+ File csvReportFile = new File(reportOutputDirectory, "report.csv");
+ OutputStream outputStream = new FileOutputStream(csvReportFile);
+ try {
+ IReportVisitor visitor = csvFormatter.createVisitor(outputStream);
+ applyVisitor(loader, bundleCoverage, visitor);
+ System.out.println("Created CSV report at " + csvReportFile.getAbsolutePath());
+ } finally {
+ outputStream.close();
+ }
+ }
+
+ private void applyVisitor(@Nonnull ExecFileLoader loader, @Nonnull IBundleCoverage bundleCoverage,
+ @Nonnull IReportVisitor visitor) throws IOException {
+ // Let the visitor know about execution information. This must be done before visiting
+ // the bundle.
+ visitor.visitInfo(loader.getSessionInfoStore().getInfos(),
+ loader.getExecutionDataStore().getContents());
+
+ // Visit the bundle with source file information.
+ MultiSourceFileLocator sourceFileLocator = new MultiSourceFileLocator(tabWidth);
+ for (File sourceFilesDirectory : sourceFilesDirectories) {
+ sourceFileLocator
+ .add(new DirectorySourceFileLocator(sourceFilesDirectory, sourceFilesEncoding, tabWidth));
+ }
+ visitor.visitBundle(bundleCoverage, sourceFileLocator);
+
+ // Let the visitor know we're done so the report gets generated.
+ visitor.visitEnd();
+ }
+
+ private static void checkFileExists(@Nonnull File file) throws ReporterException {
+ checkFileExistsImpl(file, false);
+ }
+
+ private static void checkCanReadFromFile(@Nonnull File file) throws ReporterException {
+ if (!file.canRead()) {
+ throw new ReporterException(MessageFormat.format("Cannot read from file {0}", file));
+ }
+ }
+
+ private static void checkCanWriteToFile(@Nonnull File file) throws ReporterException {
+ if (!file.canWrite()) {
+ throw new ReporterException(MessageFormat.format("Cannot write to file {0}", file));
+ }
+ }
+
+ private static void checkDirectoryExists(@Nonnull File file) throws ReporterException {
+ checkFileExistsImpl(file, true);
+ if (!file.isDirectory()) {
+ throw new ReporterException(MessageFormat.format("File {0} is not a directory", file));
+ }
+ }
+
+ private static void checkFileExistsImpl(@Nonnull File file, boolean expectDirectory)
+ throws ReporterException {
+ if (!file.exists()) {
+ throw new ReporterException(MessageFormat.format("File {0} does not exist", file));
+ } else if (expectDirectory != file.isDirectory()) {
+ if (expectDirectory) {
+ throw new ReporterException(MessageFormat.format("File {0} is not a directory", file));
+ } else {
+ throw new ReporterException(MessageFormat.format("File {0} is a directory", file));
+ }
+ }
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ReporterException.java
similarity index 68%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-coverage/reporter/src/com/android/jack/tools/jacoco/ReporterException.java
index 0b9fd92..4aa6794 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-coverage/reporter/src/com/android/jack/tools/jacoco/ReporterException.java
@@ -14,7 +14,18 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.tools.jacoco;
-public interface Interface {}
+import javax.annotation.Nonnull;
+/**
+ * A reporter exception.
+ */
+public class ReporterException extends Exception {
+
+ private static final long serialVersionUID = 1L;
+
+ public ReporterException(@Nonnull String msg) {
+ super(msg);
+ }
+}
diff --git a/sched/tests/com/android/sched/util/file/AllTests.java b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/AllTests.java
similarity index 75%
rename from sched/tests/com/android/sched/util/file/AllTests.java
rename to jack-coverage/reporter/tests/com/android/jack/tools/jacoco/AllTests.java
index 1f2ce79..b62b083 100644
--- a/sched/tests/com/android/sched/util/file/AllTests.java
+++ b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/AllTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,13 +14,17 @@
* limitations under the License.
*/
-package com.android.sched.util.file;
+package com.android.jack.tools.jacoco;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
-@SuiteClasses(value = {FileUtilsTest.class})
+@SuiteClasses(value = {
+ JackCoverageAnalyzerTest.class,
+ MappingFileLoaderTest.class,
+ OptionsTest.class,
+ ReporterTest.class})
public class AllTests {
-}
\ No newline at end of file
+}
diff --git a/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/JackCoverageAnalyzerTest.java b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/JackCoverageAnalyzerTest.java
new file mode 100644
index 0000000..a846a9e
--- /dev/null
+++ b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/JackCoverageAnalyzerTest.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import com.google.gson.stream.JsonWriter;
+
+import junit.framework.Assert;
+
+import org.jacoco.core.analysis.IClassCoverage;
+import org.jacoco.core.analysis.ICoverageVisitor;
+import org.jacoco.core.analysis.IMethodCoverage;
+import org.jacoco.core.data.ExecutionData;
+import org.jacoco.core.data.ExecutionDataStore;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import javax.annotation.Nonnull;
+
+public class JackCoverageAnalyzerTest {
+ private static final long ID = 12345L;
+ private static final String CLASS_NAME = "foo/bar/MyClass";
+ private static final String OBFUSCATED_CLASS_NAME = "a/A";
+ private static final String METHOD_DECLARATION = "void oldMethod(foo.bar.MyClass)";
+ private static final String METHOD_SIGNATURE = "oldMethod(Lfoo/bar/MyClass;)V";
+ private static final String OBFUSCATED_METHOD_NAME = "newMethod";
+ private static final String OBFUSCATED_METHOD_SIGNATURE = "newMethod(La/A;)V";
+ private static final String SUPER_CLASS_NAME = "java/lang/Object";
+ private static final boolean[] PROBES = {true, false, true, false};
+
+ @Test
+ public void testAnalysis() throws IOException {
+ byte[] buffer = createSimpleJsonBuffer(CLASS_NAME, METHOD_SIGNATURE);
+
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ @Override
+ public void visitCoverage(IClassCoverage arg0) {
+ // Check class
+ Assert.assertEquals(ID, arg0.getId());
+ Assert.assertEquals(CLASS_NAME, arg0.getName());
+ Assert.assertEquals(SUPER_CLASS_NAME, arg0.getSuperName());
+
+ // Check method
+ Assert.assertEquals(1, arg0.getMethods().size());
+ IMethodCoverage methodCoverage = arg0.getMethods().iterator().next();
+ Assert.assertNotNull(methodCoverage);
+ String[] nameAndDesc = splitSignatureInNameAndDesc(METHOD_SIGNATURE);
+ Assert.assertEquals(nameAndDesc[0], methodCoverage.getName());
+ Assert.assertEquals(nameAndDesc[1], methodCoverage.getDesc());
+ }
+ };
+
+ ExecutionDataStore executionDataStore = createExecutionDataStore(CLASS_NAME);
+ JackCoverageAnalyzer jackCoverageAnalyzer =
+ new JackCoverageAnalyzer(executionDataStore, visitor, null /* no mapping file */);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ try {
+ jackCoverageAnalyzer.analyze(bais);
+ } finally {
+ bais.close();
+ }
+ }
+
+ @Test
+ public void testAnalysisWithIdentityMappingFile() throws IOException {
+ byte[] buffer = createSimpleJsonBuffer(CLASS_NAME, METHOD_SIGNATURE);
+
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ @Override
+ public void visitCoverage(IClassCoverage arg0) {
+ Assert.assertEquals(ID, arg0.getId());
+ Assert.assertEquals(CLASS_NAME, arg0.getName());
+ Assert.assertEquals(SUPER_CLASS_NAME, arg0.getSuperName());
+ }
+ };
+
+ MappingFileLoader loader = MappingFileLoaderTest.loadMappingFile(
+ String.format("%s -> %s:",
+ NamingUtils.binaryNameToFqName(CLASS_NAME), NamingUtils.binaryNameToFqName(CLASS_NAME))
+ );
+
+ ExecutionDataStore executionDataStore = createExecutionDataStore(CLASS_NAME);
+ JackCoverageAnalyzer jackCoverageAnalyzer =
+ new JackCoverageAnalyzer(executionDataStore, visitor, loader);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ try {
+ jackCoverageAnalyzer.analyze(bais);
+ } finally {
+ bais.close();
+ }
+ }
+
+ /**
+ * Simulate shrinking where the class is not in the mapping file
+ */
+ @Test
+ public void testAnalysisWithClassShrinking() throws IOException {
+ byte[] buffer = createSimpleJsonBuffer(CLASS_NAME, METHOD_SIGNATURE);
+
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ @Override
+ public void visitCoverage(IClassCoverage arg0) {
+ // The only class in the file should be ignored because it does not appear in the mapping
+ // file
+ Assert.fail("Unexpected visit: class is shrunk");
+ }
+ };
+
+ MappingFileLoader loader = MappingFileLoaderTest.loadMappingFile(
+ String.format("Foo -> Foo:")
+ );
+
+ ExecutionDataStore executionDataStore = createExecutionDataStore(CLASS_NAME);
+ JackCoverageAnalyzer jackCoverageAnalyzer =
+ new JackCoverageAnalyzer(executionDataStore, visitor, loader);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ try {
+ jackCoverageAnalyzer.analyze(bais);
+ } finally {
+ bais.close();
+ }
+ }
+
+ /**
+ * Simulate shrinking where the method is not in the mapping file
+ */
+ @Test
+ public void testAnalysisWithMethodShrinking() throws IOException {
+ byte[] buffer = createSimpleJsonBuffer(CLASS_NAME, METHOD_SIGNATURE);
+
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ @Override
+ public void visitCoverage(IClassCoverage arg0) {
+ Assert.assertEquals(ID, arg0.getId());
+ Assert.assertEquals(CLASS_NAME, arg0.getName());
+ Assert.assertEquals(SUPER_CLASS_NAME, arg0.getSuperName());
+ // We must not find the method.
+ Assert.assertTrue(arg0.getMethods().isEmpty());
+ }
+ };
+
+ String classBinaryName = NamingUtils.binaryNameToFqName(CLASS_NAME);
+ MappingFileLoader loader = MappingFileLoaderTest.loadMappingFile(
+ String.format("%s -> %s:", classBinaryName, classBinaryName),
+ String.format("void nonExistentMethod() -> nonExistentMethod")
+ );
+
+ ExecutionDataStore executionDataStore = createExecutionDataStore(CLASS_NAME);
+ JackCoverageAnalyzer jackCoverageAnalyzer =
+ new JackCoverageAnalyzer(executionDataStore, visitor, loader);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ try {
+ jackCoverageAnalyzer.analyze(bais);
+ } finally {
+ bais.close();
+ }
+ }
+
+ /**
+ * Simulate obfuscated class.
+ */
+ @Test
+ public void testAnalysisWithClassObfuscation() throws IOException {
+ byte[] buffer = createSimpleJsonBuffer(OBFUSCATED_CLASS_NAME, METHOD_SIGNATURE);
+
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ @Override
+ public void visitCoverage(IClassCoverage arg0) {
+ Assert.assertEquals(ID, arg0.getId());
+ Assert.assertEquals(CLASS_NAME, arg0.getName());
+ Assert.assertEquals(SUPER_CLASS_NAME, arg0.getSuperName());
+ }
+ };
+
+ MappingFileLoader loader = MappingFileLoaderTest.loadMappingFile(
+ String.format("%s -> %s:",
+ NamingUtils.binaryNameToFqName(CLASS_NAME),
+ NamingUtils.binaryNameToFqName(OBFUSCATED_CLASS_NAME))
+ );
+
+ ExecutionDataStore executionDataStore = createExecutionDataStore(OBFUSCATED_CLASS_NAME);
+ JackCoverageAnalyzer jackCoverageAnalyzer =
+ new JackCoverageAnalyzer(executionDataStore, visitor, loader);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ try {
+ jackCoverageAnalyzer.analyze(bais);
+ } finally {
+ bais.close();
+ }
+ }
+
+ /**
+ * Simulate obfuscated class.
+ */
+ @Test
+ public void testAnalysisWithMethodObfuscation() throws IOException {
+ byte[] buffer = createSimpleJsonBuffer(OBFUSCATED_CLASS_NAME, OBFUSCATED_METHOD_SIGNATURE);
+
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ @Override
+ public void visitCoverage(IClassCoverage arg0) {
+ Assert.assertEquals(ID, arg0.getId());
+ Assert.assertEquals(CLASS_NAME, arg0.getName());
+ Assert.assertEquals(SUPER_CLASS_NAME, arg0.getSuperName());
+
+ // Check method
+ Assert.assertEquals(1, arg0.getMethods().size());
+ IMethodCoverage methodCoverage = arg0.getMethods().iterator().next();
+ Assert.assertNotNull(methodCoverage);
+ String[] nameAndDesc = splitSignatureInNameAndDesc(METHOD_SIGNATURE);
+ Assert.assertEquals(nameAndDesc[0], methodCoverage.getName());
+ Assert.assertEquals(nameAndDesc[1], methodCoverage.getDesc());
+ }
+ };
+
+ MappingFileLoader loader = MappingFileLoaderTest.loadMappingFile(
+ String.format("%s -> %s:",
+ NamingUtils.binaryNameToFqName(CLASS_NAME),
+ NamingUtils.binaryNameToFqName(OBFUSCATED_CLASS_NAME)),
+ String.format("%s -> %s",
+ METHOD_DECLARATION, OBFUSCATED_METHOD_NAME)
+ );
+
+ ExecutionDataStore executionDataStore = createExecutionDataStore(OBFUSCATED_CLASS_NAME);
+ JackCoverageAnalyzer jackCoverageAnalyzer =
+ new JackCoverageAnalyzer(executionDataStore, visitor, loader);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ try {
+ jackCoverageAnalyzer.analyze(bais);
+ } finally {
+ bais.close();
+ }
+ }
+
+ @Nonnull
+ private ExecutionDataStore createExecutionDataStore(@Nonnull String className) {
+ ExecutionDataStore executionDataStore = new ExecutionDataStore();
+ ExecutionData executionData = executionDataStore.get(Long.valueOf(ID), className,
+ PROBES.length);
+ for (int i = 0, e = PROBES.length; i < e; ++i) {
+ executionData.getProbes()[i] = PROBES[i];
+ }
+ return executionDataStore;
+ }
+
+ // Create the minimal JSON for the class.
+ @Nonnull
+ private byte[] createSimpleJsonBuffer(@Nonnull String className, @Nonnull String methodSignature)
+ throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ JsonWriter w = new JsonWriter(new OutputStreamWriter(baos, "UTF-8"));
+ try {
+ w.beginObject();
+ w.name(JackCoverageAnalyzer.JSON_VERSION_ATTRIBUTE)
+ .value(JackCoverageAnalyzer.CURRENT_VERSION);
+ w.name(JackCoverageAnalyzer.JSON_DATA_ATTRIBUTE).beginArray();
+ w.beginObject();
+ w.name("id").value(ID);
+ w.name("name").value(className);
+ w.name("superClassName").value(SUPER_CLASS_NAME);
+ w.name("methods").beginArray();
+ // Add method
+ {
+ String[] nameAndDesc = splitSignatureInNameAndDesc(methodSignature);
+ w.beginObject();
+ w.name("id").value(0);
+ w.name("name").value(nameAndDesc[0]);
+ w.name("desc").value(nameAndDesc[1]);
+ w.endObject();
+ }
+ w.endArray();
+ w.name("probes").beginArray();
+ for (int i = 0, e = PROBES.length; i < e; ++i) {
+ w.beginObject();
+ w.name("id").value(i);
+ w.name("method").value(0);
+ w.endObject();
+ }
+ w.endArray();
+ w.endObject();
+ w.endArray();
+ w.endObject();
+ w.flush();
+ } finally {
+ w.close();
+ }
+
+ return baos.toByteArray();
+ }
+
+ @Nonnull
+ private static String[] splitSignatureInNameAndDesc(@Nonnull String methodSignature) {
+ int separatorPos = methodSignature.indexOf('(');
+ assert separatorPos > 0;
+ String methodName = methodSignature.substring(0, separatorPos);
+ String methodDesc = methodSignature.substring(separatorPos);
+ return new String[] { methodName, methodDesc };
+ }
+}
diff --git a/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/MappingFileLoaderTest.java b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/MappingFileLoaderTest.java
new file mode 100644
index 0000000..e42641b
--- /dev/null
+++ b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/MappingFileLoaderTest.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import com.android.jack.tools.jacoco.MappingFileLoader.ClassMapping;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nonnull;
+import junit.framework.Assert;
+import org.junit.Test;
+
+public class MappingFileLoaderTest {
+
+ @Test
+ public void testClassLineParsing() throws IOException {
+ String oldClassName = "com.Foo";
+ String newClassName = "com.A";
+
+ List<String> testLines = generateStringWithSpaces(oldClassName, "->", newClassName, ":");
+ for (String testLine : testLines) {
+ MappingFileLoader loader = loadMappingFile(testLine);
+
+ ClassMapping cm = loader.getClassMapping(NamingUtils.fqNameToBinaryName(newClassName));
+ Assert.assertNotNull("No match for line '" + testLine + "'", cm);
+ Assert.assertEquals("Invalid mapping for line '" + testLine + "'",
+ NamingUtils.fqNameToBinaryName(oldClassName), cm.getOriginalClassName());
+ }
+ }
+
+ @Test
+ public void testMethodLineParsing() throws IOException {
+ String oldClassName = "com.Foo";
+ String newClassName = "com.A";
+
+ List<String> testLines = generateStringWithSpaces("void m()", "->", "newM");
+ for (String testLine : testLines) {
+ MappingFileLoader loader = loadMappingFile(
+ "com.Foo -> com.A:",
+ testLine);
+
+ ClassMapping cm = loader.getClassMapping(NamingUtils.fqNameToBinaryName(newClassName));
+ Assert.assertNotNull("No match for line '" + testLine + "'", cm);
+ Assert.assertEquals("Invalid mapping for line '" + testLine + "'",
+ NamingUtils.fqNameToBinaryName(oldClassName), cm.getOriginalClassName());
+ Assert.assertEquals("Failure with line '" + testLine + "'",
+ "m()V", cm.getOriginalMethodSignature("newM()V"));
+ }
+ }
+
+ @Test
+ public void testMethodLineParsingWithLineInfo() throws IOException {
+ String oldClassName = "com.Foo";
+ String newClassName = "com.A";
+
+ List<String> testLines = generateStringWithSpaces("1:5", "void m()", "->", "newM");
+ for (String testLine : testLines) {
+ MappingFileLoader loader = loadMappingFile(
+ "com.Foo -> com.A:",
+ testLine);
+
+ ClassMapping cm = loader.getClassMapping(NamingUtils.fqNameToBinaryName(newClassName));
+ Assert.assertNotNull("No match for line '" + testLine + "'", cm);
+ Assert.assertEquals("Invalid mapping for line '" + testLine + "'",
+ NamingUtils.fqNameToBinaryName(oldClassName), cm.getOriginalClassName());
+ Assert.assertEquals("Failure with line '" + testLine + "'",
+ "m()V", cm.getOriginalMethodSignature("newM()V"));
+ }
+ }
+
+ @Test
+ public void testParsingWithignoredFieldInfo() throws IOException {
+ String oldClassName = "com.Foo";
+ String newClassName = "com.A";
+
+ List<String> testLines = generateStringWithSpaces("void m()", "->", "newM");
+ for (String testLine : testLines) {
+ MappingFileLoader loader = loadMappingFile(
+ "com.Foo -> com.A:",
+ "void m() -> newM",
+ "oldField -> newField");
+
+ ClassMapping cm = loader.getClassMapping(NamingUtils.fqNameToBinaryName(newClassName));
+ Assert.assertNotNull("No match for line '" + testLine + "'", cm);
+ Assert.assertEquals("Invalid mapping for line '" + testLine + "'",
+ NamingUtils.fqNameToBinaryName(oldClassName), cm.getOriginalClassName());
+ Assert.assertEquals("Failure with line '" + testLine + "'",
+ "m()V", cm.getOriginalMethodSignature("newM()V"));
+ }
+ }
+
+ @Test
+ public void testInvalidClassLine() throws IOException {
+ // Missing trailing ':' character.
+ byte[] buffer = buildBuffer("com.Foo -> com.A");
+
+ MappingFileLoader loader = new MappingFileLoader();
+ InputStream input = new ByteArrayInputStream(buffer);
+ try {
+ loader.load(input);
+ Assert.fail();
+ } catch (AssertionError expected) {
+ // OK, we got our exception.
+ } finally {
+ input.close();
+ }
+ }
+
+ @Test
+ public void testSignatureConversion() throws IOException {
+ MappingFileLoader loader = loadMappingFile(
+ "com.Foo -> com.A:",
+ "void m(int) -> newM1",
+ "void m(int, int) -> newM2",
+ "void m(com.Foo) -> newM3",
+ "void m(com.Foo[]) -> newM4"
+ );
+ ClassMapping cm = loader.getClassMapping("com/A");
+ Assert.assertNotNull(cm);
+
+ // Check unknown signature
+ Assert.assertNull(cm.getOriginalMethodSignature("notRenamed()V"));
+
+ // Check conversions
+ Assert.assertEquals("m(I)V", cm.getOriginalMethodSignature("newM1(I)V"));
+ Assert.assertEquals("m(II)V", cm.getOriginalMethodSignature("newM2(II)V"));
+
+ // Check method name and parameters are restored
+ Assert.assertEquals("m(Lcom/Foo;)V", cm.getOriginalMethodSignature("newM3(Lcom/A;)V"));
+ Assert.assertEquals("m([Lcom/Foo;)V", cm.getOriginalMethodSignature("newM4([Lcom/A;)V"));
+ }
+
+ /**
+ * Generate a list of all possible strings when the given {@code strings} are separated or not by
+ * a space character (including leading and trailing space).
+ */
+ private static List<String> generateStringWithSpaces(String... strings) {
+ int spacesPosCount = strings.length + 1;
+ int spacesCombinationsCount = 1 << spacesPosCount;
+ List<String> list = new ArrayList<String>(spacesCombinationsCount);
+
+ for (int i = 0; i < spacesCombinationsCount; ++i) {
+ StringBuilder sb = new StringBuilder();
+ int j = 0;
+ for (; j < strings.length; ++j) {
+ String s = strings[j];
+ if (isBitSet(i, j)) {
+ sb.append(' ');
+ }
+ sb.append(s);
+ }
+ assert j == strings.length;
+ // End space
+ if (isBitSet(i, j)) {
+ sb.append(' ');
+ }
+ list.add(sb.toString());
+ }
+ return list;
+ }
+
+ private static boolean isBitSet(int number, int index) {
+ return (number & (1 << index)) != 0;
+ }
+
+ @Test
+ public void testGenerateSpaces() {
+ List<String> strings = generateStringWithSpaces("str");
+ Assert.assertNotNull(strings);
+ Assert.assertEquals(4, strings.size());
+ Assert.assertTrue(strings.contains("str"));
+ Assert.assertTrue(strings.contains(" str"));
+ Assert.assertTrue(strings.contains("str "));
+ Assert.assertTrue(strings.contains(" str "));
+ }
+
+ static MappingFileLoader loadMappingFile(@Nonnull String... lines) throws IOException {
+ byte[] buffer = buildBuffer(lines);
+ MappingFileLoader loader = new MappingFileLoader();
+ InputStream input = new ByteArrayInputStream(buffer);
+ try {
+ loader.load(input);
+ } finally {
+ input.close();
+ }
+ return loader;
+ }
+
+ private static byte[] buildBuffer(@Nonnull String... lines) throws IOException {
+ byte[] result;
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ PrintWriter pw = new PrintWriter(baos);
+ for (String line : lines) {
+ pw.println(line);
+ }
+ pw.flush();
+ result = baos.toByteArray();
+ } finally {
+ baos.close();
+ }
+ return result;
+ }
+}
diff --git a/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/OptionsTest.java b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/OptionsTest.java
new file mode 100644
index 0000000..4567eb4
--- /dev/null
+++ b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/OptionsTest.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.kohsuke.args4j.CmdLineException;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class OptionsTest {
+ private static Options parseOptions(String str) throws CmdLineException {
+ String[] strings = str.split(" ");
+ return Options.parseCommandLine(Arrays.asList(strings));
+ }
+
+ private static final File METADATA_FILE = new File("pathToMetadataFile");
+ private static final File COVERAGE_FILE = new File("pathToCoverageFile");
+ private static final File REPORT_DIR = new File("pathToReportDir");
+
+ private List<String> strings = new ArrayList<String>();
+
+ @Before
+ public void setUp() {
+ resetCommandLine();
+ }
+
+ private void resetCommandLine() {
+ strings.clear();
+ strings.add("--metadata-file");
+ strings.add(METADATA_FILE.getPath());
+ strings.add("--coverage-file");
+ strings.add(COVERAGE_FILE.getPath());
+ strings.add("--report-dir");
+ strings.add(REPORT_DIR.getPath());
+ }
+
+ @Test
+ public void testMinimum() throws CmdLineException {
+ Options options = Options.parseCommandLine(strings);
+ assertNotNull(options);
+ assertNotNull(options.getCoverageExecutionFiles());
+ assertNotNull(options.getCoverageDescriptionFiles());
+ assertNotNull(options.getReportOutputDirectory());
+ assertNotNull(options.getSourceFilesDirectories());
+ assertNotNull(options.getReportType());
+ assertEquals(1, options.getCoverageDescriptionFiles().size());
+ assertEquals(1, options.getCoverageExecutionFiles().size());
+ assertEquals(METADATA_FILE.getPath(), options.getCoverageDescriptionFiles().get(0).getPath());
+ assertEquals(COVERAGE_FILE.getPath(), options.getCoverageExecutionFiles().get(0).getPath());
+ assertEquals(REPORT_DIR.getPath(), options.getReportOutputDirectory().getPath());
+ assertTrue(options.getSourceFilesDirectories().isEmpty());
+ assertEquals(ReportType.HTML, options.getReportType());
+ assertEquals("UTF-8", options.getOutputReportEncoding());
+ assertEquals("UTF-8", options.getInputSourceFilesEncoding());
+ assertEquals(4, options.getTabWidth());
+ assertFalse(options.askForHelp());
+ assertFalse(options.askForVersion());
+ }
+
+ @Test
+ public void testReport() throws CmdLineException {
+ for (ReportType type : ReportType.values()) {
+ strings.add("--report-type");
+ strings.add(type.name());
+ Options options = Options.parseCommandLine(strings);
+ assertNotNull(options);
+ assertEquals(options.getReportType(), type);
+
+ // Test in lower case mode.
+ resetCommandLine();
+ strings.add("--report-type");
+ strings.add(type.name().toLowerCase());
+ options = Options.parseCommandLine(strings);
+ assertNotNull(options);
+ assertEquals(options.getReportType(), type);
+ }
+ }
+
+ @Test
+ public void testHelp() throws CmdLineException {
+ Options options = parseOptions("-h");
+ assertTrue(options.askForHelp());
+
+ options = parseOptions("--help");
+ assertTrue(options.askForHelp());
+ }
+
+ @Test
+ public void testVersion() throws CmdLineException {
+ Options options = parseOptions("--version");
+ assertTrue(options.askForVersion());
+ }
+
+ @Test
+ public void testEmpty() {
+ try {
+ parseOptions("");
+ fail();
+ } catch (CmdLineException expected) {
+ }
+ }
+}
diff --git a/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/ReporterTest.java b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/ReporterTest.java
new file mode 100644
index 0000000..23231dd
--- /dev/null
+++ b/jack-coverage/reporter/tests/com/android/jack/tools/jacoco/ReporterTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.tools.jacoco;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Collections;
+
+public class ReporterTest {
+ /**
+ * Checks the {@link Options} and {@link Reporter} classes use the same default values.
+ */
+ @Test
+ public void testDefaultOptions() {
+ Options options = new Options();
+ Reporter reporter = new Reporter();
+
+ Assert.assertEquals(options.getCoverageDescriptionFiles().size(),
+ reporter.getCoverageDescriptionFiles().size());
+ Assert.assertEquals(options.getCoverageExecutionFiles().size(),
+ reporter.getCoverageExecutionDataFiles().size());
+ Assert.assertEquals(options.getSourceFilesDirectories().size(),
+ reporter.getSourceFilesDirectories().size());
+ Assert.assertEquals(options.getReportName(), reporter.getReportName());
+ Assert.assertEquals(options.getReportType(), reporter.getReportType());
+ Assert.assertEquals(options.getOutputReportEncoding(), reporter.getOutputEncoding());
+ Assert.assertEquals(options.getInputSourceFilesEncoding(), reporter.getSourceFilesEncoding());
+ Assert.assertEquals(options.getTabWidth(), reporter.getTabWidth());
+ }
+
+ private static final File DUMMY_FILE = new File("foo");
+
+ private Reporter reporter = new Reporter();
+ private File tempCoverageDescriptionFile;
+ private File tempCoverageExecutionFile;
+ private File tempOutputReportDir;
+
+ @Before
+ public void setUp() throws IOException {
+ tempCoverageDescriptionFile = Files.createTempFile("coverage", "em.tmp").toFile();
+ tempCoverageExecutionFile = Files.createTempFile("coverage", "ec.tmp").toFile();
+ tempOutputReportDir = Files.createTempDirectory("coverage-report").toFile();
+ }
+
+ @After
+ public void tearDown() {
+ boolean tempCoverageDescriptionFileDeleted = tempCoverageDescriptionFile.delete();
+ boolean tempCoverageExecutionFileDeleted = tempCoverageExecutionFile.delete();
+ boolean tempOutputReportDirDeleted = tempOutputReportDir.delete();
+
+ Assert.assertTrue(tempCoverageDescriptionFileDeleted);
+ Assert.assertTrue(tempCoverageExecutionFileDeleted);
+ Assert.assertTrue(tempOutputReportDirDeleted);
+ }
+
+ @Test
+ public void testNoCoverageDescriptionFile() throws IOException {
+ // No coverage description file must throw a ReporterException.
+ try {
+ reporter.createReport();
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testNullCoverageDescriptionFile() throws ReporterException {
+ // Non-existent coverage description file must throw a ReporterException.
+ try {
+ reporter.setCoverageDescriptionFiles(Collections.<File>singletonList(null));
+ Assert.fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @Test
+ public void testInvalidCoverageDescriptionFile() {
+ // Non-existent coverage description file must throw a ReporterException.
+ try {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(DUMMY_FILE));
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testNoCoverageExecutionFile() throws IOException, ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+
+ // No coverage execution file must throw a ReporterException.
+ try {
+ reporter.createReport();
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testInvalidCoverageExecutionFile() throws ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+ try {
+ reporter.setCoverageExecutionDataFiles(Collections.singletonList(DUMMY_FILE));
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testNoOutputReportDir() throws IOException, ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+ reporter.setCoverageExecutionDataFiles(Collections.singletonList(tempCoverageExecutionFile));
+
+ // No report output directory must throw a ReporterException.
+ try {
+ reporter.createReport();
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testInvalidOutputReportDir() throws ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+ reporter.setCoverageExecutionDataFiles(Collections.singletonList(tempCoverageExecutionFile));
+ try {
+ reporter.setReportOutputDirectory(DUMMY_FILE);
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ // Testing with an existing file but not a directory.
+ try {
+ reporter.setReportOutputDirectory(tempCoverageExecutionFile);
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testNullSourceDirectory() throws ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+ reporter.setCoverageExecutionDataFiles(Collections.singletonList(tempCoverageExecutionFile));
+ reporter.setReportOutputDirectory(tempOutputReportDir);
+ try {
+ reporter.setSourceFilesDirectories(Collections.<File>singletonList(null));
+ Assert.fail();
+ } catch (NullPointerException expected) {
+ }
+ }
+
+ @Test
+ public void testInvalidSourceDirectory() throws ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+ reporter.setCoverageExecutionDataFiles(Collections.singletonList(tempCoverageExecutionFile));
+ reporter.setReportOutputDirectory(tempOutputReportDir);
+ try {
+ reporter.setSourceFilesDirectories(Collections.singletonList(DUMMY_FILE));
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+
+ @Test
+ public void testInvalidMappingFile() throws ReporterException {
+ reporter.setCoverageDescriptionFiles(Collections.singletonList(tempCoverageDescriptionFile));
+ reporter.setCoverageExecutionDataFiles(Collections.singletonList(tempCoverageExecutionFile));
+ reporter.setReportOutputDirectory(tempOutputReportDir);
+ try {
+ reporter.setMappingFile(DUMMY_FILE);
+ Assert.fail();
+ } catch (ReporterException expected) {
+ }
+ }
+}
diff --git a/jack-coverage/src/com/android/jack/coverage/CodeCoverageAnalyzer.java b/jack-coverage/src/com/android/jack/coverage/CodeCoverageAnalyzer.java
deleted file mode 100644
index 8182bfe..0000000
--- a/jack-coverage/src/com/android/jack/coverage/CodeCoverageAnalyzer.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.coverage;
-
-import com.android.jack.cfg.BasicBlock;
-import com.android.jack.cfg.ConditionalBasicBlock;
-import com.android.jack.cfg.ControlFlowGraph;
-import com.android.jack.cfg.SwitchBasicBlock;
-import com.android.jack.cfg.ThrowBasicBlock;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.ir.ast.JExpression;
-import com.android.jack.ir.ast.JIfStatement;
-import com.android.jack.ir.ast.JMethod;
-import com.android.jack.ir.ast.JStatement;
-import com.android.jack.ir.ast.JSwitchStatement;
-import com.android.jack.ir.ast.JVisitor;
-import com.android.jack.ir.sourceinfo.SourceInfo;
-import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
-import com.android.sched.item.Description;
-import com.android.sched.schedulable.Constraint;
-import com.android.sched.schedulable.Filter;
-import com.android.sched.schedulable.RunnableSchedulable;
-import com.android.sched.schedulable.Support;
-import com.android.sched.schedulable.Transform;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-
-import javax.annotation.Nonnull;
-
-/**
- * Analyzes control flow graph of a method to determine the coverage probes required to instrument
- * the method.
- */
-@Description("Code coverage analyzer")
-@Support(CodeCoverageFeature.class)
-@Constraint(need = {CodeCoverageMarker.Initialized.class, ControlFlowGraph.class})
-@Transform(
- add = {CodeCoverageMarker.Analyzed.class, ProbeMarker.class}, modify = CodeCoverageMarker.class)
-@Filter(TypeWithoutPrebuiltFilter.class)
-public class CodeCoverageAnalyzer implements RunnableSchedulable<JMethod> {
- @Override
- public void run(@Nonnull JMethod m) {
- if (m.isNative() || m.isAbstract()) {
- // This method has no code so cannot be instrumented.
- return;
- }
-
- JDefinedClassOrInterface declaringClass = m.getEnclosingType();
- CodeCoverageMarker coverageMarker = declaringClass.getMarker(CodeCoverageMarker.class);
- if (coverageMarker == null) {
- // The declaring class is not selected for code coverage.
- return;
- }
-
- ControlFlowGraph controlFlowGraph = m.getMarker(ControlFlowGraph.class);
- assert controlFlowGraph != null : "No control flow graph";
-
- analyzeCFG(m, controlFlowGraph, coverageMarker);
- findProbeLocations(controlFlowGraph);
- }
-
- /**
- * Analyzes the control flow graph to identify all required probes. This does not modify the IR,
- * only adding {@link ProbeMarker} on {@link BasicBlock}.
- * @param method the method being analyzed
- * @param controlFlowGraph
- * @param coverageMarker
- */
- private static void analyzeCFG(@Nonnull JMethod method,
- @Nonnull ControlFlowGraph controlFlowGraph, @Nonnull CodeCoverageMarker coverageMarker) {
- // Analyze the CFG to identify probes.
- Queue<BasicBlock> blocks = new LinkedList<BasicBlock>();
- blocks.add(controlFlowGraph.getEntryNode());
- for (BasicBlock bb = blocks.poll(); bb != null; bb = blocks.poll()) {
- if (bb.containsMarker(ProbeMarker.class)) {
- // The block has already been processed.
- continue;
- }
- List<BasicBlock> predecessors = bb.getPredecessors();
- int predecessorsCount = predecessors.size();
- ProbeDescription probe = null;
- if (predecessorsCount == 0) {
- // This is the start of a new probe.
- probe = assignNewProbe(method, coverageMarker, bb);
- } else if (predecessorsCount > 1) {
- // There are different paths to reach this block: use a new probe.
- probe = assignNewProbe(method, coverageMarker, bb);
- } else { // predecessorsCount == 1
- // The block has only one predecessor.
- BasicBlock pred = predecessors.get(0);
- int successorsOfPredecessorCount = pred.getSuccessors().size();
- if (successorsOfPredecessorCount > 1) {
- // TODO(shertz) Jacoco does not seem to split probe on throwing instructions. If we want
- // to do the same thing, we could test whether the predecessor is a Pei block, in which
- // case we continue with the same probe instead of creating a new one.
- probe = assignNewProbe(method, coverageMarker, bb);
- } else {
- // There is an unconditional path from the predecessor to this block: use the same
- // probe.
- ProbeMarker probeMarker = pred.getMarker(ProbeMarker.class);
- assert probeMarker != null;
- bb.addMarker(probeMarker);
- probe = probeMarker.getProbe();
- }
- }
-
- // Update probe with source information of each statement it covers.
- assert probe != null;
- for (JStatement st : bb.getStatements()) {
- ProbeUpdater visitor = new ProbeUpdater(probe);
- visitor.accept(st);
- }
-
- // Visit all its successors
- blocks.addAll(bb.getSuccessors());
- }
-
- // Mark branch lines. We need that all blocks have been processed once so the ProbeMarker is
- // installed.
- for (BasicBlock bb : controlFlowGraph.getNodes()) {
- if (bb instanceof ConditionalBasicBlock || bb instanceof SwitchBasicBlock) {
- // For Jacoco, we need to remember these are branching instructions and how many
- // possible branches exist.
- JStatement branchStatement = bb.getStatements().get(0);
- SourceInfo branchSourceInfo = branchStatement.getSourceInfo();
- for (BasicBlock succ : bb.getSuccessors()) {
- ProbeMarker marker = succ.getMarker(ProbeMarker.class);
- assert marker != null;
- marker.getProbe().incrementLine(branchSourceInfo.getStartLine(), 1, true);
- }
- }
- }
- }
-
- /**
- * Iterates over basic block to identify which ones are terminating their respective probes.
- * @param controlFlowGraph
- */
- private static void findProbeLocations(@Nonnull ControlFlowGraph controlFlowGraph) {
- BasicBlock entryBlock = controlFlowGraph.getEntryNode();
- BasicBlock exitBlock = controlFlowGraph.getExitNode();
- for (BasicBlock bb : controlFlowGraph.getNodes()) {
- if (bb == entryBlock || bb == exitBlock) {
- // we do not process these special blocks.
- continue;
- }
-
- ProbeMarker probeMarker = bb.getMarker(ProbeMarker.class);
- assert probeMarker != null;
- List<BasicBlock> successors = bb.getSuccessors();
- if (successors.size() > 1) {
- // There is more than one path from this block so its probe ends.
- assert doSuccessorsHaveDifferentProbes(probeMarker, successors);
- probeMarker.setInsertionBlock(bb);
- } else if (successors.size() == 1) {
- BasicBlock successor = successors.get(0);
- if (successor == exitBlock) {
- // We're going to leave the method (return or throw) so we must terminate the probe.
- probeMarker.setInsertionBlock(bb);
- } else {
- // Is it successor covered by a different probe?
- ProbeMarker successorProbeMarker = successor.getMarker(ProbeMarker.class);
- assert successorProbeMarker != null;
- if (successorProbeMarker.getProbe() != probeMarker.getProbe()) {
- // The successor starts a different probe so we must terminate ours.
- probeMarker.setInsertionBlock(bb);
- }
- }
- } else { // no successor
- assert bb instanceof ThrowBasicBlock;
- probeMarker.setInsertionBlock(bb);
- }
- }
- }
-
- /**
- * Only used for assertion.
- */
- private static boolean doSuccessorsHaveDifferentProbes(
- @Nonnull ProbeMarker marker, @Nonnull List<BasicBlock> successors) {
- for (BasicBlock bb : successors) {
- ProbeMarker probeMarker = bb.getMarker(ProbeMarker.class);
- assert probeMarker != null;
- if (probeMarker == marker) {
- return false;
- }
- }
- return true;
- }
-
- private static ProbeDescription assignNewProbe(
- @Nonnull JMethod method, @Nonnull CodeCoverageMarker coverageMarker, @Nonnull BasicBlock bb) {
- ProbeDescription p = coverageMarker.createProbe(method);
- bb.addMarker(new ProbeMarker(p));
- return p;
- }
-
- /**
- * Updates probes with source information.
- */
- private static class ProbeUpdater extends JVisitor {
- @Nonnull
- private final ProbeDescription probe;
-
- public ProbeUpdater(@Nonnull ProbeDescription probe) {
- this.probe = probe;
- }
-
- @Override
- public void endVisit(@Nonnull JExpression x) {
- updateProbe(x.getSourceInfo());
- }
-
- @Override
- public boolean visit(@Nonnull JIfStatement x) {
- // Do not visit 'then' and 'else' statements: they will be assigned to different probes
- // so we do not want to update the current probe with their source information.
- accept(x.getIfExpr());
- return false;
- }
-
- @Override
- public boolean visit(@Nonnull JSwitchStatement x) {
- // Do not visit 'case' and 'default' statements: they will be assigned to different probes
- // so we do not want to update the current probe with their source information.
- accept(x.getExpr());
- return false;
- }
-
- @Override
- public boolean visit(@Nonnull JStatement x) {
- updateProbe(x.getSourceInfo());
- return false;
- }
-
- private void updateProbe(@Nonnull SourceInfo sourceInfo) {
- // Without debug info, JaCoCo considers instruction's line to be -1.
- int line = (sourceInfo != SourceInfo.UNKNOWN) ? sourceInfo.getStartLine() : -1;
- probe.incrementLine(line, 1, false);
- }
- }
-}
diff --git a/jack-coverage/tests/com/android/jack/coverage/CoverageTests.java b/jack-coverage/tests/com/android/jack/coverage/CoverageTests.java
deleted file mode 100644
index 9b1afb2..0000000
--- a/jack-coverage/tests/com/android/jack/coverage/CoverageTests.java
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.coverage;
-
-import static org.junit.Assert.assertEquals;
-
-import com.google.common.collect.Sets;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-
-import com.android.jack.test.TestsProperties;
-import com.android.jack.test.junit.KnownIssue;
-import com.android.jack.test.toolchain.AbstractTestTools;
-import com.android.jack.test.toolchain.JackApiV03Toolchain;
-import com.android.jack.test.toolchain.JackApiV04Toolchain;
-import com.android.jack.test.toolchain.JackBasedToolchain;
-import com.android.jack.test.toolchain.JackCliToolchain;
-import com.android.jack.util.NamingTools;
-import com.android.sched.util.file.CannotChangePermissionException;
-import com.android.sched.util.file.CannotCreateFileException;
-import com.android.sched.util.file.WrongPermissionException;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-public class CoverageTests {
- @Nonnull
- private static final String JACOCO_RUNTIME_PACKAGE = "org.jacoco.agent.rt.internal_04864a1";
-
- @Nonnull private static final String COVERAGE_TEST_PACKAGE = "com.android.jack.coverage";
-
- @Test
- public void testSingleClass() throws Exception {
- final String testPackageName = getTestPackageName("test001");
- JsonArray classes = compileAndReadJson(testPackageName);
-
- // We expect only one class
- Assert.assertNotNull(classes);
- Assert.assertEquals(1, classes.size());
- JsonObject testClass = classes.get(0).getAsJsonObject();
- Assert.assertNotNull(testClass);
- Assert.assertEquals(
- getClassNameForJson(testPackageName + ".AbstractClass"),
- getClassName(testClass));
-
- // Check its methods.
- JsonArray methods = testClass.get("methods").getAsJsonArray();
- Assert.assertEquals(3, methods.size()); // abstract and native methods are excluded.
-
- class NameAndDesc {
- @Nonnull public final String name;
- @Nonnull public final String desc;
-
- public NameAndDesc(@Nonnull String name, @Nonnull String desc) {
- this.name = name;
- this.desc = desc;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof NameAndDesc) {
- NameAndDesc other = (NameAndDesc) obj;
- return name.equals(other.name) && desc.equals(other.desc);
- } else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- String concat = name + desc;
- return concat.hashCode();
- }
- }
- Set<NameAndDesc> expectedMethods = new HashSet<NameAndDesc>();
- expectedMethods.add(new NameAndDesc(NamingTools.INIT_NAME, "()V"));
- expectedMethods.add(new NameAndDesc("staticMethod", "()V"));
- expectedMethods.add(new NameAndDesc("instanceMethod", "()V"));
- for (JsonElement methodElt : methods) {
- String name = methodElt.getAsJsonObject().get("name").getAsString();
- String desc = methodElt.getAsJsonObject().get("desc").getAsString();
- Assert.assertTrue(expectedMethods.contains(new NameAndDesc(name, desc)));
- }
- }
-
- @Nonnull
- private static String getClassName(JsonArray classArray, int index) {
- return getClassName(classArray.get(index).getAsJsonObject());
- }
-
- @Nonnull
- private static String getClassName(JsonObject classObject) {
- return classObject.get("name").getAsString();
- }
-
- @Test
- public void testSingleInterface() throws Exception {
- JsonArray classes = compileAndReadJson(getTestPackageName("test002"));
-
- // Interface must be skipped
- Assert.assertEquals(0, classes.size());
- }
-
- @Test
- public void testIncludeAll() throws Exception {
- String testPackageName = getTestPackageName("test003");
- JsonArray classes = compileAndReadJson(testPackageName, "*", null);
-
- // Full coverage: Foo and Bar classes.
- Assert.assertEquals(2, classes.size());
- Collection<? extends String> actualClassNames = collectClassNames(classes);
- Set<String> expectedClassNames = Sets.newHashSet(
- getClassNameForJson(testPackageName + ".foo.Foo"),
- getClassNameForJson(testPackageName + ".foo.bar.Bar"));
- Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
- }
-
- @Test
- public void testIncludeSingle() throws Exception {
- String testPackageName = getTestPackageName("test003");
- String includeFilter = testPackageName + ".foo.bar.Bar";
- JsonArray classes = compileAndReadJson(testPackageName, includeFilter, null);
-
- // Partial coverage: only Bar class.
- Assert.assertEquals(1, classes.size());
- Collection<? extends String> actualClassNames = collectClassNames(classes);
- Set<String> expectedClassNames = Sets.newHashSet(
- getClassNameForJson(testPackageName + ".foo.bar.Bar"));
- Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
- }
-
- @Test
- public void testIncludeWildcard() throws Exception {
- String testPackageName = getTestPackageName("test003");
- String includeFilter = testPackageName + ".foo.bar.*";
- JsonArray classes = compileAndReadJson(testPackageName, includeFilter, null);
-
- // Partial coverage: only Bar class.
- Assert.assertEquals(1, classes.size());
- Collection<? extends String> actualClassNames = collectClassNames(classes);
- Set<String> expectedClassNames = Sets.newHashSet(
- getClassNameForJson(testPackageName + ".foo.bar.Bar"));
- Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
- }
-
- @Test
- public void testExcludeAll() throws Exception {
- JsonArray classes = compileAndReadJson(getTestPackageName("test003"), null, "*");
-
- // No coverage at all
- Assert.assertEquals(0, classes.size());
- }
-
- @Test
- public void testExcludeSingle() throws Exception {
- String testPackageName = getTestPackageName("test003");
- String excludeFilter = testPackageName + ".foo.bar.Bar";
- JsonArray classes = compileAndReadJson(getTestPackageName("test003"), null, excludeFilter);
-
- // Partial coverage: only Foo class.
- Assert.assertEquals(1, classes.size());
- Collection<? extends String> actualClassNames = collectClassNames(classes);
- Set<String> expectedClassNames = Sets.newHashSet(
- getClassNameForJson(testPackageName + ".foo.Foo"));
- Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
- }
-
- @Test
- public void testExcludeWildcard() throws Exception {
- String testPackageName = getTestPackageName("test003");
- String excludeFilter = testPackageName + ".foo.bar.*";
- JsonArray classes = compileAndReadJson(testPackageName, null, excludeFilter);
-
- // Partial coverage: only Foo class.
- Assert.assertEquals(1, classes.size());
- Collection<? extends String> actualClassNames = collectClassNames(classes);
- Set<String> expectedClassNames = Sets.newHashSet(
- getClassNameForJson(testPackageName + ".foo.Foo"));
- Assert.assertTrue(actualClassNames.containsAll(expectedClassNames));
- }
-
- @Test
- public void testIncludeExclude() throws Exception {
- String testPackageName = getTestPackageName("test003");
- String includeFilter = testPackageName + ".foo.bar.*";
- String excludeFilter = testPackageName + ".foo.*";
- JsonArray classes = compileAndReadJson(testPackageName, includeFilter, excludeFilter);
-
- // No coverage at all
- Assert.assertEquals(0, classes.size());
- }
-
- @Test
- public void testPreDex() throws Exception {
- String testPackageName = getTestPackageName("test004");
-
- // 1 - Create a lib.
- JackBasedToolchain toolchain = createJackToolchain();
- File libDir = AbstractTestTools.createTempDir();
- File libSrcFiles = new File(getTestRootDir(testPackageName), "lib");
- toolchain.srcToLib(libDir, false, libSrcFiles);
-
- // 2 - Compile the lib with coverage.
- toolchain = createJackToolchain();
- toolchain.addStaticLibs(libDir);
- File coverageMetadataFile = enableCodeCoverage(toolchain, null, null);
- File srcFiles = new File(getTestRootDir(testPackageName), "src");
- File outDexFolder = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolder, false, srcFiles);
-
- // 3 - Check types from the lib are instrumented.
- JsonArray classes = loadJsonCoverageClasses(coverageMetadataFile);
- JsonObject testClass =
- getJsonClass(classes, getClassNameForJson(testPackageName + ".lib.LibClass"));
- JsonArray probesArray = testClass.get("probes").getAsJsonArray();
- Assert.assertNotNull(probesArray);
- Assert.assertTrue(probesArray.size() > 0);
- }
-
- @Test
- @KnownIssue // flaky due to non-determinism
- public void testClassId_005() throws Exception {
- String testPackageName = getTestPackageName("test005");
- File testRootDir = getTestRootDir(testPackageName);
- final String className = getClassNameForJson(testPackageName + ".jack.LibClass");
-
- long classIdOne;
- long classIdTwo;
- long classIdThree;
- JackBasedToolchain toolchain;
-
- // Compile with coverage only
- {
- toolchain = createJackToolchain();
- File coverageFileOne = enableCodeCoverage(toolchain, null, null);
- File outDexFolderOne = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolderOne, false, testRootDir);
- classIdOne = getClassIdOf(coverageFileOne, className);
- }
-
- // Compile with coverage only again into a different coverage file.
- {
- toolchain = createJackToolchain();
- File coverageFileTwo = enableCodeCoverage(toolchain, null, null);
- File outDexFolderTwo = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolderTwo, false, testRootDir);
- classIdTwo = getClassIdOf(coverageFileTwo, className);
- }
-
- // Compile with coverage *and* proguard to shrink LibClass so it loses its unusedMethod.
- {
- toolchain = createJackToolchain();
- File coverageFileThree = enableCodeCoverage(toolchain, null, null);
- File proguardFile = new File(testRootDir, "proguard.flags");
- toolchain.addProguardFlags(proguardFile);
- File outDexFolderThree = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolderThree, false, testRootDir);
- classIdThree = getClassIdOf(coverageFileThree, className);
- }
-
- // We should generate the same class ID for the same class.
- Assert.assertEquals("Expected same class IDs", classIdOne, classIdTwo);
-
- // We should generate different class IDs when they are different (after shrinking here).
- assertNotEquals("Expected different class IDs", classIdOne, classIdThree);
- }
-
- @Test
- public void testClassId_006() throws Exception {
- String testPackageNameV1 = getTestPackageName("test006_v1");
- File testRootDirV1 = getTestRootDir(testPackageNameV1);
-
- String testPackageNameV2 = getTestPackageName("test006_v2");
- File testRootDirV2 = getTestRootDir(testPackageNameV2);
-
- final String className = getClassNameForJson("jack.SrcClass");
- long classIdV1;
- long classIdV2;
- long classIdV2_2;
- JackBasedToolchain toolchain;
-
- // Compile with coverage the version v1
- {
- toolchain = createJackToolchain();
- File coverageFileOne = enableCodeCoverage(toolchain, null, null);
- File outDexFolderOne = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolderOne, false, testRootDirV1);
- classIdV1 = getClassIdOf(coverageFileOne, className);
- }
-
- // Compile with coverage the version v2
- {
- toolchain = createJackToolchain();
- File coverageFileTwo = enableCodeCoverage(toolchain, null, null);
- File outDexFolderTwo = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolderTwo, false, testRootDirV2);
- classIdV2 = getClassIdOf(coverageFileTwo, className);
- }
-
- // Compile with coverage the version v2 again
- {
- toolchain = createJackToolchain();
- File coverageFileThree = enableCodeCoverage(toolchain, null, null);
- File outDexFolderThree = AbstractTestTools.createTempDir();
- toolchain.srcToExe(outDexFolderThree, false, testRootDirV2);
- classIdV2_2 = getClassIdOf(coverageFileThree, className);
- }
-
- // We should generate different class IDs when they are different (after shrinking here).
- assertNotEquals("Expected different class IDs", classIdV1, classIdV2);
-
- assertEquals("Expected different class IDs", classIdV2, classIdV2_2);
- }
-
- private static void assertNotEquals(@Nonnull String msg, long expected, long actual) {
- if (expected == actual) {
- StringBuilder stringBuilder = new StringBuilder(msg);
- stringBuilder.append(": expected=");
- stringBuilder.append(Long.toHexString(expected));
- stringBuilder.append(", actual=");
- stringBuilder.append(Long.toHexString(actual));
- Assert.fail(stringBuilder.toString());
- }
- }
-
- private static long getClassIdOf(@Nonnull File coverageFile, @Nonnull String className)
- throws IOException {
- JsonArray classesArray = loadJsonCoverageClasses(coverageFile);
- for (int i = 0, e = classesArray.size(); i < e; ++i) {
- JsonObject classObject = classesArray.get(i).getAsJsonObject();
- String jsonClassName = classObject.get("name").getAsString();
- if (className.equals(jsonClassName)) {
- long id = classObject.get("id").getAsLong();
- return id;
- }
- }
- throw new AssertionError("No class " + className + " in coverage file");
- }
-
- @Nonnull
- private static JsonObject getJsonClass(
- @Nonnull JsonArray jsonClasses, @Nonnull String className) {
- for (JsonElement jsonElement : jsonClasses) {
- JsonObject jsonClass = jsonElement.getAsJsonObject();
- if (jsonClass.get("name").getAsString().equals(className)) {
- return jsonClass;
- }
- }
- throw new AssertionError("No class " + className);
- }
-
- @Nonnull
- private static String getClassNameForJson(@Nonnull String className) {
- return NamingTools.getBinaryName(className);
- }
-
- @Nonnull
- private Collection<? extends String> collectClassNames(@Nonnull JsonArray classes) {
- Set<String> classNames = new HashSet<String>();
- for (JsonElement arrayElt: classes) {
- classNames.add(getClassName(arrayElt.getAsJsonObject()));
- }
- return classNames;
- }
-
- @Nonnull
- private static JackBasedToolchain createJackToolchain() {
- JackBasedToolchain toolchain =
- AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
- return toolchain;
- }
-
- /**
- * Enable code coverage for the given toolchain.
- *
- * @param toolchain the toolchain to configure with code coverage
- * @param includeFilter the 'include' class filter
- * @param excludeFilter the 'exclude' class filter
- * @return the coverage metadata file generated by the compilation
- * @throws Exception if the compilation fails
- */
- private static File enableCodeCoverage(
- @Nonnull JackBasedToolchain toolchain,
- @Nonnull String includeFilter,
- @Nonnull String excludeFilter) throws Exception {
- File coverageMetadataFile = createTempCoverageMetadataFile();
- toolchain.addProperty("jack.coverage", "true");
- toolchain.addProperty(
- "jack.coverage.metadata.file", coverageMetadataFile.getAbsolutePath());
- toolchain.addProperty(
- "jack.coverage.jacoco.package", JACOCO_RUNTIME_PACKAGE);
- if (includeFilter != null) {
- toolchain.addProperty("jack.coverage.jacoco.include", includeFilter);
- }
- if (excludeFilter != null) {
- toolchain.addProperty("jack.coverage.jacoco.exclude", excludeFilter);
- }
- toolchain.addToClasspath(getJacocoAgentLib());
- File pluginFile = getCodeCoveragePluginFile();
- List<File> pluginPath = Collections.singletonList(pluginFile);
- List<String> pluginNames = Collections.singletonList("com.android.jack.coverage.CodeCoverage");
- if (toolchain instanceof JackCliToolchain) {
- JackCliToolchain cliToolchain = (JackCliToolchain) toolchain;
- cliToolchain.setPluginPath(pluginPath);
- cliToolchain.setPluginNames(pluginNames);
- } else {
- // TODO: need to rework API toolchain hierarchy in test framework to avoid these if/else.
- if (toolchain instanceof JackApiV03Toolchain) {
- JackApiV03Toolchain jackApiV03 = (JackApiV03Toolchain) toolchain;
- jackApiV03.setPluginPath(pluginPath);
- jackApiV03.setPluginNames(pluginNames);
- } else if (toolchain instanceof JackApiV04Toolchain) {
- JackApiV04Toolchain jackApiV04 = (JackApiV04Toolchain) toolchain;
- jackApiV04.setPluginPath(pluginPath);
- jackApiV04.setPluginNames(pluginNames);
- } else {
- throw new AssertionError("Unsupported toolchain: " + toolchain.getClass().getName());
- }
- }
- return coverageMetadataFile;
- }
-
- @Nonnull
- private JsonArray compileAndReadJson(@Nonnull String testPackageName)
- throws CannotCreateFileException, CannotChangePermissionException, WrongPermissionException,
- IOException, Exception {
- return compileAndReadJson(testPackageName, null, null);
- }
-
- @Nonnull
- private static File createTempCoverageMetadataFile()
- throws CannotCreateFileException, CannotChangePermissionException {
- return AbstractTestTools.createTempFile("coverage", ".metadata");
- }
-
- private File compileDexWithCoverage(@Nonnull File[] sourceFiles,
- @CheckForNull String includeFilter,
- @CheckForNull String excludeFilter,
- @Nonnull File[] staticLibs) throws Exception {
- File outDexFolder = AbstractTestTools.createTempDir();
- JackBasedToolchain toolchain = createJackToolchain();
- File coverageMetadataFile = enableCodeCoverage(toolchain, includeFilter, excludeFilter);
-
- // Setup classpath.
- toolchain.addStaticLibs(staticLibs);
-
- toolchain.srcToExe(outDexFolder, false, sourceFiles);
-
- return coverageMetadataFile;
- }
-
- @Nonnull
- private JsonArray compileAndReadJson(
- @Nonnull String testPackageName,
- @CheckForNull String includeFilter,
- @CheckForNull String excludeFilter)
- throws CannotCreateFileException, CannotChangePermissionException, WrongPermissionException,
- IOException, Exception {
- File sourceDir = getTestRootDir(testPackageName);
- File coverageMetadataFile = compileDexWithCoverage(new File[]{sourceDir},
- includeFilter, excludeFilter, new File[0]);
-
- return loadJsonCoverageClasses(coverageMetadataFile);
- }
-
- @Nonnull
- private static JsonArray loadJsonCoverageClasses(@Nonnull File coverageMetadataFile)
- throws IOException {
- Assert.assertTrue(coverageMetadataFile.length() > 0);
-
- JsonObject root = loadJson(coverageMetadataFile).getAsJsonObject();
- Assert.assertNotNull(root);
-
- String version = root.get("version").getAsString();
- Assert.assertNotNull(version);
- Assert.assertEquals("1.0", version);
-
- JsonArray classes =
- root.get("data").getAsJsonArray();
- Assert.assertNotNull(classes);
- return classes;
- }
-
- @Nonnull
- private static JsonElement loadJson(@Nonnull File jsonFile) throws IOException {
- JsonParser parser = new JsonParser();
- FileReader reader = new FileReader(jsonFile);
- try {
- return parser.parse(reader);
- } finally {
- reader.close();
- }
- }
-
- @Nonnull
- private static File getJacocoAgentLib() {
- return new File(
- TestsProperties.getJackRootDir(), "jacoco/org.jacoco.agent.rt-0.7.5.201505241946-all.jar");
- }
-
- @Nonnull
- private static File getCodeCoveragePluginFile() {
- return new File(
- TestsProperties.getJackRootDir(), "jack-coverage/dist/jack-coverage-plugin.jar");
- }
-
- @Nonnull
- private String getTestPackageName(@Nonnull String testName) {
- return COVERAGE_TEST_PACKAGE + "." + testName;
- }
-
- /**
- * Workaround AbstractTestTools.getTestRootDir hardcoded for Jack tests only.
- */
- @Nonnull
- private static final File getTestRootDir(@Nonnull String testPackageName) {
- File jackRootDir = TestsProperties.getJackRootDir();
- File jackCoverageDir = new File(jackRootDir, "jack-coverage");
- File jackCoverageTestsDir = new File(jackCoverageDir, "tests");
- return new File(jackCoverageTestsDir, testPackageName.replace('.', File.separatorChar));
- }
-}
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ErrorCode.java b/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ErrorCode.java
deleted file mode 100644
index 0ecb389..0000000
--- a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/ErrorCode.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.android.jack.tools.jacoco;
-
-import javax.annotation.Nonnegative;
-
-/**
- * An enumeration of possible error codes.
- */
-public enum ErrorCode {
- USAGE_ERROR(1),
- INERNAL_ERROR(2);
-
- @Nonnegative
- private final int errorCode;
-
- private ErrorCode(@Nonnegative int errorCode) {
- assert errorCode > 0;
- this.errorCode = errorCode;
- }
-
- @Nonnegative
- public int getErrorCode() {
- return errorCode;
- }
-}
-
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/JackCoverageAnalyzer.java b/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/JackCoverageAnalyzer.java
deleted file mode 100644
index ab6b6f5..0000000
--- a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/JackCoverageAnalyzer.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.tools.jacoco;
-
-import com.google.gson.JsonParseException;
-import com.google.gson.stream.JsonReader;
-
-import org.jacoco.core.analysis.IClassCoverage;
-import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.analysis.ICoverageVisitor;
-import org.jacoco.core.analysis.IMethodCoverage;
-import org.jacoco.core.data.ExecutionData;
-import org.jacoco.core.data.ExecutionDataStore;
-import org.jacoco.core.internal.analysis.ClassCoverageImpl;
-import org.jacoco.core.internal.analysis.CounterImpl;
-import org.jacoco.core.internal.analysis.MethodCoverageImpl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * Code coverage report analyzer.
- */
-public class JackCoverageAnalyzer {
- @Nonnull private static final String CURRENT_VERSION = "1.0";
-
- @Nonnull private static final String JSON_VERSION_ATTRIBUTE = "version";
-
- @Nonnull private static final String JSON_DATA_ATTRIBUTE = "data";
-
- @Nonnull private final ExecutionDataStore executionDataStore;
-
- @Nonnull private final ICoverageVisitor coverageVisitor;
-
- public JackCoverageAnalyzer(
- @Nonnull ExecutionDataStore executionDataStore, @Nonnull ICoverageVisitor coverageVisitor) {
- this.executionDataStore = executionDataStore;
- this.coverageVisitor = coverageVisitor;
- }
-
- /**
- * Reads the coverage description file and report each class to the {@link ICoverageVisitor}.
- *
- * @param jackCoverageDescriptionFile
- * @throws IOException
- */
- public void analyze(@Nonnull File jackCoverageDescriptionFile) throws IOException {
- if (!jackCoverageDescriptionFile.exists()) {
- throw new IllegalArgumentException(
- "File " + jackCoverageDescriptionFile + " does not exist.");
- }
-
- InputStream is = new FileInputStream(jackCoverageDescriptionFile);
- try {
- analyze(is);
- } finally {
- is.close();
- }
- }
-
- private void analyze(@Nonnull InputStream coverageDescriptionInputStream) throws IOException {
- JsonReader jsonReader = new JsonReader(new InputStreamReader(coverageDescriptionInputStream));
- readMetadata(jsonReader);
- }
-
- private void checkVersion(@CheckForNull String version) {
- if (version == null) {
- throw new JsonParseException("Missing 'version' attribute before coverage metadadata");
- }
- String[] parts = version.split(Pattern.quote("."));
- if (parts.length != 2) {
- throw new JsonParseException("Version number format must be x.y");
- }
- if (!version.equals(CURRENT_VERSION)) {
- throw new JsonParseException("Unknown version " + version);
- }
- }
-
- private void readMetadata(@Nonnull JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
-
- String version = null;
- while (jsonReader.hasNext()) {
- String attributeName = jsonReader.nextName();
- if (attributeName.equals(JSON_VERSION_ATTRIBUTE)) {
- // Reads the version so we can parse the JSON accordingly.
- version = jsonReader.nextString();
- } else if (attributeName.equals(JSON_DATA_ATTRIBUTE)) {
- checkVersion(version);
- readClasses(jsonReader);
- } else {
- jsonReader.skipValue();
- }
- }
-
- jsonReader.endObject();
- }
-
- private void readClasses(@Nonnull JsonReader jsonReader) throws IOException {
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- IClassCoverage classCoverage = readClass(jsonReader);
- coverageVisitor.visitCoverage(classCoverage);
- }
- jsonReader.endArray();
- }
-
- @Nonnull
- private IClassCoverage readClass(@Nonnull JsonReader jsonReader) throws IOException {
- long id = 0;
- String className = null;
- String sourceFile = null;
- String superClassName = null;
- List<IMethodCoverage> methods = new ArrayList<IMethodCoverage>();
- List<ProbeDescription> probes = new ArrayList<ProbeDescription>();
- List<String> interfaces = new ArrayList<String>();
-
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String attributeName = jsonReader.nextName();
- if ("id".equals(attributeName)) {
- id = jsonReader.nextLong();
- } else if ("name".equals(attributeName)) {
- className = jsonReader.nextString();
- } else if ("sourceFile".equals(attributeName)) {
- sourceFile = jsonReader.nextString();
- } else if ("superClassName".equals(attributeName)) {
- superClassName = jsonReader.nextString();
- } else if ("interfaces".equals(attributeName)) {
- readInterfaces(jsonReader, interfaces);
- } else if ("methods".equals(attributeName)) {
- readMethods(jsonReader, methods);
- } else if ("probes".equals(attributeName)) {
- readProbes(jsonReader, probes, methods);
- } else {
- throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
- }
- }
- jsonReader.endObject();
-
- final ExecutionData executionData = executionDataStore.get(id);
- boolean noMatch;
- if (executionData != null) {
- noMatch = false;
- // Check there is no id collision.
- executionData.assertCompatibility(id, className, probes.size());
- } else {
- noMatch = executionDataStore.contains(className);
- }
-
- // Build the class coverage.
- String[] interfacesArray = interfaces.toArray(new String[0]);
- ClassCoverageImpl c =
- new ClassCoverageImpl(
- className, id, noMatch, "L" + className + ";", superClassName, interfacesArray);
- c.setSourceFileName(sourceFile);
-
- // Update methods with probes.
- final boolean[] executionProbes = executionData != null ? executionData.getProbes() : null;
- for (ProbeDescription probe : probes) {
- final int probeIndex = probe.id;
- final boolean active = (executionProbes != null && executionProbes[probeIndex]);
- final MethodCoverageImpl methodCoverage = probe.method;
- for (ProbeDescription.Line line : probe.lines) {
- ICounter instructionCounter;
- ICounter branchCounter;
- if (active) {
- instructionCounter = CounterImpl.getInstance(0, line.instructionsCount);
- branchCounter = CounterImpl.getInstance(0, line.branchesCount);
- } else {
- instructionCounter = CounterImpl.getInstance(line.instructionsCount, 0);
- branchCounter = CounterImpl.getInstance(line.branchesCount, 0);
- }
- methodCoverage.increment(instructionCounter, branchCounter, line.line);
- }
- }
-
- // Now methods have been updated with probes, add them to the class coverage.
- for (IMethodCoverage method : methods) {
- c.addMethod(method);
- }
-
- return c;
- }
-
- private void readInterfaces(@Nonnull JsonReader jsonReader, @Nonnull List<String> interfaces)
- throws IOException {
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- interfaces.add(jsonReader.nextString());
- }
- jsonReader.endArray();
- }
-
- // Parses probes.
- private static void readProbes(
- @Nonnull JsonReader jsonReader,
- @Nonnull List<ProbeDescription> probes,
- @Nonnull List<? extends IMethodCoverage> methods)
- throws IOException {
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- probes.add(readProbe(jsonReader, methods));
- }
- jsonReader.endArray();
- }
-
- // Parses one probe.
- private static ProbeDescription readProbe(
- @Nonnull JsonReader jsonReader, @Nonnull List<? extends IMethodCoverage> methods)
- throws IOException {
- ProbeDescription probe = new ProbeDescription();
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String attributeName = jsonReader.nextName();
- if ("id".equals(attributeName)) {
- probe.setId(jsonReader.nextInt());
- } else if ("method".equals(attributeName)) {
- int methodId = jsonReader.nextInt();
- probe.setMethod((MethodCoverageImpl) methods.get(methodId));
- } else if ("lines".equals(attributeName)) {
- readLines(jsonReader, probe);
- } else {
- throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
- }
- }
- jsonReader.endObject();
- return probe;
- }
-
- private static void readLines(@Nonnull JsonReader jsonReader, @Nonnull ProbeDescription probe)
- throws IOException {
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- jsonReader.beginObject();
- int line = -1;
- int instructionsCount = -1;
- int branchesCount = -1;
- while (jsonReader.hasNext()) {
- String attributeName = jsonReader.nextName();
- if ("line".equals(attributeName)) {
- line = jsonReader.nextInt();
- } else if ("insnCount".equals(attributeName)) {
- instructionsCount = jsonReader.nextInt();
- } else if ("branchCount".equals(attributeName)) {
- branchesCount = jsonReader.nextInt();
- } else {
- throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
- }
- }
- probe.addLine(line, instructionsCount, branchesCount);
- jsonReader.endObject();
- }
- jsonReader.endArray();
- }
-
- private static void readMethods(
- @Nonnull JsonReader jsonReader, @Nonnull List<IMethodCoverage> methods) throws IOException {
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- methods.add(readMethod(jsonReader));
- }
- jsonReader.endArray();
- }
-
- @Nonnull
- private static IMethodCoverage readMethod(@Nonnull JsonReader jsonReader) throws IOException {
- int id = -1;
- String name = null;
- String desc = null;
- String signature = null;
-
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String attributeName = jsonReader.nextName();
- if ("id".equals(attributeName)) {
- id = jsonReader.nextInt();
- } else if ("name".equals(attributeName)) {
- name = jsonReader.nextString();
- } else if ("desc".equals(attributeName)) {
- desc = jsonReader.nextString();
- } else if ("signature".equals(attributeName)) {
- signature = jsonReader.nextString();
- } else {
- throw new JsonParseException("Unknown attribute \"" + attributeName + "\"");
- }
- }
- jsonReader.endObject();
-
- return new JackMethodCoverage(id, name, desc, signature);
- }
-}
diff --git a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/Main.java b/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/Main.java
deleted file mode 100644
index 8835bd3..0000000
--- a/jack-jacoco-reporter/src/com/android/jack/tools/jacoco/Main.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.tools.jacoco;
-
-import com.android.sched.util.Version;
-
-import org.jacoco.core.analysis.CoverageBuilder;
-import org.jacoco.core.analysis.IBundleCoverage;
-import org.jacoco.core.tools.ExecFileLoader;
-import org.jacoco.report.DirectorySourceFileLocator;
-import org.jacoco.report.FileMultiReportOutput;
-import org.jacoco.report.IReportVisitor;
-import org.jacoco.report.MultiSourceFileLocator;
-import org.jacoco.report.csv.CSVFormatter;
-import org.jacoco.report.html.HTMLFormatter;
-import org.jacoco.report.xml.XMLFormatter;
-import org.kohsuke.args4j.CmdLineException;
-import org.kohsuke.args4j.CmdLineParser;
-import org.kohsuke.args4j.ParserProperties;
-import org.kohsuke.args4j.spi.OptionHandler;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.annotation.Nonnull;
-
-/**
- * Jack code coverage reporter.
- */
-public class Main {
- public static void main(String[] args) {
- try {
- Options options = parseCommandLine(Arrays.asList(args));
- if (options.askForHelp()) {
- printUsage(System.out);
- } else if (options.askForVersion()) {
- printVersion(System.out);
- } else {
- createReport(options);
- }
- } catch (CmdLineException e) {
- System.err.println(e.getMessage());
- CmdLineParser parser = e.getParser();
- if (parser != null) {
- printUsage(System.err);
- } else {
- System.err.println("Try --help for help.");
- }
- } catch (IOException e) {
- e.printStackTrace(System.err);
- printErrorAndExit(ErrorCode.INERNAL_ERROR, e.getMessage());
- }
- }
-
- private static void printVersion(@Nonnull PrintStream out) {
- try {
- Version version = new Version("jack-jacoco-reporter", Main.class.getClassLoader());
- out.println("Jack Jacoco reporter: " + version.getVerboseVersion());
- } catch (IOException e) {
- throw new AssertionError("Failed to find reporter version", e);
- }
- }
-
- @Nonnull
- private static Options parseCommandLine(@Nonnull List<String> list) throws CmdLineException {
- Options options = new Options();
- CmdLineParser parser =
- new CmdLineParser(options, ParserProperties.defaults().withUsageWidth(100));
- parser.parseArgument(list);
- parser.stopOptionParsing();
- return options;
- }
-
- private static void printUsage(@Nonnull PrintStream printStream) {
- CmdLineParser parser =
- new CmdLineParser(new Options(), ParserProperties.defaults().withUsageWidth(100));
-
- // Prints one line with all required options.
- StringBuilder oneLineUsage = new StringBuilder("Usage:");
- for (OptionHandler<?> optionHandler : parser.getOptions()) {
- if (optionHandler.option.required()) {
- oneLineUsage.append(' ');
- oneLineUsage.append(optionHandler.option.toString());
- oneLineUsage.append(' ');
- oneLineUsage.append(optionHandler.option.metaVar());
- if (optionHandler.option.isMultiValued()) {
- oneLineUsage.append(" ...");
- }
- }
- }
- oneLineUsage.append(" [<options>]");
- printStream.println(oneLineUsage.toString());
-
- // Print all options with their usage.
- printStream.println();
- printStream.println("Options:");
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- parser.printUsage(outputStream);
- printStream.append(outputStream.toString());
- }
-
- private static void createReport(@Nonnull Options options) throws IOException {
- List<File> coverageDescriptionFiles = options.getCoverageDescriptionFiles();
- for (File coverageDescriptionFile : coverageDescriptionFiles) {
- checkFileExists(coverageDescriptionFile);
- checkCanReadFromFile(coverageDescriptionFile);
- }
-
- List<File> coverageExecutionDataFiles = options.getCoverageExecutionFiles();
- for (File coverageExecutionDataFile : coverageExecutionDataFiles) {
- checkFileExists(coverageExecutionDataFile);
- checkCanReadFromFile(coverageExecutionDataFile);
- }
-
- File reportOutputFile = options.getReportOutputDirectory();
- assert reportOutputFile != null;
- checkDirectoryExists(reportOutputFile);
- checkCanWriteToFile(reportOutputFile);
-
- List<File> sourceFilesDirectories = options.getSourceFilesDirectories();
- for (File sourceFilesDirectory : sourceFilesDirectories) {
- checkDirectoryExists(sourceFilesDirectory);
- checkCanReadFromFile(sourceFilesDirectory);
- }
-
- String reportName = options.getReportName();
- ReportType reportType = options.getReportType();
- String outputEncoding = options.getOutputReportEncoding();
-
- // Load coverage execution files.
- ExecFileLoader loader = new ExecFileLoader();
- for (File coverageExecutionDataFile : coverageExecutionDataFiles) {
- loader.load(coverageExecutionDataFile);
- }
-
- // Analyze coverage.
- CoverageBuilder coverageBuilder = new CoverageBuilder();
- JackCoverageAnalyzer analyzer =
- new JackCoverageAnalyzer(loader.getExecutionDataStore(), coverageBuilder);
- for (File coverageDescriptionFile : coverageDescriptionFiles) {
- analyzer.analyze(coverageDescriptionFile);
- }
- IBundleCoverage bundleCoverage = coverageBuilder.getBundle(reportName);
-
- // Create report.
- IReportVisitor visitor = null;
- switch (reportType) {
- case HTML:
- HTMLFormatter htmlFormatter = new HTMLFormatter();
- htmlFormatter.setOutputEncoding(outputEncoding);
- visitor = htmlFormatter.createVisitor(new FileMultiReportOutput(reportOutputFile));
- break;
-
- case XML:
- XMLFormatter xmlFormatter = new XMLFormatter();
- xmlFormatter.setOutputEncoding(outputEncoding);
- File xmlReportFile = new File(reportOutputFile, "report.xml");
- visitor = xmlFormatter.createVisitor(new FileOutputStream(xmlReportFile));
- break;
-
- case CSV:
- CSVFormatter csvFormatter = new CSVFormatter();
- csvFormatter.setOutputEncoding(outputEncoding);
- File csvReportFile = new File(reportOutputFile, "report.csv");
- visitor = csvFormatter.createVisitor(new FileOutputStream(csvReportFile));
- break;
-
- default:
- throw new IllegalArgumentException("Unknown report type");
- }
-
- if (visitor == null) {
- throw new NullPointerException("Report's visitor has not been created");
- }
-
-
- // Initialize the report with all of the execution and session
- // information. At this point the report doesn't know about the
- // structure of the report being created
- visitor.visitInfo(
- loader.getSessionInfoStore().getInfos(), loader.getExecutionDataStore().getContents());
-
- // Populate the report structure with the bundle coverage information.
- // Call visitGroup if you need groups in your report.
- int tabWidth = options.getTabWidth();
- MultiSourceFileLocator sourceFileLocator = new MultiSourceFileLocator(tabWidth);
- final String sourceFilesEncoding = options.getInputSourceFilesEncoding();
- for (File sourceFilesDirectory : sourceFilesDirectories) {
- sourceFileLocator.add(
- new DirectorySourceFileLocator(sourceFilesDirectory, sourceFilesEncoding, tabWidth));
- }
- visitor.visitBundle(bundleCoverage, sourceFileLocator);
-
- // Signal end of structure information to allow report to write all
- // information out
- visitor.visitEnd();
-
- System.out.println("Created report at " + reportOutputFile);
- }
-
- private static void checkFileExists(@Nonnull File file) {
- if (!file.exists()) {
- printErrorAndExit(
- ErrorCode.USAGE_ERROR, MessageFormat.format("File {0} does not exist", file));
- }
- }
-
- private static void checkCanReadFromFile(@Nonnull File file) {
- if (!file.canRead()) {
- printErrorAndExit(
- ErrorCode.USAGE_ERROR, MessageFormat.format("Cannot read from file {0}", file));
- }
- }
-
- private static void checkCanWriteToFile(@Nonnull File file) {
- if (!file.canWrite()) {
- printErrorAndExit(
- ErrorCode.USAGE_ERROR, MessageFormat.format("Cannot write to file {0}", file));
- }
- }
-
- private static void checkDirectoryExists(@Nonnull File file) {
- checkFileExists(file);
- if (!file.isDirectory()) {
- printErrorAndExit(
- ErrorCode.USAGE_ERROR, MessageFormat.format("File {0} is not a directory", file));
- }
- }
-
- private static void printErrorAndExit(@Nonnull ErrorCode error, String msg) {
- System.err.println(msg);
- System.exit(error.getErrorCode());
- }
-}
diff --git a/jack-jar-tools/.classpath b/jack-jar-tools/.classpath
index 4a22221..4838580 100644
--- a/jack-jar-tools/.classpath
+++ b/jack-jar-tools/.classpath
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
<classpathentry kind="lib" path="libs/args4j-lib.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/Scheduler"/>
diff --git a/jack-jar-tools/.settings/org.eclipse.jdt.core.prefs b/jack-jar-tools/.settings/org.eclipse.jdt.core.prefs
index d4b25d9..3b86858 100644
--- a/jack-jar-tools/.settings/org.eclipse.jdt.core.prefs
+++ b/jack-jar-tools/.settings/org.eclipse.jdt.core.prefs
@@ -6,9 +6,9 @@
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -97,7 +97,7 @@
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=disabled
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/jack-jar-tools/build.gradle b/jack-jar-tools/build.gradle
new file mode 100644
index 0000000..7590f27
--- /dev/null
+++ b/jack-jar-tools/build.gradle
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+apply plugin: 'com.github.johnrengelman.shadow'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+apply from: "$rootDir/gradle-script/checkstyle.gradle"
+apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ }
+}
+
+dependencies {
+ compileOnly libs.jsr305
+ compile project(':sched')
+ compile project(':args4j')
+}
+
+apply from: "$rootDir/gradle-script/versionfile.gradle"
+
+jar {
+ classifier 'lib'
+}
+
+shadowJar {
+ dependsOn createJackVersionFile
+ classifier ''
+ manifest {
+ from 'etc/manifest.txt'
+ }
+ from ("${project.buildDir}") {
+ include "jack-jar-tools-version.properties"
+ }
+}
+
+task dist (type: Copy, dependsOn: shadowJar) {
+ from shadowJar.archivePath
+ into file("${rootDir}/gradle-dist/")
+}
diff --git a/jack-samples/jack-transform-plugin/src/main/java/com/android/jack/sample/instrumentation/Instrumenter.java b/jack-samples/jack-transform-plugin/src/main/java/com/android/jack/sample/instrumentation/Instrumenter.java
index 4e88ac5..8e59956 100644
--- a/jack-samples/jack-transform-plugin/src/main/java/com/android/jack/sample/instrumentation/Instrumenter.java
+++ b/jack-samples/jack-transform-plugin/src/main/java/com/android/jack/sample/instrumentation/Instrumenter.java
@@ -19,7 +19,6 @@
import com.android.jack.Jack;
import com.android.jack.ir.ast.*;
import com.android.jack.ir.formatter.BinarySignatureFormatter;
-import com.android.jack.ir.formatter.MethodFormatter;
import com.android.jack.ir.formatter.TypeAndMethodFormatter;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.lookup.CommonTypes;
@@ -94,7 +93,7 @@
* representation.
*/
@Nonnull
- private final JMethodId printlnMethod;
+ private final JMethodId printlnMethodId;
/**
* The constructor used by the scheduler to build an instance of this schedulable (using
@@ -117,7 +116,7 @@
// We look for java.io.PrintStream.println(java.lang.String)
JType javaLangStringClass = lookup.getClass(CommonTypes.JAVA_LANG_STRING);
List<JType> methodArgTypes = Collections.singletonList(javaLangStringClass);
- printlnMethod = javaIoPrintStreamClass.getMethodId("println", methodArgTypes,
+ printlnMethodId = javaIoPrintStreamClass.getMethodId("println", methodArgTypes,
MethodKind.INSTANCE_VIRTUAL, JPrimitiveType.JPrimitiveTypeEnum.VOID.getType());
}
@@ -189,8 +188,7 @@
// "System.out" as receiver. In other words, we create the expression
// "System.out.println(<methodNameString>)".
JMethodCall methodCall = new JMethodCall(sourceInfo, systemOutFieldAccess,
- javaIoPrintStreamClass, printlnMethod.getMethodIdWide(), printlnMethod.getType(),
- true /* virtual method */);
+ javaIoPrintStreamClass, printlnMethodId, true /* virtual method */);
methodCall.addArg(methodNameString);
// The root expression of the statement is the method call.
diff --git a/jack-tests/.classpath b/jack-tests/.classpath
index bd48491..49d610b 100644
--- a/jack-tests/.classpath
+++ b/jack-tests/.classpath
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
- <classpathentry excluding="com/android/jack/annotation/test014/jack/|com/android/jack/annotation/test015/jack/|com/android/jack/annotation/test016/jack/|com/android/jack/annotation/test017/jack/|com/android/jack/classpath/test002/lib1override/|com/android/jack/compiletime/test*/**|com/android/jack/enums/test003/link/Other.java|com/android/jack/enums/test003/link/Values.java|com/android/jack/error/test001/jack/A.java|com/android/jack/error/test002/jack/A.java|com/android/jack/frontend/test002/jack/PackageName/ClassInConflictingPackage.java|com/android/jack/frontend/test005/jack/|com/android/jack/frontend/test006/jack/|com/android/jack/frontend/test007/jack/|com/android/jack/frontend/test007/jackduplicate/|com/android/jack/frontend/test008/jack/NoOuterContext.java|com/android/jack/frontend/test010/jack/UnusedLocalVar.java|com/android/jack/frontend/test013/jack/ExtendingInnerOnly.java|com/android/jack/frontend/test014/jack/ExtendingInnerInStaticContext.java|com/android/jack/frontend/test015/jack/WithOuterContextButStatic.java|com/android/jack/frontend/test016/jack/WithDuplicated.java|com/android/jack/frontend/test017/jack/InvalidQualification.java|com/android/jack/jarjar/test003/dontcompile/|com/android/jack/jarjar/test004/dontcompile/|com/android/jack/java8/annotation/|com/android/jack/java8/defaultmethod/|com/android/jack/java8/gwt/|com/android/jack/java8/inference/|com/android/jack/java8/intersectiontype/|com/android/jack/java8/lambda/|com/android/jack/java8/methodref/|com/android/jack/java8/retrolambda/|com/android/jack/java8/staticmethod/|com/android/jack/java8/variable/|com/android/jack/lookup/test001/liboverride/|com/android/jack/nopackage/test*/**|com/android/jack/optimizations/lambdas/test*/**|com/android/jack/jarjar/test006/dontcompile/|com/android/jack/java8/bridges/|com/android/jack/jill/test001/|com/android/jack/jill/test002/|com/android/jack/jill/test003/|com/android/jack/jill/test004/|com/android/jack/sourcepath/test002/jack/Sourcepath002.java|com/android/jack/annotation/test019/jack/|com/android/jack/frontend/test018/jack/|com/android/jack/annotation/test020/jack/|com/android/jack/assign/test002/jack/|com/android/jack/annotation/processor/sample2/src/|com/android/jack/shrob/test062/jack/Tests.java|com/android/jack/shrob/test062/jack/A.java|com/android/jack/coverage/test006_v1/jack/|com/android/jack/coverage/test006_v2/jack/|com/android/jack/multidex/test004/jack/|com/android/jack/shrob/test066/jack/MySuperInterfaceWithDefaultMethod.java|com/android/jack/shrob/test066/jack/MyClass.java|com/android/jack/shrob/test068/jack/I1.java|com/android/jack/shrob/test068/jack/I2.java|com/android/jack/shrob/test068/jack/I2Impl.java|com/android/jack/shrob/test068/jack/I2ImplImpl.java|com/android/jack/shrob/test068/jack/Kept.java|com/android/jack/shrob/test067/jack/MyInterfaceWithDefaultMethod.java|com/android/jack/shrob/test067/jack/MyClass.java|com/android/jack/shrob/test067/jack/Kept.java|com/android/jack/frontend/generic/test002/jack/|com/android/jack/frontend/generic/test003/jack/" kind="src" path="tests"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry excluding="com/android/jack/annotation/processor/sample2/src/|com/android/jack/annotation/processor/sample2/src/|com/android/jack/annotation/test015/jack/|com/android/jack/annotation/test017/jack/|com/android/jack/assign/test002/|com/android/jack/classpath/test002/lib1override/**|com/android/jack/encoding/tests/**|com/android/jack/enums/test003/link/Other.java|com/android/jack/enums/test003/link/Values.java|com/android/jack/error/test001/jack/A.java|com/android/jack/error/test002/jack/A.java|com/android/jack/frontend/generic/test002/jack/|com/android/jack/frontend/test002/jack/PackageName/ClassInConflictingPackage.java|com/android/jack/frontend/test005/jack/**|com/android/jack/frontend/test006/jack/**|com/android/jack/frontend/test007/jack/|com/android/jack/frontend/test007/jackduplicate/|com/android/jack/frontend/test008/jack/NoOuterContext.java|com/android/jack/frontend/test010/jack/UnusedLocalVar.java|com/android/jack/frontend/test013/jack/ExtendingInnerOnly.java|com/android/jack/frontend/test014/jack/ExtendingInnerInStaticContext.java|com/android/jack/frontend/test015/jack/WithOuterContextButStatic.java|com/android/jack/frontend/test016/jack/WithDuplicated.java|com/android/jack/frontend/test017/jack/InvalidQualification.java|com/android/jack/frontend/test019/jack/TooBig.java|com/android/jack/jarjar/test003/dontcompile/|com/android/jack/jarjar/test006/dontcompile/|com/android/jack/jarjar/test006/dontcompile/|com/android/jack/java8/annotation/test004/|com/android/jack/java8/bridges/test007/|com/android/jack/java8/intersectiontype/test004/|com/android/jack/java8/intersectiontype/test005/|com/android/jack/java8/intersectiontype/test006/|com/android/jack/java8/lambda/test039/|com/android/jack/java8/lambda/test040/|com/android/jack/java8/lambda/test041/|com/android/jack/java8/variable/test001/|com/android/jack/java8/variable/test003/|com/android/jack/jill/test001/**|com/android/jack/jill/test002/**|com/android/jack/jill/test003/**|com/android/jack/jill/test004/**|com/android/jack/jill/test005/**|com/android/jack/lookup/test001/liboverride/|com/android/jack/nopackage/test*/**|com/android/jack/sourcepath/test002/jack/Sourcepath002.java" kind="src" path="tests"/>
<classpathentry kind="lib" path="libs/junit4.jar"/>
<classpathentry kind="lib" path="libs/antlr-runtime-lib.jar"/>
<classpathentry kind="lib" path="libs/dx-ref.jar"/>
diff --git a/jack-tests/.settings/findbugs-include.xml b/jack-tests/.settings/findbugs-include.xml
index f7b706a..c505a63 100644
--- a/jack-tests/.settings/findbugs-include.xml
+++ b/jack-tests/.settings/findbugs-include.xml
@@ -2,4 +2,32 @@
<Match>
<Package name="~com\.android\.jack\.test.*"/>
</Match>
+
+<!-- TODO: move these classes in com.android.jack.test to ease filtering -->
+<Match>
+ <Class name="com.android.jack.annotations.CalledByInvokeCustom"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.Constant"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.LinkerFieldHandle"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.LinkerMethodHandle"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.MethodHandleKind"/>
+</Match>
+
+<Match>
+ <Class name="~com\.android\.jack\.shrob\.AbstractListingComparator.*"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.shrob.ListingComparator"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.shrob.SeedsComparator"/>
+</Match>
+
</FindBugsFilter>
diff --git a/jack-tests/.settings/org.eclipse.jdt.core.prefs b/jack-tests/.settings/org.eclipse.jdt.core.prefs
index eeaca9e..2aa601b 100644
--- a/jack-tests/.settings/org.eclipse.jdt.core.prefs
+++ b/jack-tests/.settings/org.eclipse.jdt.core.prefs
@@ -7,9 +7,9 @@
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -92,7 +92,7 @@
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/jack-tests/README.android b/jack-tests/README.android
index 047e3b5..e3ff195 100644
--- a/jack-tests/README.android
+++ b/jack-tests/README.android
@@ -29,5 +29,8 @@
Original sources can be downloaded from:
http://archive.apache.org/dist/ant/source/apache-ant-1.9.6-src.zip
+* Proguard 5.3.2, as a prebuilt jar for jack-tests
+https://sourceforge.net/projects/proguard/files/proguard/5.3/proguard5.3.2.zip/download
+
diff --git a/jack-tests/build.gradle b/jack-tests/build.gradle
new file mode 100644
index 0000000..5c84b4c
--- /dev/null
+++ b/jack-tests/build.gradle
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+project(':jack-tests') {
+ apply plugin: 'java'
+ apply plugin: 'org.anarres.jarjar'
+
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+
+ apply from: "$rootDir/gradle-script/checkstyle.gradle"
+ apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+ checkstyleMain {
+ source = 'src'
+ }
+
+ findbugs {
+ includeFilter = file("config/findbugs/findbugs-include.xml")
+ }
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = ['src', 'tests']
+ exclude "com/android/jack/annotation/processor/sample2/src/"
+ exclude "com/android/jack/annotation/processor/sample2/src/"
+ exclude "com/android/jack/classpath/test002/lib1override/**"
+ exclude "com/android/jack/encoding/tests/**"
+ exclude "com/android/jack/enums/test003/link/Other.java"
+ exclude "com/android/jack/enums/test003/link/Values.java"
+ exclude "com/android/jack/error/test001/jack/A.java"
+ exclude "com/android/jack/error/test002/jack/A.java"
+ exclude "com/android/jack/frontend/test002/jack/PackageName/ClassInConflictingPackage.java"
+ exclude "com/android/jack/frontend/test005/jack/**"
+ exclude "com/android/jack/frontend/test006/jack/**"
+ exclude "com/android/jack/frontend/test007/jackduplicate/"
+ exclude "com/android/jack/frontend/test008/jack/NoOuterContext.java"
+ exclude "com/android/jack/frontend/test010/jack/UnusedLocalVar.java"
+ exclude "com/android/jack/frontend/test013/jack/ExtendingInnerOnly.java"
+ exclude "com/android/jack/frontend/test014/jack/ExtendingInnerInStaticContext.java"
+ exclude "com/android/jack/frontend/test015/jack/WithOuterContextButStatic.java"
+ exclude "com/android/jack/frontend/test016/jack/WithDuplicated.java"
+ exclude "com/android/jack/frontend/test017/jack/InvalidQualification.java"
+ exclude "com/android/jack/frontend/test019/jack/TooBig.java"
+ exclude "com/android/jack/jarjar/test003/dontcompile/"
+ exclude "com/android/jack/jarjar/test006/dontcompile/"
+ exclude "com/android/jack/jarjar/test006/dontcompile/"
+ exclude "com/android/jack/java8/gwt/test019/jack/Java8Test.java"
+ exclude "com/android/jack/java8/intersectiontype/test004/"
+ exclude "com/android/jack/java8/intersectiontype/test005/"
+ exclude "com/android/jack/java8/intersectiontype/test006/"
+ exclude "com/android/jack/java8/lambda/test019/"
+ exclude "com/android/jack/java8/methodref/test014/jack/Tests.java"
+ exclude "com/android/jack/java8/variable/test001/"
+ exclude "com/android/jack/java8/variable/test003/"
+ exclude "com/android/jack/jill/test001/**"
+ exclude "com/android/jack/jill/test002/**"
+ exclude "com/android/jack/jill/test003/**"
+ exclude "com/android/jack/jill/test004/**"
+ exclude "com/android/jack/jill/test005/**"
+ exclude "com/android/jack/lookup/test001/liboverride/"
+ exclude "com/android/jack/sourcepath/test002/jack/Sourcepath002.java"
+ }
+ }
+
+ // HACK: this way, test library can be built (e.g. for dump) and test can be passed
+ //with gradle command line as well.
+ test {
+ java {
+ srcDirs = sourceSets.main.java.srcDirs
+ excludes = sourceSets.main.java.excludes
+ }
+ }
+ }
+
+ gradle.taskGraph.whenReady { graph ->
+ if (graph.hasTask(check)) {
+ // test needs to specify right test suite to use Jack test runner
+ // this prevents from running tests bound to fail during ' check'
+ test.enabled = false
+ }
+ }
+
+ dependencies {
+
+ compile project(':jill-api')
+ compile project(':jack:jackunittests')
+ compile project(':dx-ref').configurations.archives.artifacts.files
+ compile project(':ddmlib').configurations.archives.artifacts.files
+ compile project(':jack-api')
+ compile project(':sched:schedtests')
+ compile jarjar.repackage ("ecj-tests-lib-jarjar") {
+ from files(project(':ecj-tests-lib').configurations.archives.artifacts.file.path) {
+ builtBy ':ecj-tests-lib:jar'
+ }
+ classRename "org.eclipse.**", "com.android.jack.test.eclipse.@1"
+ }
+ compileOnly libs.jsr305
+ testCompileOnly libs.jsr305
+ }
+}
+
+javadoc.enabled false
+
+project(':jack-tests:test-lib') {
+ apply plugin: 'java'
+
+ configurations {
+ schedBuildDep
+ }
+
+ dependencies {
+ compile project(':jack-tests')
+ compile project(':jack:jackunittests')
+ compile project(':ddmlib').configurations.archives.artifacts.files
+ schedBuildDep project(':sched:sched-ap')
+ }
+
+ task schedBuildJackIntermediate (type: Exec) {
+
+ List<String> inputJars = new ArrayList<String>()
+ inputJars.add(configurations.schedBuildDep.singleFile.getAbsolutePath())
+ configurations.runtime.files.each {
+ File file ->
+ inputJars.add(file.getAbsolutePath())
+ }
+
+ def cmdLine = ['java', '-jar', configurations.schedBuildDep.singleFile]
+ configurations.compile.files.each {
+ File file ->
+ cmdLine << file.getAbsolutePath()
+ }
+ doFirst {
+ file("${project.buildDir}").mkdirs()
+ }
+ cmdLine << new File(project.buildDir, "test-lib-intermediate.jar").toString()
+
+ commandLine cmdLine
+
+ inputs.files(inputJars)
+ outputs.files(file("${project.buildDir}/test-lib-intermediate.jar"))
+ }
+
+ jar {
+ dependsOn schedBuildJackIntermediate
+
+ manifest {
+ from '../etc/manifest.txt'
+ }
+ from ("${rootDir}/jack/rsc") {
+ include 'META-INF/services/**'
+ }
+ from ("${rootDir}/jill/rsc") {
+ include 'META-INF/services/**'
+ }
+ from zipTree("${project.buildDir}/test-lib-intermediate.jar")
+ }
+}
+
+test {
+ systemProperty "tests.config", System.getProperty("tests.config")
+ systemProperty "tests.runtime.tolerant", System.getProperty("tests.runtime.tolerant")
+ systemProperty "file.encoding", System.getProperty("file.encoding")
+ systemProperty "runtime.version", System.getProperty("runtime.version")
+ reports {
+ junitXml.enabled = false
+ html.enabled = true
+ }
+}
+
+def generateTestDumpTasks(taskName, dumpFileName, testSuiteName, classPathFiles) {
+ return tasks.create(name: taskName, type: JavaExec) {
+
+ doFirst {
+ file("gradle-dump").mkdirs()
+ standardOutput new FileOutputStream(file('gradle-dump/' + dumpFileName + '.js'))
+ }
+ def vmArgs = ['-Dfile.encoding=utf-8', '-Dtests.dump=true']
+ if (!System.getProperty("runtime.version", "").equals("")) {
+ vmArgs << "-Druntime.version=" + System.getProperty("runtime.version")
+ }
+ if (!System.getProperty("tests.config", "").equals("")) {
+ vmArgs << "-Dtests.config=" + System.getProperty("tests.config")
+ }
+ main 'com.android.jack.test.junit.JackJUnitLauncher'
+ classpath classPathFiles
+ jvmArgs vmArgs
+ args testSuiteName
+
+ }
+}
+
+generateTestDumpTasks('testJackDump', 'PreSubmitTests', 'com.android.jack.PreSubmitTests', [project(':jack-tests:test-lib').jar.archivePath])
+generateTestDumpTasks('testJackLongDump', 'LongLastingTests', 'com.android.jack.LongLastingTests', [project(':jack-tests:test-lib').jar.archivePath])
+generateTestDumpTasks('testSchedDump', 'SchedAllTests', 'com.android.sched.SchedAllTests', [project(':sched:schedtests').jar.archivePath, project(':jack-tests:test-lib').jar.archivePath])
diff --git a/jack-tests/config/findbugs/findbugs-include.xml b/jack-tests/config/findbugs/findbugs-include.xml
new file mode 100644
index 0000000..ec89019
--- /dev/null
+++ b/jack-tests/config/findbugs/findbugs-include.xml
@@ -0,0 +1,34 @@
+<FindBugsFilter>
+<Match>
+ <Package name="~com\.android\.jack\.test.*"/>
+</Match>
+
+
+<!-- TODO: move these classes in com.android.jack.test to ease filtering -->
+<Match>
+ <Class name="com.android.jack.annotations.CalledByInvokeCustom"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.Constant"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.LinkerFieldHandle"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.LinkerMethodHandle"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.annotations.MethodHandleKind"/>
+</Match>
+
+<Match>
+ <Class name="~com\.android\.jack\.shrob\.AbstractListingComparator.*"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.shrob.ListingComparator"/>
+</Match>
+<Match>
+ <Class name="com.android.jack.shrob.SeedsComparator"/>
+</Match>
+
+</FindBugsFilter>
diff --git a/jack-tests/prebuilts/core-stubs-mini.jack b/jack-tests/prebuilts/core-stubs-mini.jack
index 2f5db0e..698808e 100644
--- a/jack-tests/prebuilts/core-stubs-mini.jack
+++ b/jack-tests/prebuilts/core-stubs-mini.jack
Binary files differ
diff --git a/jack-tests/prebuilts/core-stubs-mini.jar b/jack-tests/prebuilts/core-stubs-mini.jar
index a8638dc..3772849 100644
--- a/jack-tests/prebuilts/core-stubs-mini.jar
+++ b/jack-tests/prebuilts/core-stubs-mini.jar
Binary files differ
diff --git a/jack-tests/prebuilts/ecj-tests-lib.jar b/jack-tests/prebuilts/ecj-tests-lib.jar
index e508f48..f70131d 100644
--- a/jack-tests/prebuilts/ecj-tests-lib.jar
+++ b/jack-tests/prebuilts/ecj-tests-lib.jar
Binary files differ
diff --git a/jack-tests/prebuilts/jack-test-annotations-lib.jack b/jack-tests/prebuilts/jack-test-annotations-lib.jack
index f728d45..2233ca0 100644
--- a/jack-tests/prebuilts/jack-test-annotations-lib.jack
+++ b/jack-tests/prebuilts/jack-test-annotations-lib.jack
Binary files differ
diff --git a/jack-tests/prebuilts/junit4-lib.jack b/jack-tests/prebuilts/junit4-lib.jack
index f718a92..2e8d083 100644
--- a/jack-tests/prebuilts/junit4-lib.jack
+++ b/jack-tests/prebuilts/junit4-lib.jack
Binary files differ
diff --git a/jack-tests/prebuilts/proguard.jar b/jack-tests/prebuilts/proguard.jar
index 56d68ba..bf92108 100644
--- a/jack-tests/prebuilts/proguard.jar
+++ b/jack-tests/prebuilts/proguard.jar
Binary files differ
diff --git a/jack-tests/run-jack-tests-gradle b/jack-tests/run-jack-tests-gradle
new file mode 100755
index 0000000..d66279e
--- /dev/null
+++ b/jack-tests/run-jack-tests-gradle
@@ -0,0 +1,23 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/bin/bash
+
+if [ $# -lt 2 ]
+then
+ echo "Usage: $(basename $0) <tests config file path> <test suite>+"
+ exit 1
+fi
+CURRENT_DIR=$(dirname $0)
+java -Dtests.config=$1 -jar $CURRENT_DIR/test-lib/gradle-build/libs/test-lib.jar $2
diff --git a/jack-tests/src/com/android/jack/test/comparator/ComparatorDex.java b/jack-tests/src/com/android/jack/test/comparator/ComparatorDex.java
index 00f47a1..486ff10 100644
--- a/jack-tests/src/com/android/jack/test/comparator/ComparatorDex.java
+++ b/jack-tests/src/com/android/jack/test/comparator/ComparatorDex.java
@@ -18,9 +18,10 @@
import com.android.jack.comparator.DexComparator;
import com.android.jack.comparator.DifferenceFoundException;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
import java.io.File;
-import java.io.IOException;
import javax.annotation.Nonnull;
@@ -74,7 +75,7 @@
try {
new DexComparator(withDebugInfo, strict, compareDebugInfoBinary, compareInstructionNumber,
instructionNumberTolerance).compare(reference, candidate);
- } catch (IOException e) {
+ } catch (CannotReadException | CannotCloseException e) {
throw new ComparatorException(e);
}
}
diff --git a/jack-tests/src/com/android/jack/test/dex/DexOutputBasedTest.java b/jack-tests/src/com/android/jack/test/dex/DexOutputBasedTest.java
index a031b69..0bd1f33 100644
--- a/jack-tests/src/com/android/jack/test/dex/DexOutputBasedTest.java
+++ b/jack-tests/src/com/android/jack/test/dex/DexOutputBasedTest.java
@@ -17,6 +17,7 @@
package com.android.jack.test.dex;
import com.android.jack.backend.dex.DexFileWriter;
+import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.optimizations.Optimizations;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.toolchain.AbstractTestTools;
@@ -127,6 +128,8 @@
toolchain.addProperty(Optimizations.REMOVE_UNUSED_NON_SYNTHETIC_DEFINITION.getName(),
String.valueOf(false));
+ toolchain.addProperty(CodeItemBuilder.DEX_OPTIMIZE.getName(),
+ String.valueOf(true));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(outFolder, /* zipFile = */false, allTestFolders);
diff --git a/jack-tests/src/com/android/jack/test/helper/CheckDexStructureTestHelper.java b/jack-tests/src/com/android/jack/test/helper/CheckDexStructureTestHelper.java
index 8672f56..a252975 100644
--- a/jack-tests/src/com/android/jack/test/helper/CheckDexStructureTestHelper.java
+++ b/jack-tests/src/com/android/jack/test/helper/CheckDexStructureTestHelper.java
@@ -77,7 +77,7 @@
}
public void compare() throws Exception {
- runTest(createDexFileComparator().setWithDebugInfo(withDebugInfos));
+ runTest(createDexFileComparatorWithAnnotations());
}
}
diff --git a/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java b/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java
index 5be494c..6265f65 100644
--- a/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java
+++ b/jack-tests/src/com/android/jack/test/helper/IncrementalTestHelper.java
@@ -244,7 +244,7 @@
@Nonnull
public void run(@Nonnull String mainClass, @Nonnull String expected) throws Exception {
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
((AbstractRuntimeRunner) runner).setOutputStream(out);
diff --git a/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java b/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java
index be2c84a..21c166f 100644
--- a/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java
+++ b/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java
@@ -31,6 +31,8 @@
import junit.framework.Assert;
+import org.junit.Assume;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -65,6 +67,9 @@
private SourceLevel level = SourceLevel.JAVA_6;
+ @CheckForNull
+ private String minApiLevel = null;
+
@Nonnull
private List<FileChecker> fileCheckers = new ArrayList<FileChecker>(0);
@@ -102,6 +107,12 @@
}
@Nonnull
+ public RuntimeTestHelper setAndroidMinApiLevel(@Nonnull String minApiLevel) {
+ this.minApiLevel = minApiLevel;
+ return this;
+ }
+
+ @Nonnull
public RuntimeTestHelper addProperty(@Nonnull String key, @Nonnull String value) {
String oldValue = runtimeProperties.get(key);
if (oldValue != null && !oldValue.equals(value)) {
@@ -308,12 +319,16 @@
}
@Nonnull
- private AndroidToolchain createCandidateToolchain() {
+ private AndroidToolchain createCandidateToolchain() throws Exception {
AndroidToolchain candidateTestTools =
AbstractTestTools.getCandidateToolchain(AndroidToolchain.class, ignoredCandidateToolchains);
candidateTestTools.setSourceLevel(level);
+ if (minApiLevel != null) {
+ candidateTestTools.setAndroidMinApiLevel(minApiLevel);
+ }
candidateTestTools.setWithDebugInfos(withDebugInfos);
- if (!runtimeProperties.isEmpty() && candidateTestTools instanceof JackBasedToolchain) {
+ if (!runtimeProperties.isEmpty()) {
+ Assume.assumeTrue(candidateTestTools instanceof JackBasedToolchain);
// if the tool chain is type of JackBasedToolchain and the customized properties are set,
// configure the runtime testing properties
JackBasedToolchain jackBasedToolchain = (JackBasedToolchain) candidateTestTools;
@@ -325,10 +340,13 @@
}
@Nonnull
- private AndroidToolchain createReferenceToolchain() {
+ private AndroidToolchain createReferenceToolchain() throws Exception {
AndroidToolchain referenceTestTools =
AbstractTestTools.getReferenceToolchain(AndroidToolchain.class);
referenceTestTools.setSourceLevel(level);
+ if (minApiLevel != null) {
+ referenceTestTools.setAndroidMinApiLevel(minApiLevel);
+ }
referenceTestTools.setWithDebugInfos(withDebugInfos);
if (!runtimeProperties.isEmpty() && referenceTestTools instanceof JackBasedToolchain) {
// if the tool chain is type of JackBasedToolchain and the customized properties are set,
diff --git a/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java b/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java
index e8d7f7e..3ec1c64 100644
--- a/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java
+++ b/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java
@@ -16,7 +16,10 @@
package com.android.jack.test.helper;
+import com.android.jack.test.comparator.Comparator;
+import com.android.jack.test.comparator.ComparatorComposite;
import com.android.jack.test.comparator.ComparatorDex;
+import com.android.jack.test.comparator.ComparatorDexAnnotations;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.AndroidToolchain;
import com.android.jack.test.toolchain.Toolchain.SourceLevel;
@@ -156,6 +159,12 @@
}
@Nonnull
+ public Comparator createDexFileComparatorWithAnnotations() {
+ return new ComparatorComposite(createDexFileComparator(),
+ new ComparatorDexAnnotations(refDex, candidateDex));
+ }
+
+ @Nonnull
public SourceToDexComparisonTestHelper setJarjarRulesFile(@Nonnull File jarjarRulesFile) {
this.jarjarRulesFile = jarjarRulesFile;
return this;
diff --git a/jack-tests/src/com/android/jack/test/junit/JackJUnitLauncher.java b/jack-tests/src/com/android/jack/test/junit/JackJUnitLauncher.java
index a4c4853..4f3d97a 100644
--- a/jack-tests/src/com/android/jack/test/junit/JackJUnitLauncher.java
+++ b/jack-tests/src/com/android/jack/test/junit/JackJUnitLauncher.java
@@ -21,6 +21,7 @@
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
import java.util.ArrayList;
import java.util.List;
@@ -104,6 +105,9 @@
for (Request req : requests) {
Result result = core.run(req);
failureCount += result.getFailureCount();
+ for (Failure f : result.getFailures()) {
+ f.getException().printStackTrace();
+ }
}
if (dumpTests) {
diff --git a/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java b/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java
index cad02ab..8249925 100644
--- a/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java
+++ b/jack-tests/src/com/android/jack/test/junit/JackTestRunner.java
@@ -69,58 +69,63 @@
@Override
public boolean shouldRun(@Nonnull Description description) {
- boolean shouldRun = false;
+ boolean knownIssue = false;
+ boolean notApplicable = false;
KnownIssue knownIssueAnnot = description.getAnnotation(KnownIssue.class);
Runtime runtimeAnnot = description.getAnnotation(Runtime.class);
// Special case of ecj tests that use JUnit3
- boolean ecjTestEligibleToRun = false;
boolean isEcjTestPostM = false;
if (description.getClassName().contains("Ecj")) {
isEcjTestPostM =
(description.getClassName().contains("PostM"))
|| description.getClassName().contains("EcjInterfaceMethodsTest");
- shouldRun =
- // Otherwise method of class aren't scanned and dump won't work
- (dumpTests && description.getMethodName() == null)
- || (isEcjTestPostM && runtimeVersion.compareTo(RuntimeVersion.N) >= 0);
+
+ notApplicable = isEcjTestPostM && runtimeVersion.compareTo(RuntimeVersion.N) < 0;
+
} else {
// General case
- if (runtimeAnnot == null
- || runtimeAnnot.from().compareTo(runtimeVersion) <= 0) {
- if (knownIssueAnnot == null) {
- shouldRun = true;
- } else {
- shouldRun =
- (knownIssueAnnot.candidate().length > 0 || knownIssueAnnot.reference().length > 0)
- && (isValidToolchain(candidate, knownIssueAnnot.candidate())
- && isValidToolchain(reference, knownIssueAnnot.reference()));
- }
- }
+ knownIssue = (knownIssueAnnot != null)
+ && ((knownIssueAnnot.candidate().length == 0)
+ || !isValidToolchain(candidate, knownIssueAnnot.candidate())
+ && (knownIssueAnnot.reference().length == 0
+ || !isValidToolchain(reference, knownIssueAnnot.reference())));
+
+ notApplicable = runtimeAnnot != null && runtimeAnnot.from().compareTo(runtimeVersion) > 0;
}
- if (dumpTests && description.getMethodName() != null) {
- System.out.println(
- " \"" + description.getClassName() + '#' + description.getMethodName() + "\": {");
- System.out.print(" \"ignored\":" + !shouldRun);
- if (runtimeAnnot != null) {
- System.out.println(",");
+ if (dumpTests) {
+ if (description.getMethodName() != null) {
System.out.println(
- " \"runtimePostM\":"
- + (runtimeAnnot.from().ordinal() > RuntimeVersion.M.ordinal()));
- } else if (description.getClassName().contains("Ecj")) {
- // Special case for Ecj tests that use JUnit3
- System.out.println(",");
- System.out.println(" \"runtimePostM\":" + isEcjTestPostM);
+ " \"" + description.getClassName() + '#' + description.getMethodName() + "\": {");
+ System.out.println(" \"notApplicable\":" + notApplicable + ',');
+ System.out.print(" \"knownIssue\":" + knownIssue);
+ if (runtimeAnnot != null) {
+ System.out.println(",");
+ System.out.println(
+ " \"runtimePostM\":"
+ + (runtimeAnnot.from().ordinal() > RuntimeVersion.M.ordinal()));
+ } else if (description.getClassName().contains("Ecj")) {
+ // Special case for Ecj tests that use JUnit3
+ System.out.println(",");
+ System.out.println(" \"runtimePostM\":" + isEcjTestPostM);
+ } else {
+ System.out.println();
+ }
+ System.out.println(" },");
+
+ // Don't run test, dump only
+ return false;
+
} else {
- System.out.println();
+
+ // Visit types
+ return true;
}
- System.out.println(" },");
- return false;
}
- return shouldRun;
+ return !knownIssue && !notApplicable;
}
private boolean isValidToolchain(
diff --git a/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java b/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java
index 7a087bb..ba7955c 100644
--- a/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java
+++ b/jack-tests/src/com/android/jack/test/runner/DeviceRunner.java
@@ -188,176 +188,186 @@
}
int exitStatus = -1;
+ List<String> failingDevices = new ArrayList<>(0);
for (IDevice device : connectedDevices) {
- checkDeviceRuntime(device);
-
- if (isVerbose) {
- System.out.println("Running on device: " + device.getName());
- }
-
- ensureAdbRoot(device);
-
- //Remove trailing '\n' returned by emulator
- File testsRootDirFile =
- new File(device.getMountPoint(IDevice.MNT_DATA).replace("\n", ""), "jack-tests");
- String testsRootDir = convertToTargetPath(testsRootDirFile);
-
- String testScriptPathOnTarget =
- convertToTargetPath(new File(testsRootDirFile, "TEST_SCRIPT_NAME"));
-
- String[] desFilePaths = new String[classpathFiles.length];
try {
- if (isVerbose) {
- System.out.println("adb shell -s " + device.getSerialNumber() + " mkdir "
- + testsRootDir);
- }
- device.executeShellCommand("mkdir " + testsRootDir, hostOutput);
+
+ checkDeviceRuntime(device);
if (isVerbose) {
- System.out.println("adb shell -s " + device.getSerialNumber() + " rm "
- + testsRootDir + FileListingService.FILE_SEPARATOR + "*");
+ System.out.println("Running on device: " + device.getName());
}
- device.executeShellCommand("rm " + testsRootDir + FileListingService.FILE_SEPARATOR + "*",
- hostOutput);
- if (isVerbose) {
- System.out.println("adb -s " + device.getSerialNumber() + " push "
- + TEST_SCRIPT_FILE.getAbsolutePath() + " "
- + testScriptPathOnTarget);
- }
- device.pushFile(TEST_SCRIPT_FILE.getAbsolutePath(),
- testScriptPathOnTarget);
+ ensureAdbRoot(device);
- if (isVerbose) {
- System.out.println("adb -s " + device.getSerialNumber() + " shell chmod 777 "
- + testScriptPathOnTarget);
- }
- device.executeShellCommand(
- "chmod 777 " + testScriptPathOnTarget, hostOutput);
+ //Remove trailing '\n' returned by emulator
+ File testsRootDirFile =
+ new File(device.getMountPoint(IDevice.MNT_DATA).replace("\n", ""), "jack-tests");
+ String testsRootDir = convertToTargetPath(testsRootDirFile);
- int i = 0;
- for (File f : classpathFiles) {
- desFilePaths[i] =
- convertToTargetPath(new File(testsRootDirFile, "f" + i + "_" + f.getName()));
+ String testScriptPathOnTarget =
+ convertToTargetPath(new File(testsRootDirFile, "TEST_SCRIPT_NAME"));
+
+ String[] desFilePaths = new String[classpathFiles.length];
+ try {
+ if (isVerbose) {
+ System.out.println("adb shell -s " + device.getSerialNumber() + " mkdir "
+ + testsRootDir);
+ }
+ device.executeShellCommand("mkdir " + testsRootDir, hostOutput);
if (isVerbose) {
- System.out.println("adb -s " + device.getSerialNumber() + " push "
- + f.getAbsolutePath() + " " + desFilePaths[i]);
+ System.out.println("adb shell -s " + device.getSerialNumber() + " rm "
+ + testsRootDir + FileListingService.FILE_SEPARATOR + "*");
}
- device.pushFile(f.getAbsolutePath(), desFilePaths[i]);
- i++;
- }
- } catch (TimeoutException e) {
- throw new RuntimeRunnerException(e);
- } catch (AdbCommandRejectedException e) {
- throw new RuntimeRunnerException(e);
- } catch (ShellCommandUnresponsiveException e) {
- throw new RuntimeRunnerException(e);
- } catch (IOException e) {
- throw new RuntimeRunnerException(e);
- } catch (SyncException e) {
- throw new RuntimeRunnerException(e);
- }
+ device.executeShellCommand("rm " + testsRootDir + FileListingService.FILE_SEPARATOR + "*",
+ hostOutput);
- // Split command line to have at most MAX_NB_CLASSES jUnit classes per invocation
- List<List<String>> splittedMainClasses = new ArrayList<List<String>>();
- int currentChunk = 0;
- for (String classToRun : classes) {
- if (splittedMainClasses.size() == currentChunk) {
- splittedMainClasses.add(new ArrayList<String>(MAX_NB_CLASSES));
- if (jUnitRunnerName != null) {
- splittedMainClasses.get(currentChunk).add(jUnitRunnerName);
- }
- }
-
- splittedMainClasses.get(currentChunk).add(classToRun);
-
- if (splittedMainClasses.get(currentChunk).size() == MAX_NB_CLASSES) {
- currentChunk++;
- }
- }
- List<String> cmdLines = new ArrayList<String>(splittedMainClasses.size());
- File rootDir = new File(device.getMountPoint(IDevice.MNT_ROOT).replace("\n", ""));
- for (List<String> classList : splittedMainClasses) {
- cmdLines.add(Joiner.on(' ').join(buildCommandLine(rootDir, options,
- classList.toArray(new String[classList.size()]), desFilePaths)));
- }
-
- try {
- // Bug : exit code return by adb shell is wrong (always 0)
- // https://code.google.com/p/android/issues/detail?id=3254
- // Use go team hack to work this around
- // https://code.google.com/p/go/source/browse/misc/arm/a
-
- for (String args : cmdLines) {
if (isVerbose) {
- System.out.println("adb -s " + device.getSerialNumber() + " shell "
- + testScriptPathOnTarget + ' ' + args);
+ System.out.println("adb -s " + device.getSerialNumber() + " push "
+ + TEST_SCRIPT_FILE.getAbsolutePath() + " "
+ + testScriptPathOnTarget);
+ }
+ device.pushFile(TEST_SCRIPT_FILE.getAbsolutePath(),
+ testScriptPathOnTarget);
+
+ if (isVerbose) {
+ System.out.println("adb -s " + device.getSerialNumber() + " shell chmod 777 "
+ + testScriptPathOnTarget);
}
device.executeShellCommand(
- testScriptPathOnTarget + ' ' + args,
- new MyShellOuputReceiver(outRedirectStream, errRedirectStream),
- /* maxTimeToOutputResponse = */ 10000);
+ "chmod 777 " + testScriptPathOnTarget, hostOutput);
- File exitStatusFile = AbstractTestTools.createTempFile("exitStatus", "");
- if (isVerbose) {
- System.out.println("adb -s " + device.getSerialNumber() + " pull "
- + testsRootDir + "/exitStatus "
- + exitStatusFile.getAbsolutePath());
- }
- device.pullFile(testsRootDir + "/exitStatus",
- exitStatusFile.getAbsolutePath());
+ int i = 0;
+ for (File f : classpathFiles) {
+ desFilePaths[i] =
+ convertToTargetPath(new File(testsRootDirFile, "f" + i + "_" + f.getName()));
- BufferedReader br = new BufferedReader(new FileReader(exitStatusFile));
- try {
- String readLine = br.readLine();
- if (readLine == null) {
- throw new RuntimeRunnerException("Exit status not found");
- }
- exitStatus = Integer.parseInt(readLine);
- } finally {
- br.close();
- }
-
- if (isVerbose) {
- System.out.println("Exit status: " + exitStatus);
- }
-
- if (exitStatus != 0) {
- System.err.println("Execution failed on device '" + device.getName() + "'");
- break;
- }
- }
- } catch (TimeoutException e) {
- throw new RuntimeRunnerException(e);
- } catch (AdbCommandRejectedException e) {
- throw new RuntimeRunnerException(e);
- } catch (ShellCommandUnresponsiveException e) {
- throw new RuntimeRunnerException(e);
- } catch (CannotChangePermissionException | CannotCreateFileException | IOException e) {
- throw new RuntimeRunnerException(e);
- } catch (SyncException e) {
- throw new RuntimeRunnerException(e);
- } finally {
- try {
- for (String pushedFile : desFilePaths) {
if (isVerbose) {
- System.out.println(
- "adb -s " + device.getSerialNumber() + " rm " + pushedFile);
+ System.out.println("adb -s " + device.getSerialNumber() + " push "
+ + f.getAbsolutePath() + " " + desFilePaths[i]);
}
- device.executeShellCommand("rm " + pushedFile, hostOutput);
+ device.pushFile(f.getAbsolutePath(), desFilePaths[i]);
+ i++;
}
- } catch (IOException e) {
- throw new RuntimeRunnerException(e);
- } catch (TimeoutException e) {
- throw new RuntimeRunnerException(e);
- } catch (AdbCommandRejectedException e) {
- throw new RuntimeRunnerException(e);
- } catch (ShellCommandUnresponsiveException e) {
+ } catch (TimeoutException
+ | AdbCommandRejectedException
+ | ShellCommandUnresponsiveException
+ | IOException
+ | SyncException e) {
throw new RuntimeRunnerException(e);
}
+
+ // Split command line to have at most MAX_NB_CLASSES jUnit classes per invocation
+ List<List<String>> splittedMainClasses = new ArrayList<List<String>>();
+ int currentChunk = 0;
+ for (String classToRun : classes) {
+ if (splittedMainClasses.size() == currentChunk) {
+ splittedMainClasses.add(new ArrayList<String>(MAX_NB_CLASSES));
+ if (jUnitRunnerName != null) {
+ splittedMainClasses.get(currentChunk).add(jUnitRunnerName);
+ }
+ }
+
+ splittedMainClasses.get(currentChunk).add(classToRun);
+
+ if (splittedMainClasses.get(currentChunk).size() == MAX_NB_CLASSES) {
+ currentChunk++;
+ }
+ }
+ List<String> cmdLines = new ArrayList<String>(splittedMainClasses.size());
+ File rootDir = new File(device.getMountPoint(IDevice.MNT_ROOT).replace("\n", ""));
+ for (List<String> classList : splittedMainClasses) {
+ cmdLines.add(Joiner.on(' ').join(buildCommandLine(rootDir, options,
+ classList.toArray(new String[classList.size()]), desFilePaths)));
+ }
+
+ try {
+ // Bug : exit code return by adb shell is wrong (always 0)
+ // https://code.google.com/p/android/issues/detail?id=3254
+ // Use go team hack to work this around
+ // https://code.google.com/p/go/source/browse/misc/arm/a
+
+ for (String args : cmdLines) {
+ if (isVerbose) {
+ System.out.println("adb -s " + device.getSerialNumber() + " shell "
+ + testScriptPathOnTarget + ' ' + args);
+ }
+ device.executeShellCommand(
+ testScriptPathOnTarget + ' ' + args,
+ new MyShellOuputReceiver(outRedirectStream, errRedirectStream),
+ /* maxTimeToOutputResponse = */ 10000);
+
+ File exitStatusFile = AbstractTestTools.createTempFile("exitStatus", "");
+ if (isVerbose) {
+ System.out.println("adb -s " + device.getSerialNumber() + " pull "
+ + testsRootDir + "/exitStatus "
+ + exitStatusFile.getAbsolutePath());
+ }
+ device.pullFile(testsRootDir + "/exitStatus",
+ exitStatusFile.getAbsolutePath());
+
+ BufferedReader br = new BufferedReader(new FileReader(exitStatusFile));
+ try {
+ String readLine = br.readLine();
+ if (readLine == null) {
+ throw new RuntimeRunnerException("Exit status not found");
+ }
+ exitStatus = Integer.parseInt(readLine);
+ } finally {
+ br.close();
+ }
+
+ if (isVerbose) {
+ System.out.println("Exit status: " + exitStatus);
+ }
+
+ if (exitStatus != 0) {
+ System.err.println("Execution failed on device '" + device.getName() + "'");
+ break;
+ }
+ }
+ } catch (TimeoutException
+ | AdbCommandRejectedException
+ | ShellCommandUnresponsiveException
+ | CannotChangePermissionException
+ | CannotCreateFileException
+ | IOException
+ | SyncException e) {
+ throw new RuntimeRunnerException(e);
+ } finally {
+ try {
+ for (String pushedFile : desFilePaths) {
+ if (isVerbose) {
+ System.out.println(
+ "adb -s " + device.getSerialNumber() + " rm " + pushedFile);
+ }
+ device.executeShellCommand("rm " + pushedFile, hostOutput);
+ }
+ } catch (IOException
+ | TimeoutException
+ | AdbCommandRejectedException
+ | ShellCommandUnresponsiveException e) {
+ throw new RuntimeRunnerException(e);
+ }
+ }
+
+ } catch (RuntimeRunnerException e) {
+ System.err.println("Error with device '" + device.getName() + "': " + e.getMessage());
+ failingDevices.add(device.getName());
}
+
+ }
+
+ if (failingDevices.size() > 0) {
+ String device = failingDevices.size() == 1 ? "device" : "devices";
+ throw new RuntimeRunnerException(
+ "Error with "
+ + device
+ + ": "
+ + Joiner.on(',').join(failingDevices)
+ + ". See log for details");
}
return exitStatus;
diff --git a/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java b/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java
index f16a330..f8dfe2f 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/AbstractTestTools.java
@@ -34,6 +34,7 @@
import com.android.sched.util.file.CannotChangePermissionException;
import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.util.file.CannotDeleteFileException;
import com.android.sched.util.file.CannotReadException;
import com.android.sched.util.file.CannotWriteException;
import com.android.sched.util.file.Files;
@@ -98,7 +99,7 @@
@Nonnull
private static final String TOOLCHAIN_PREBUILT_PREFIX = "toolchain.prebuilt.";
@Nonnull
- private static final String TMP_PREFIX = "jacktest-";
+ private static final String TMP_PREFIX = "test-jack-";
@Nonnull
private static final String LEGACY_COMPILER_KEY = "toolchain.prebuilt.legacy-java-compiler";
@Nonnull
@@ -434,7 +435,7 @@
try {
deleteTempDir(tmpDir);
} catch (IOException e) {
- System.err.println(e.getMessage());
+ throw new RuntimeException(new CannotDeleteFileException(new FileLocation(tmpDir)));
}
}
});
@@ -838,6 +839,12 @@
}
@Nonnull
+ public static List<RuntimeRunner> listRuntimeTestRunners()
+ throws SecurityException, IllegalArgumentException, RuntimeRunnerException {
+ return listRuntimeTestRunners(/*properties = */ null);
+ }
+
+ @Nonnull
public static List<RuntimeRunner> listRuntimeTestRunners(@CheckForNull Properties properties)
throws SecurityException, IllegalArgumentException, RuntimeRunnerException {
@@ -855,8 +862,6 @@
}
}
- assert runtimes != null;
-
if (properties != null) {
String rtAsString = properties.getProperty(RUNTIME_LIST_KEY);
if (rtAsString != null) {
@@ -864,6 +869,7 @@
}
}
+ assert runtimes != null; // Make FindBugs happy
if (runtimes.size() == 0) {
if (Boolean.parseBoolean(System.getProperty(RUNTIME_TOLERANT, "false"))) {
if (!hasRuntimeWarningBeenEmitted) {
@@ -877,6 +883,7 @@
}
}
+ assert runtimes != null; // Make FindBugs happy
return runtimes;
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/AndroidToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/AndroidToolchain.java
index bf7ece7..9ff4f92 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/AndroidToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/AndroidToolchain.java
@@ -40,4 +40,7 @@
@Nonnull
public abstract AndroidToolchain enableDxOptimizations();
+ @Nonnull
+ public abstract AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel)
+ throws Exception;
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/DummyToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/DummyToolchain.java
index 27c3135..6b20d35 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/DummyToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/DummyToolchain.java
@@ -77,4 +77,11 @@
public String getLibraryElementsExtension() {
return ".dummy";
}
+
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) {
+ // Do nothing
+ return this;
+ }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/EmbeddedJillBasedToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/EmbeddedJillBasedToolchain.java
index d99c85f..e2c679c 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/EmbeddedJillBasedToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/EmbeddedJillBasedToolchain.java
@@ -240,6 +240,8 @@
commandLine.add("-g");
}
+ commandLine.add("-parameters");
+
commandLine.add("-d");
commandLine.add(out.getAbsolutePath());
diff --git a/jack-tests/src/com/android/jack/test/toolchain/IncrementalToolchainUtils.java b/jack-tests/src/com/android/jack/test/toolchain/IncrementalToolchainUtils.java
new file mode 100644
index 0000000..76aa0db
--- /dev/null
+++ b/jack-tests/src/com/android/jack/test/toolchain/IncrementalToolchainUtils.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.test.toolchain;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.attribute.FileTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+/**
+ * Utilities methods for incremental toolchains
+ */
+class IncrementalToolchainUtils {
+
+ @CheckForNull
+ private static File getFileToTouch(@Nonnull File... sources) throws Exception {
+ List<File> files = new ArrayList<File>();
+ for (File source : sources) {
+ AbstractTestTools.getJavaFiles(source, files, /* mustExist = */ false);
+ }
+ if (files.size() > 0) {
+ return files.get(files.size() / 2);
+ }
+ return null;
+ }
+
+ public static void touchSourceFile(@Nonnull File... sources) throws Exception {
+
+ File fileToTouch = getFileToTouch(sources);
+
+ if (fileToTouch != null) {
+
+ FileTime fileTime = Files.getLastModifiedTime(fileToTouch.toPath());
+
+ Files.setLastModifiedTime(
+ fileToTouch.toPath(), FileTime.fromMillis(System.currentTimeMillis()));
+
+ if (Files.getLastModifiedTime(fileToTouch.toPath()).equals(fileTime)) {
+ Thread.sleep(1000);
+ Files.setLastModifiedTime(
+ fileToTouch.toPath(), FileTime.fromMillis(System.currentTimeMillis()));
+ }
+
+ assert !fileTime.equals(Files.getLastModifiedTime(fileToTouch.toPath()));
+ }
+ }
+
+}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
index 8b7ccb6..3a4d688 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
@@ -274,4 +274,10 @@
}
}
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) throws Exception {
+ apiV01Config.setProperty(Options.ANDROID_MIN_API_LEVEL.getName(), minApiLevel);
+ return this;
+ }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV02IncrementalToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV02IncrementalToolchain.java
index 044599b..52f4578 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV02IncrementalToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV02IncrementalToolchain.java
@@ -17,8 +17,6 @@
package com.android.jack.test.toolchain;
import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -40,8 +38,7 @@
throws Exception {
setIncrementalFolder(AbstractTestTools.createTempDir());
super.srcToExe(out, zipFile, sources);
- Thread.sleep(1000);
- touchSourceFile(sources);
+ IncrementalToolchainUtils.touchSourceFile(sources);
super.srcToExe(out, zipFile, sources);
}
@@ -50,22 +47,8 @@
throws Exception {
setIncrementalFolder(AbstractTestTools.createTempDir());
super.srcToLib(out, zipFiles, sources);
- Thread.sleep(1000);
- touchSourceFile(sources);
+ IncrementalToolchainUtils.touchSourceFile(sources);
super.srcToLib(out, zipFiles, sources);
}
- private void touchSourceFile(@Nonnull File... sources) throws Exception {
- List<File> files = new ArrayList<File>();
- for (File source : sources) {
- AbstractTestTools.getJavaFiles(source, files, /* mustExist = */ false);
- }
- if (files.size() > 0) {
- File fileToTouch = files.get(files.size() / 2);
- if (!fileToTouch.setLastModified(System.currentTimeMillis())) {
- throw new AssertionError("Could not touch file '" + fileToTouch.getPath() + "'");
- }
- }
- }
-
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java
index 51fab1c..b41a308 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV02Toolchain.java
@@ -287,4 +287,10 @@
}
}
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) throws Exception {
+ apiV02Config.setProperty(Options.ANDROID_MIN_API_LEVEL.getName(), minApiLevel);
+ return this;
+ }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV03IncrementalToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV03IncrementalToolchain.java
index c67499c..58cad90 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV03IncrementalToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV03IncrementalToolchain.java
@@ -17,8 +17,6 @@
package com.android.jack.test.toolchain;
import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -40,8 +38,7 @@
throws Exception {
setIncrementalFolder(AbstractTestTools.createTempDir());
super.srcToExe(out, zipFile, sources);
- Thread.sleep(1000);
- touchSourceFile(sources);
+ IncrementalToolchainUtils.touchSourceFile(sources);
super.srcToExe(out, zipFile, sources);
}
@@ -50,22 +47,9 @@
throws Exception {
setIncrementalFolder(AbstractTestTools.createTempDir());
super.srcToLib(out, zipFiles, sources);
- Thread.sleep(1000);
- touchSourceFile(sources);
+ IncrementalToolchainUtils.touchSourceFile(sources);
super.srcToLib(out, zipFiles, sources);
}
- private void touchSourceFile(@Nonnull File... sources) throws Exception {
- List<File> files = new ArrayList<File>();
- for (File source : sources) {
- AbstractTestTools.getJavaFiles(source, files, /* mustExist = */ false);
- }
- if (files.size() > 0) {
- File fileToTouch = files.get(files.size() / 2);
- if (!fileToTouch.setLastModified(System.currentTimeMillis())) {
- throw new AssertionError("Could not touch file '" + fileToTouch.getPath() + "'");
- }
- }
- }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV03Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV03Toolchain.java
index 765c108..7a754f1 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV03Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV03Toolchain.java
@@ -308,4 +308,10 @@
return this;
}
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) throws Exception {
+ apiV03Config.setProperty(Options.ANDROID_MIN_API_LEVEL.getName(), minApiLevel);
+ return this;
+ }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV04IncrementalToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV04IncrementalToolchain.java
index 6327293..c74b2f8 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV04IncrementalToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV04IncrementalToolchain.java
@@ -17,8 +17,6 @@
package com.android.jack.test.toolchain;
import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -40,8 +38,7 @@
throws Exception {
setIncrementalFolder(AbstractTestTools.createTempDir());
super.srcToExe(out, zipFile, sources);
- Thread.sleep(1000);
- touchSourceFile(sources);
+ IncrementalToolchainUtils.touchSourceFile(sources);
super.srcToExe(out, zipFile, sources);
}
@@ -50,22 +47,8 @@
throws Exception {
setIncrementalFolder(AbstractTestTools.createTempDir());
super.srcToLib(out, zipFiles, sources);
- Thread.sleep(1000);
- touchSourceFile(sources);
+ IncrementalToolchainUtils.touchSourceFile(sources);
super.srcToLib(out, zipFiles, sources);
}
- private void touchSourceFile(@Nonnull File... sources) throws Exception {
- List<File> files = new ArrayList<File>();
- for (File source : sources) {
- AbstractTestTools.getJavaFiles(source, files, /* mustExist = */ false);
- }
- if (files.size() > 0) {
- File fileToTouch = files.get(files.size() / 2);
- if (!fileToTouch.setLastModified(System.currentTimeMillis())) {
- throw new AssertionError("Could not touch file '" + fileToTouch.getPath() + "'");
- }
- }
- }
-
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV04Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV04Toolchain.java
index ee1cb29..7e6ac02 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV04Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV04Toolchain.java
@@ -318,4 +318,11 @@
}
return this;
}
+
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) throws Exception {
+ apiV04Config.setProperty(Options.ANDROID_MIN_API_LEVEL.getName(), minApiLevel);
+ return this;
+ }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
index 83de85c..36e28bb 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
@@ -19,7 +19,7 @@
import com.google.common.base.Joiner;
import com.android.jack.Options;
-import com.android.jack.Options.VerbosityLevel;
+import com.android.jack.VerbosityLevel;
import com.android.jack.test.util.ExecFileException;
import com.android.jack.test.util.ExecuteFile;
@@ -50,7 +50,7 @@
@CheckForNull
protected File incrementalFolder;
@Nonnull
- protected Options.VerbosityLevel verbosityLevel = VerbosityLevel.WARNING;
+ protected VerbosityLevel verbosityLevel = VerbosityLevel.WARNING;
@Nonnull
protected final Map<String, String> properties = new HashMap<String, String>();
@@ -467,4 +467,11 @@
writer.close();
commandLine.add('@' + sourceList.getAbsolutePath());
}
+
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) throws Exception {
+ properties.put(Options.ANDROID_MIN_API_LEVEL.getName(), minApiLevel);
+ return this;
+ }
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java
index 5fc1a78..9c428d4 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java
@@ -389,4 +389,11 @@
writer.close();
commandLine.add('@' + sourceList.getAbsolutePath());
}
+
+ @Override
+ @Nonnull
+ public AndroidToolchain setAndroidMinApiLevel(@Nonnull String minApiLevel) throws Exception {
+ // Not used
+ return this;
+ }
}
diff --git a/jack-tests/tests/com/android/jack/AllTests.java b/jack-tests/tests/com/android/jack/AllTests.java
index 25f0e6a..fa07f24 100644
--- a/jack-tests/tests/com/android/jack/AllTests.java
+++ b/jack-tests/tests/com/android/jack/AllTests.java
@@ -11,6 +11,7 @@
import com.android.jack.box.BoxTests;
import com.android.jack.bridge.BridgeTests;
import com.android.jack.cast.CastAllTests;
+import com.android.jack.classfile.ClassfileTests;
import com.android.jack.classpath.ClasspathTests;
import com.android.jack.clinit.ClinitTests;
import com.android.jack.comparison.ComparisonTests;
@@ -99,6 +100,7 @@
BridgeTests.class,
BridgeAnnotationsTests.class,
CastAllTests.class,
+ ClassfileTests.class,
ClasspathTests.class,
ClinitTests.class,
ComparisonTests.class,
diff --git a/jack-tests/tests/com/android/jack/LongLastingTests.java b/jack-tests/tests/com/android/jack/LongLastingTests.java
index f23a459..bce5c5e 100644
--- a/jack-tests/tests/com/android/jack/LongLastingTests.java
+++ b/jack-tests/tests/com/android/jack/LongLastingTests.java
@@ -17,7 +17,7 @@
package com.android.jack;
-import com.android.jack.test.category.SlowTests;
+import com.android.jack.test.category.NonPreSubmitTests;
import com.android.jack.test.junit.JackTestRunner;
import org.junit.experimental.categories.Categories.IncludeCategory;
@@ -31,7 +31,7 @@
* CL.
*/
@RunWith(JackTestRunner.class)
-@IncludeCategory(SlowTests.class)
+@IncludeCategory(NonPreSubmitTests.class)
@SuiteClasses(value = {AllTests.class, LongLastingUnitTests.class})
public class LongLastingTests {
}
diff --git a/jack-tests/tests/com/android/jack/RegressionTests.java b/jack-tests/tests/com/android/jack/RegressionTests.java
index 325bfcb..273648c 100644
--- a/jack-tests/tests/com/android/jack/RegressionTests.java
+++ b/jack-tests/tests/com/android/jack/RegressionTests.java
@@ -40,9 +40,11 @@
import com.android.jack.invoke.InvokeTests;
import com.android.jack.newarray.NewarrayTests;
import com.android.jack.opcodes.OpcodesTests;
+import com.android.jack.optimizations.defuse.DefUseTests;
import com.android.jack.optimizations.exprsimplifier.ExprsimplifierTests;
import com.android.jack.optimizations.ifwithconstantsimplifier.IfWithConstantSimplifierTests;
import com.android.jack.optimizations.notsimplifier.NotsimplifierTests;
+import com.android.jack.optimizations.sideeffect.SideEffectTests;
import com.android.jack.optimizations.tailrecursion.TailRecursionTests;
import com.android.jack.optimizations.usedef.UseDefTests;
import com.android.jack.order.OrderTests;
@@ -58,6 +60,7 @@
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.threeaddress.ThreeaddressTests;
import com.android.jack.throwstatement.ThrowstatementTests;
+import com.android.jack.transformations.boostlockregionpriority.BoostLockedRegionPriorityTests;
import com.android.jack.trycatch.TrycatchTests;
import com.android.jack.tryfinally.TryfinallyTests;
import com.android.jack.unary.UnaryTests;
@@ -76,6 +79,7 @@
new ArrayTests(),
new AssertionTests(),
new AssignTests(),
+ new BoostLockedRegionPriorityTests(),
new BoxTests(),
new BridgeTests(),
new BridgeAnnotationsTests(),
@@ -83,6 +87,7 @@
new ComparisonTests(),
new ConditionalTests(),
new ConstantTests(),
+ new DefUseTests(),
new DxTests(),
new EnumsTests(),
new ExprsimplifierTests(),
@@ -102,6 +107,7 @@
new ReflectTests(),
new ReturnstatementTests(),
new ShrobRuntimeTests(),
+ new SideEffectTests(),
new StringTests(),
new SwitchstatementTests(),
new SynchronizeTests(),
diff --git a/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java b/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java
index 354e2b4..942ed8a 100644
--- a/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java
+++ b/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java
@@ -23,8 +23,10 @@
import com.android.jack.library.FileTypeDoesNotExistException;
import com.android.jack.library.InputJackLibrary;
import com.android.jack.test.TestsProperties;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.IToolchain;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.JillBasedToolchain;
import com.android.jack.test.util.ExecFileException;
@@ -118,6 +120,7 @@
}
@Test
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void compileWithAnnotationProcessorAuto_classpath() throws Exception {
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
exclude.add(JillBasedToolchain.class);
@@ -137,6 +140,7 @@
}
@Test
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void compileWithAnnotationProcessorAuto_processorPath() throws Exception {
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
exclude.add(JillBasedToolchain.class);
@@ -157,6 +161,7 @@
}
@Test
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void compileWithAnnotationProcessorNoAuto_processorPath() throws Exception {
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
exclude.add(JillBasedToolchain.class);
diff --git a/jack-tests/tests/com/android/jack/box/BoxTests.java b/jack-tests/tests/com/android/jack/box/BoxTests.java
index 89cecf3..8729f38 100644
--- a/jack-tests/tests/com/android/jack/box/BoxTests.java
+++ b/jack-tests/tests/com/android/jack/box/BoxTests.java
@@ -16,22 +16,46 @@
package com.android.jack.box;
+import com.android.jack.frontend.FrontendCompilationException;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.runtime.RuntimeTest;
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackApiToolchainBase;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.test.toolchain.Toolchain.SourceLevel;
+
+import junit.framework.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import java.io.File;
+
+import javax.annotation.Nonnull;
+
public class BoxTests extends RuntimeTest {
private RuntimeTestInfo TEST001 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.box.test001"),
"com.android.jack.box.test001.dx.Tests");
+ private RuntimeTestInfo TEST002 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.box.test002"),
+ "com.android.jack.box.test002.jack.Java7Boxing");
+ private RuntimeTestInfo TEST003 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.box.test003"),
+ "com.android.jack.box.test003.jack.Java7Boxing");
+ private RuntimeTestInfo TEST004 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.box.test004"),
+ "com.android.jack.box.test004.jack.Java7Boxing");
+ private RuntimeTestInfo TEST005 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.box.test005"),
+ "com.android.jack.box.test005.jack.Java7Boxing");
+
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
@@ -39,6 +63,68 @@
new RuntimeTestHelper(TEST001).compileAndRunTest();
}
+ @Test
+ @Runtime
+ public void test002() throws Exception {
+ new RuntimeTestHelper(TEST002).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
+ }
+
+ @Test
+ @Runtime
+ public void test002_1() throws Exception {
+ checkCompilationFailOnJava6(TEST002);
+ }
+
+ @Test
+ @Runtime
+ public void test003() throws Exception {
+ new RuntimeTestHelper(TEST003).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
+ }
+
+ @Test
+ @Runtime
+ public void test003_1() throws Exception {
+ checkCompilationFailOnJava6(TEST003);
+ }
+
+ @Test
+ @Runtime
+ @KnownIssue
+ public void test004() throws Exception {
+ new RuntimeTestHelper(TEST004).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
+ }
+
+ @Test
+ @Runtime
+ public void test004_1() throws Exception {
+ checkCompilationFailOnJava6(TEST004);
+ }
+
+ @Test
+ @Runtime
+ public void test005() throws Exception {
+ new RuntimeTestHelper(TEST005).setSourceLevel(SourceLevel.JAVA_7).compileAndRunTest();
+ }
+
+ @Test
+ @Runtime
+ public void test005_1() throws Exception {
+ checkCompilationFailOnJava6(TEST005);
+ }
+
+ private void checkCompilationFailOnJava6(@Nonnull RuntimeTestInfo test) throws Exception {
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ toolchain.setSourceLevel(SourceLevel.JAVA_6);
+ File tmpOut = AbstractTestTools.createTempFile("", ".jack");
+ try {
+ toolchain.srcToLib(tmpOut, /* zipFiles = */ true, test.directory);
+ Assert.fail();
+ } catch (FrontendCompilationException e) {
+ // OK
+ }
+ }
+
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(TEST001);
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/box/test002/jack/Java7Boxing.java
similarity index 63%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/box/test002/jack/Java7Boxing.java
index 0b9fd92..3bb1fa3 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/box/test002/jack/Java7Boxing.java
@@ -14,7 +14,21 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.box.test002.jack;
-public interface Interface {}
+import org.junit.Assert;
+import org.junit.Test;
+public class Java7Boxing {
+
+ @Test
+ public void test() {
+ Assert.assertEquals(1.3f, Java7Boxing.get(1.3f), 0.0001);
+ }
+
+ @SuppressWarnings("boxing")
+ public static float get(float value) {
+ Object f = Float.valueOf(value);
+ return (float) f;
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/box/test003/jack/Java7Boxing.java
similarity index 60%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/box/test003/jack/Java7Boxing.java
index 0b9fd92..c835628 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/box/test003/jack/Java7Boxing.java
@@ -14,7 +14,26 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.box.test003.jack;
-public interface Interface {}
+import org.junit.Assert;
+import org.junit.Test;
+public class Java7Boxing {
+
+ @Test
+ public void test() {
+ try {
+ Java7Boxing.get(1.3);
+ Assert.fail();
+ } catch (ClassCastException e) {
+ // OK
+ }
+ }
+
+ @SuppressWarnings("boxing")
+ public static float get(double value) {
+ Object f = Double.valueOf(value);
+ return (float) f;
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/AllCoverageTests.java b/jack-tests/tests/com/android/jack/box/test004/jack/Java7Boxing.java
similarity index 61%
copy from jack-coverage/tests/com/android/jack/coverage/AllCoverageTests.java
copy to jack-tests/tests/com/android/jack/box/test004/jack/Java7Boxing.java
index 2f7525b..1b7ec81 100644
--- a/jack-coverage/tests/com/android/jack/coverage/AllCoverageTests.java
+++ b/jack-tests/tests/com/android/jack/box/test004/jack/Java7Boxing.java
@@ -14,14 +14,23 @@
* limitations under the License.
*/
-package com.android.jack.coverage;
+package com.android.jack.box.test004.jack;
-import com.android.jack.test.junit.JackTestRunner;
+import org.junit.Assert;
+import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite.SuiteClasses;
+public class Java7Boxing {
-@RunWith(JackTestRunner.class)
-@SuiteClasses(value = {CoverageTests.class})
-public class AllCoverageTests {
+ @Test
+ public void test003() {
+ Assert.assertEquals(4414079, Java7Boxing.get());
+ }
+
+ @SuppressWarnings({"boxing", "unused"})
+ public static int get() {
+ int i = 35312635;
+ Object s = 702730947;
+ i >>>= (int) (true ? s : -1284717918.0f);
+ return i;
+ }
}
diff --git a/jack-tests/tests/com/android/jack/box/test005/jack/Java7Boxing.java b/jack-tests/tests/com/android/jack/box/test005/jack/Java7Boxing.java
new file mode 100644
index 0000000..24527a7
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/box/test005/jack/Java7Boxing.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.box.test005.jack;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class Java7Boxing {
+
+ @Test
+ public void test001() {
+ Assert.assertEquals(4414079, Java7Boxing.get(true));
+ }
+ @Test
+ public void test002() {
+ try {
+ Java7Boxing.get(false);
+ Assert.fail();
+ } catch (ClassCastException e) {
+ // OK
+ }
+ }
+
+ @SuppressWarnings("boxing")
+ public static int get(boolean cond) {
+ int i = 35312635;
+ Object s = 702730947;
+ i >>>= (int) (cond ? s : -1284717918.0f);
+ return i;
+ }
+
+}
diff --git a/jack-tests/tests/com/android/jack/bridge/BridgeTests.java b/jack-tests/tests/com/android/jack/bridge/BridgeTests.java
index 592bfcc..3db60ab 100644
--- a/jack-tests/tests/com/android/jack/bridge/BridgeTests.java
+++ b/jack-tests/tests/com/android/jack/bridge/BridgeTests.java
@@ -23,6 +23,7 @@
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.IToolchain;
+import com.android.jack.test.toolchain.JillBasedToolchain;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -147,9 +148,10 @@
@Test
@Runtime
- @Category(RuntimeRegressionTest.class)
public void test009() throws Exception {
- new RuntimeTestHelper(TEST009).compileAndRunTest();
+ new RuntimeTestHelper(TEST009)
+ .addIgnoredCandidateToolchain(JillBasedToolchain.class)
+ .compileAndRunTest();
}
/**
@@ -174,6 +176,5 @@
rtTestInfos.add(TEST005);
rtTestInfos.add(TEST006);
rtTestInfos.add(TEST007);
- rtTestInfos.add(TEST009);
}
}
diff --git a/jack-tests/tests/com/android/jack/classfile/ClassfileTests.java b/jack-tests/tests/com/android/jack/classfile/ClassfileTests.java
new file mode 100644
index 0000000..8aaa5d9
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/classfile/ClassfileTests.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.classfile;
+
+import com.android.jack.Options;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.IToolchain;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.test.toolchain.JillBasedToolchain;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
+public class ClassfileTests {
+
+ @Test
+ public void testClassFileIsCompiled() throws Exception {
+ // class file generation support is only for sources not imports.
+ List<Class<? extends IToolchain>> excludeList =
+ Collections.<Class<? extends IToolchain>>singletonList(JillBasedToolchain.class);
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class,
+ excludeList);
+ File[] defaultClasspath = toolchain.getDefaultBootClasspath();
+ File jackOut = AbstractTestTools.createTempFile("jackOut", toolchain.getLibraryExtension());
+ File classOut = AbstractTestTools.createTempDir();
+ File sourceDir = AbstractTestTools.getTestRootDir("com.android.jack.classfile.test001");
+
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classOut.getPath());
+
+ toolchain.addToClasspath(defaultClasspath)
+ .srcToLib(jackOut, /* zipFiles = */ true, sourceDir);
+
+ Assert.assertTrue(
+ new File(classOut, "com/android/jack/classfile/test001/jack/ClassTest.class").isFile());
+
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/classfile/test001/jack/ClassTest.java
similarity index 85%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/classfile/test001/jack/ClassTest.java
index 0b9fd92..554fbfe 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/classfile/test001/jack/ClassTest.java
@@ -14,7 +14,11 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.classfile.test001.jack;
-public interface Interface {}
+public class ClassTest {
+ public ClassTest() {
+ }
+
+}
diff --git a/jack-tests/tests/com/android/jack/clinit/ClinitTests.java b/jack-tests/tests/com/android/jack/clinit/ClinitTests.java
index 01262e1..ed3e6f6 100644
--- a/jack-tests/tests/com/android/jack/clinit/ClinitTests.java
+++ b/jack-tests/tests/com/android/jack/clinit/ClinitTests.java
@@ -24,7 +24,7 @@
public class ClinitTests {
public static final String CLASS_WITH_VARIABLE_INIT_BINARY_NAME
- = "com/android/jack/clinit/jack/ClInitWithVariableInit";
+ = "com/android/jack/clinit/test001/jack/ClInitWithVariableInit";
@Test
public void testCompileWithClinit() throws Exception {
@@ -33,7 +33,17 @@
.srcToExe(
AbstractTestTools.createTempDir(),
/* zipFile = */ false,
- AbstractTestTools.getTestRootDir("com.android.jack.clinit.jack"));
+ AbstractTestTools.getTestRootDir("com.android.jack.clinit.test001.jack"));
+ }
+
+ @Test
+ public void testCompileAnnotationWithClinit() throws Exception {
+ IToolchain toolchain = AbstractTestTools.getCandidateToolchain();
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .srcToExe(
+ AbstractTestTools.createTempDir(),
+ /* zipFile = */ false,
+ AbstractTestTools.getTestRootDir("com.android.jack.clinit.test002.jack"));
}
}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java b/jack-tests/tests/com/android/jack/clinit/test001/jack/ClInit.java
similarity index 93%
rename from jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
rename to jack-tests/tests/com/android/jack/clinit/test001/jack/ClInit.java
index 680f9cf..d4fbee3 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
+++ b/jack-tests/tests/com/android/jack/clinit/test001/jack/ClInit.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.clinit.test001.jack;
public class ClInit {
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java b/jack-tests/tests/com/android/jack/clinit/test001/jack/ClInitWithVariableInit.java
similarity index 93%
rename from jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
rename to jack-tests/tests/com/android/jack/clinit/test001/jack/ClInitWithVariableInit.java
index 8c344dd..f39d1c8 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
+++ b/jack-tests/tests/com/android/jack/clinit/test001/jack/ClInitWithVariableInit.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.clinit.test001.jack;
public class ClInitWithVariableInit {
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/clinit/test002/jack/Application.java
similarity index 78%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/clinit/test002/jack/Application.java
index 0b9fd92..0cc416e 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/clinit/test002/jack/Application.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.clinit.test002.jack;
-public interface Interface {}
-
+class Application {
+ protected Application() { }
+}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java b/jack-tests/tests/com/android/jack/clinit/test002/jack/Config.java
similarity index 71%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
copy to jack-tests/tests/com/android/jack/clinit/test002/jack/Config.java
index 680f9cf..83ed1e6 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
+++ b/jack-tests/tests/com/android/jack/clinit/test002/jack/Config.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,8 +14,10 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.clinit.test002.jack;
-public class ClInit {
-
+public @interface Config {
+ String s = "A String";
+ int i = 123;
+ Class<Application> DEFAULT_APPLICATION = Application.class;
}
diff --git a/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java b/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java
index 3d7af14..0681280 100644
--- a/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java
+++ b/jack-tests/tests/com/android/jack/conditional/ConditionalTests.java
@@ -18,6 +18,7 @@
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.runtime.RuntimeTest;
import com.android.jack.test.runtime.RuntimeTestInfo;
@@ -60,6 +61,10 @@
AbstractTestTools.getTestRootDir("com.android.jack.conditional.test008"),
"com.android.jack.conditional.test008.dx.Tests");
+ private RuntimeTestInfo TEST009 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.conditional.test009"),
+ "com.android.jack.conditional.test009.jack.ConditionalTest009");
+
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
@@ -116,6 +121,14 @@
new RuntimeTestHelper(TEST008).compileAndRunTest();
}
+ @Test
+ @Runtime
+ @Category(RuntimeRegressionTest.class)
+ @KnownIssue
+ public void test009() throws Exception {
+ new RuntimeTestHelper(TEST009).compileAndRunTest();
+ }
+
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(TEST001);
@@ -126,5 +139,6 @@
rtTestInfos.add(TEST006);
rtTestInfos.add(TEST007);
rtTestInfos.add(TEST008);
+// rtTestInfos.add(TEST009);
}
}
diff --git a/jack-tests/tests/com/android/jack/conditional/test009/jack/ConditionalTest009.java b/jack-tests/tests/com/android/jack/conditional/test009/jack/ConditionalTest009.java
new file mode 100644
index 0000000..5a98f8a
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/conditional/test009/jack/ConditionalTest009.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.conditional.test009.jack;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ConditionalTest009 {
+ @Test
+ public void test001() {
+ Assert.assertEquals(35312635, get());
+ }
+
+ @Test
+ public void test002() {
+ Assert.assertEquals(35312635, get2());
+ }
+
+ @SuppressWarnings("unused")
+ public int get() {
+ int i = 35312635;
+ int s = 702730947;
+ i >>>= (int) (true ? s : -1284717918.0f);
+ return i;
+ }
+
+ @SuppressWarnings("cast")
+ public int get2() {
+ int i = 35312635;
+ i >>>= (int) (float) 702730947;
+ return i;
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/constant/ConstantTests.java b/jack-tests/tests/com/android/jack/constant/ConstantTests.java
index fb50443..643d24c 100644
--- a/jack-tests/tests/com/android/jack/constant/ConstantTests.java
+++ b/jack-tests/tests/com/android/jack/constant/ConstantTests.java
@@ -17,6 +17,7 @@
package com.android.jack.constant;
import com.android.jack.TestTools;
+import com.android.jack.optimizations.Optimizations;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
@@ -130,6 +131,7 @@
@Runtime
public void test005() throws Exception {
new RuntimeTestHelper(TEST005)
+ .addProperty(Optimizations.UseDefSimplifier.OPTIMIZE_CST_DEF.getName(), "false")
.addIgnoredCandidateToolchain(JillBasedToolchain.class)
.compileAndRunTest();
}
diff --git a/jack-tests/tests/com/android/jack/debug/DebugTests.java b/jack-tests/tests/com/android/jack/debug/DebugTests.java
index 74466fa..ebda877 100644
--- a/jack-tests/tests/com/android/jack/debug/DebugTests.java
+++ b/jack-tests/tests/com/android/jack/debug/DebugTests.java
@@ -16,6 +16,7 @@
package com.android.jack.debug;
+import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.optimizations.Optimizations;
import com.android.jack.test.helper.CheckDexStructureTestHelper;
import com.android.jack.test.helper.RuntimeTestHelper;
@@ -57,6 +58,7 @@
.setWithDebugInfos(true)
.addProperty(Optimizations.REMOVE_UNUSED_NON_SYNTHETIC_DEFINITION.getName(),
String.valueOf(false))
+ .addProperty(CodeItemBuilder.DEX_OPTIMIZE.getName(), "true")
.compileAndRunTest(/* checkStructure = */ true);
}
diff --git a/jack-tests/tests/com/android/jack/dextag/DexTagTests.java b/jack-tests/tests/com/android/jack/dextag/DexTagTests.java
index fd3498c..c2e6b2d 100644
--- a/jack-tests/tests/com/android/jack/dextag/DexTagTests.java
+++ b/jack-tests/tests/com/android/jack/dextag/DexTagTests.java
@@ -20,13 +20,14 @@
import com.android.jack.dx.io.DexBuffer;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
import junit.framework.Assert;
import org.junit.Test;
import java.io.File;
-import java.io.IOException;
import java.util.Iterator;
import javax.annotation.Nonnull;
@@ -49,7 +50,7 @@
Assert.assertTrue(hasTag(classesDex));
}
- private boolean hasTag(@Nonnull File dexFile) throws IOException {
+ private boolean hasTag(@Nonnull File dexFile) throws CannotReadException, CannotCloseException {
Iterator<String> stringsIt = new DexBuffer(dexFile).strings().iterator();
while (stringsIt.hasNext()) {
diff --git a/jack-tests/tests/com/android/jack/dx/DxTests.java b/jack-tests/tests/com/android/jack/dx/DxTests.java
index d23a339..80e530e 100644
--- a/jack-tests/tests/com/android/jack/dx/DxTests.java
+++ b/jack-tests/tests/com/android/jack/dx/DxTests.java
@@ -18,14 +18,17 @@
import com.android.jack.Options;
import com.android.jack.TestTools;
+import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.runtime.RuntimeTest;
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.IToolchain;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackApiToolchainBase;
import com.android.jack.test.toolchain.JackApiV02;
import com.android.jack.test.toolchain.JillBasedToolchain;
@@ -130,7 +133,7 @@
@Runtime
public void deadcoderemover() throws Exception {
new RuntimeTestHelper(DEADCODEREMOVER)
- .compileAndRunTest();
+ .addProperty(CodeItemBuilder.DEX_OPTIMIZE.getName(), "true").compileAndRunTest();
}
@Test
@@ -208,6 +211,7 @@
}
@Test
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void testCarnacBinaryOr() throws Exception {
File srcDir = AbstractTestTools.getTestRootDir("com.android.jack.dx.jacklibs");
File carnacLib = new File(srcDir, "carnac-binary-or.jack");
diff --git a/jack-tests/tests/com/android/jack/encoding/CompileEncodingTests.java b/jack-tests/tests/com/android/jack/encoding/CompileEncodingTests.java
index 936f0bb..781cba5 100644
--- a/jack-tests/tests/com/android/jack/encoding/CompileEncodingTests.java
+++ b/jack-tests/tests/com/android/jack/encoding/CompileEncodingTests.java
@@ -210,7 +210,7 @@
private void run(@Nonnull String clazz, @Nonnull File binDirectory,
int expected)
throws SecurityException, IllegalArgumentException, RuntimeRunnerException {
- for (RuntimeRunner runner : AbstractTestTools.listRuntimeTestRunners(null)) {
+ for (RuntimeRunner runner : AbstractTestTools.listRuntimeTestRunners()) {
if (runner.runJUnit(
new String[0],
AbstractTestTools.JUNIT_RUNNER_NAME,
diff --git a/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java b/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java
index eb0c93f..eafe041 100644
--- a/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java
+++ b/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java
@@ -30,7 +30,9 @@
import com.android.jack.resource.ResourceReadingException;
import com.android.jack.test.TestsProperties;
import com.android.jack.test.helper.ErrorTestHelper;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackApiToolchainBase;
import junit.framework.Assert;
@@ -58,6 +60,7 @@
* Checks that compilation succeed when running annotation processor to generate resource file.
*/
@Test
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void testAnnotationProcessorError002() throws Exception {
runAnnotProcBuildingResource(new ErrorTestHelper());
}
@@ -67,6 +70,7 @@
* exist.
*/
@Test
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void testAnnotationProcessorError003() throws Exception {
ErrorTestHelper te = new ErrorTestHelper();
diff --git a/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java b/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java
index 0b0aae8..16d45f1 100644
--- a/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java
+++ b/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java
@@ -24,7 +24,9 @@
import com.android.jack.library.LibraryIOException;
import com.android.jack.library.LibraryReadingException;
import com.android.jack.test.helper.ErrorTestHelper;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackApiToolchainBase;
import com.android.sched.util.config.PropertyIdException;
import com.android.sched.util.file.WrongPermissionException;
@@ -79,6 +81,7 @@
/**
* Checks that compilation fails correctly when a jack library folder is not readable.
*/
+ @KnownIssue(candidate=IncrementalToolchain.class)
@Test
public void testFileAccessError002() throws Exception {
ErrorTestHelper helper = new ErrorTestHelper();
diff --git a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest014.java b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest014.java
index cd1fb2a..b564534 100644
--- a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest014.java
+++ b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest014.java
@@ -19,6 +19,7 @@
import com.android.jack.dx.io.DexBuffer;
import com.android.jack.test.helper.IncrementalTestHelper;
import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.sched.util.location.FileLocation;
import junit.framework.Assert;
@@ -26,6 +27,7 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.InputStream;
/**
* JUnit test checking incremental support when files are deleted.
@@ -54,10 +56,12 @@
ite.deleteJavaFile(f);
ite.incrementalBuildFromFolder();
- DexBuffer db = new DexBuffer(new FileInputStream(ite.getDexFile()));
- for (String typeName : db.typeNames()) {
- if (typeName.equals("Ljack/incremental/B;")) {
- Assert.fail();
+ try (InputStream is = new FileInputStream(ite.getDexFile())) {
+ DexBuffer db = new DexBuffer(is, new FileLocation(ite.getDexFile()));
+ for (String typeName : db.typeNames()) {
+ if (typeName.equals("Ljack/incremental/B;")) {
+ Assert.fail();
+ }
}
}
}
@@ -86,7 +90,10 @@
ite.deleteJavaFile(fB);
ite.deleteJavaFile(fC);
ite.incrementalBuildFromFolder();
- DexBuffer db = new DexBuffer(new FileInputStream(ite.getDexFile()));
+ DexBuffer db;
+ try (InputStream is = new FileInputStream(ite.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(ite.getDexFile()));
+ }
for (String typeName : db.typeNames()) {
if (typeName.equals("Ljack/incremental/B;") ||
typeName.equals("Ljack/incremental/C;")) {
diff --git a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest015.java b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest015.java
index 3ce69cf..8268558 100644
--- a/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest015.java
+++ b/jack-tests/tests/com/android/jack/experimental/incremental/DependenciesTest015.java
@@ -21,6 +21,7 @@
import com.android.jack.test.helper.IncrementalTestHelper;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.JackBasedToolchain.MultiDexKind;
+import com.android.sched.util.location.FileLocation;
import junit.framework.Assert;
@@ -29,6 +30,7 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
+import java.io.InputStream;
import java.util.Arrays;
/**
@@ -113,7 +115,10 @@
iteProg.snapshotJackFilesModificationDate();
Assert.assertEquals(1, iteProg.getJayceCount());
- DexBuffer db = new DexBuffer(new FileInputStream(iteProg.getDexFile()));
+ DexBuffer db;
+ try (InputStream is = new FileInputStream(iteProg.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(iteProg.getDexFile()));
+ }
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/A;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/B;"));
@@ -128,7 +133,9 @@
iteProg.snapshotJackFilesModificationDate();
Assert.assertEquals(1, iteProg.getJayceCount());
- db = new DexBuffer(new FileInputStream(iteProg.getDexFile()));
+ try (InputStream is = new FileInputStream(iteProg.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(iteProg.getDexFile()));
+ }
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/A;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/B;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/C;"));
@@ -162,7 +169,10 @@
iteProg.snapshotJackFilesModificationDate();
Assert.assertEquals(1, iteProg.getJayceCount());
- DexBuffer db = new DexBuffer(new FileInputStream(iteProg.getDexFile()));
+ DexBuffer db;
+ try (InputStream is = new FileInputStream(iteProg.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(iteProg.getDexFile()));
+ }
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/A;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/B;"));
@@ -179,7 +189,9 @@
iteProg.snapshotJackFilesModificationDate();
Assert.assertEquals(2, iteProg.getJayceCount());
- db = new DexBuffer(new FileInputStream(iteProg.getDexFile()));
+ try (InputStream is = new FileInputStream(iteProg.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(iteProg.getDexFile()));
+ }
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/A;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/B;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/C;"));
@@ -214,7 +226,10 @@
iteProg.snapshotJackFilesModificationDate();
Assert.assertEquals(1, iteProg.getJayceCount());
- DexBuffer db = new DexBuffer(new FileInputStream(iteProg.getDexFile()));
+ DexBuffer db;
+ try (InputStream is = new FileInputStream(iteProg.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(iteProg.getDexFile()));
+ }
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/A;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/B;"));
@@ -229,7 +244,9 @@
iteProg.snapshotJackFilesModificationDate();
Assert.assertEquals(1, iteProg.getJayceCount());
- db = new DexBuffer(new FileInputStream(iteProg.getDexFile()));
+ try (InputStream is = new FileInputStream(iteProg.getDexFile())) {
+ db = new DexBuffer(is, new FileLocation(iteProg.getDexFile()));
+ }
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/A;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/B;"));
Assert.assertTrue(db.typeNames().contains("Ljack/incremental/C;"));
diff --git a/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java b/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
index 8d7ba4f..45fe0e8 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
+++ b/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
@@ -205,7 +205,6 @@
* @throws Exception
*/
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void test002a() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -228,7 +227,6 @@
* @throws Exception
*/
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void test002b() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -252,7 +250,6 @@
* @throws Exception
*/
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void test002c() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -278,7 +275,6 @@
* @throws Exception
*/
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void test002d() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -301,7 +297,6 @@
* @throws Exception
*/
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void test002e() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
diff --git a/jack-tests/tests/com/android/jack/frontend/FrontEndTests.java b/jack-tests/tests/com/android/jack/frontend/FrontEndTests.java
index 4610de9..0a41640 100644
--- a/jack-tests/tests/com/android/jack/frontend/FrontEndTests.java
+++ b/jack-tests/tests/com/android/jack/frontend/FrontEndTests.java
@@ -160,6 +160,7 @@
List<Class<? extends IToolchain>> excludeList = new ArrayList<Class<? extends IToolchain>>(1);
excludeList.add(JillBasedToolchain.class);
+ // because test check exact number of output "WARNING" messages
excludeList.add(IncrementalToolchain.class);
IToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeList);
ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -188,13 +189,16 @@
@Test
public void testInnerError001() throws Exception {
File outDir = AbstractTestTools.createTempDir();
+ File classDir = AbstractTestTools.createTempDir();
- IToolchain toolchain =
+ JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
toolchain.setOutputStream(out);
toolchain.setErrorStream(err);
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classDir.getPath());
try {
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
@@ -207,6 +211,7 @@
Assert.assertEquals(0, out.size());
String errString = err.toString();
Assert.assertTrue(errString.contains("ERROR:"));
+ Assert.assertTrue(errString.indexOf("ERROR:") == errString.lastIndexOf("ERROR:"));
Assert.assertTrue(errString.contains("ExtendingInnerOnly"));
Assert.assertTrue(errString.contains("Inner"));
}
@@ -249,13 +254,16 @@
@Test
public void testInnerError003() throws Exception {
File outDir = AbstractTestTools.createTempDir();
+ File classDir = AbstractTestTools.createTempDir();
- IToolchain toolchain =
+ JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
toolchain.setOutputStream(out);
toolchain.setErrorStream(err);
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classDir.getPath());
try {
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
@@ -268,6 +276,7 @@
Assert.assertEquals(0, out.size());
String errString = err.toString();
Assert.assertTrue(errString.contains("ERROR:"));
+ Assert.assertTrue(errString.indexOf("ERROR:") == errString.lastIndexOf("ERROR:"));
Assert.assertTrue(errString.contains("WithOuterContextButStatic"));
Assert.assertTrue(errString.contains("Inner"));
}
@@ -279,13 +288,16 @@
@Test
public void testInnerError004() throws Exception {
File outDir = AbstractTestTools.createTempDir();
+ File classDir = AbstractTestTools.createTempDir();
- IToolchain toolchain =
+ JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
toolchain.setOutputStream(out);
toolchain.setErrorStream(err);
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classDir.getPath());
try {
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
@@ -298,6 +310,7 @@
Assert.assertEquals(0, out.size());
String errString = err.toString();
Assert.assertTrue(errString.contains("ERROR:"));
+ Assert.assertTrue(errString.indexOf("ERROR:") == errString.lastIndexOf("ERROR:"));
Assert.assertTrue(errString.contains("NoOuterContext"));
Assert.assertTrue(errString.contains("Inner"));
}
@@ -309,13 +322,16 @@
@Test
public void testUnusedLocalVar001() throws Exception {
File outDir = AbstractTestTools.createTempDir();
+ File classDir = AbstractTestTools.createTempDir();
- IToolchain toolchain =
+ JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
toolchain.setOutputStream(out);
toolchain.setErrorStream(err);
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classDir.getPath());
try {
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
@@ -328,6 +344,7 @@
Assert.assertEquals(0, out.size());
String errString = err.toString();
Assert.assertTrue(errString.contains("ERROR:"));
+ Assert.assertTrue(errString.indexOf("ERROR:") == errString.lastIndexOf("ERROR:"));
Assert.assertTrue(errString.contains("UnusedLocalVar"));
Assert.assertTrue(errString.contains("Inner"));
}
@@ -373,13 +390,16 @@
@Category(ExtraTests.class)
public void testUnusedLocalVar004() throws Exception {
File outDir = AbstractTestTools.createTempDir();
+ File classDir = AbstractTestTools.createTempDir();
- IToolchain toolchain =
+ JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
toolchain.setOutputStream(out);
toolchain.setErrorStream(err);
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classDir.getPath());
try {
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
@@ -392,7 +412,87 @@
Assert.assertEquals(0, out.size());
String errString = err.toString();
Assert.assertTrue(errString.contains("ERROR:"));
+ Assert.assertTrue(errString.indexOf("ERROR:") == errString.lastIndexOf("ERROR:"));
Assert.assertTrue(errString.contains("InvalidQualification"));
}
}
+
+ /**
+ * Test that Jack is able to compile a really big class into a jack file.
+ */
+ @Test
+ @Category(ExtraTests.class)
+ public void testTooBigClass001() throws Exception {
+ File outDir = AbstractTestTools.createTempDir();
+
+ IToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ByteArrayOutputStream err = new ByteArrayOutputStream();
+ toolchain.setOutputStream(out);
+ toolchain.setErrorStream(err);
+
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .srcToLib(
+ outDir,
+ /* zipFiles= */ false,
+ AbstractTestTools.getTestRootDir("com.android.jack.frontend.test019.jack"));
+ }
+
+ /**
+ * Test that Jack is able to compile a really big class into a dex file.
+ */
+ @Test
+ @Category(ExtraTests.class)
+ public void testTooBigClass002() throws Exception {
+ File outDir = AbstractTestTools.createTempDir();
+
+ IToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ByteArrayOutputStream err = new ByteArrayOutputStream();
+ toolchain.setOutputStream(out);
+ toolchain.setErrorStream(err);
+
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .srcToExe(
+ outDir,
+ /* zipFiles= */ false,
+ AbstractTestTools.getTestRootDir("com.android.jack.frontend.test019.jack"));
+ }
+
+ /**
+ * Test that Jack is reporting correctly an error when compiling a too big class into a class
+ * file.
+ */
+ @Test
+ @Category(ExtraTests.class)
+ public void testTooBigClass003() throws Exception {
+ File outDir = AbstractTestTools.createTempDir();
+ File classDir = AbstractTestTools.createTempDir();
+
+ JackApiToolchainBase toolchain =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ByteArrayOutputStream err = new ByteArrayOutputStream();
+ toolchain.setOutputStream(out);
+ toolchain.setErrorStream(err);
+ toolchain.addProperty(Options.EMIT_CLASS_FILES.getName(), "true");
+ toolchain.addProperty(Options.EMIT_CLASS_FILES_FOLDER.getName(), classDir.getPath());
+
+ try {
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .srcToExe(
+ outDir,
+ /* zipFiles= */ false,
+ AbstractTestTools.getTestRootDir("com.android.jack.frontend.test019.jack"));
+ Assert.fail();
+ } catch (Throwable e) {
+ Assert.assertEquals(0, out.size());
+ String errString = err.toString();
+ Assert.assertTrue(errString.contains("ERROR:"));
+ Assert.assertTrue(errString.contains(
+ "Too many constants, the constant pool for TooBig would exceed 65536 entries"));
+ }
+ }
}
diff --git a/jack-tests/tests/com/android/jack/frontend/test019/jack/TooBig.java b/jack-tests/tests/com/android/jack/frontend/test019/jack/TooBig.java
new file mode 100644
index 0000000..6125833
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/frontend/test019/jack/TooBig.java
@@ -0,0 +1,65540 @@
+package com.android.jack.frontend.test019.jack;
+
+public abstract class TooBig {
+ public abstract int a0();
+ public abstract int a1();
+ public abstract int a2();
+ public abstract int a3();
+ public abstract int a4();
+ public abstract int a5();
+ public abstract int a6();
+ public abstract int a7();
+ public abstract int a8();
+ public abstract int a9();
+ public abstract int a10();
+ public abstract int a11();
+ public abstract int a12();
+ public abstract int a13();
+ public int a14;
+ public int a15;
+ public int a16;
+ public int a17;
+ public int a18;
+ public int a19;
+ public int a20;
+ public int a21;
+ public int a22;
+ public int a23;
+ public int a24;
+ public int a25;
+ public int a26;
+ public int a27;
+ public int a28;
+ public int a29;
+ public int a30;
+ public int a31;
+ public int a32;
+ public int a33;
+ public int a34;
+ public int a35;
+ public int a36;
+ public int a37;
+ public int a38;
+ public int a39;
+ public int a40;
+ public int a41;
+ public int a42;
+ public int a43;
+ public int a44;
+ public int a45;
+ public int a46;
+ public int a47;
+ public int a48;
+ public int a49;
+ public int a50;
+ public int a51;
+ public int a52;
+ public int a53;
+ public int a54;
+ public int a55;
+ public int a56;
+ public int a57;
+ public int a58;
+ public int a59;
+ public int a60;
+ public int a61;
+ public int a62;
+ public int a63;
+ public int a64;
+ public int a65;
+ public int a66;
+ public int a67;
+ public int a68;
+ public int a69;
+ public int a70;
+ public int a71;
+ public int a72;
+ public int a73;
+ public int a74;
+ public int a75;
+ public int a76;
+ public int a77;
+ public int a78;
+ public int a79;
+ public int a80;
+ public int a81;
+ public int a82;
+ public int a83;
+ public int a84;
+ public int a85;
+ public int a86;
+ public int a87;
+ public int a88;
+ public int a89;
+ public int a90;
+ public int a91;
+ public int a92;
+ public int a93;
+ public int a94;
+ public int a95;
+ public int a96;
+ public int a97;
+ public int a98;
+ public int a99;
+ public int a100;
+ public int a101;
+ public int a102;
+ public int a103;
+ public int a104;
+ public int a105;
+ public int a106;
+ public int a107;
+ public int a108;
+ public int a109;
+ public int a110;
+ public int a111;
+ public int a112;
+ public int a113;
+ public int a114;
+ public int a115;
+ public int a116;
+ public int a117;
+ public int a118;
+ public int a119;
+ public int a120;
+ public int a121;
+ public int a122;
+ public int a123;
+ public int a124;
+ public int a125;
+ public int a126;
+ public int a127;
+ public int a128;
+ public int a129;
+ public int a130;
+ public int a131;
+ public int a132;
+ public int a133;
+ public int a134;
+ public int a135;
+ public int a136;
+ public int a137;
+ public int a138;
+ public int a139;
+ public int a140;
+ public int a141;
+ public int a142;
+ public int a143;
+ public int a144;
+ public int a145;
+ public int a146;
+ public int a147;
+ public int a148;
+ public int a149;
+ public int a150;
+ public int a151;
+ public int a152;
+ public int a153;
+ public int a154;
+ public int a155;
+ public int a156;
+ public int a157;
+ public int a158;
+ public int a159;
+ public int a160;
+ public int a161;
+ public int a162;
+ public int a163;
+ public int a164;
+ public int a165;
+ public int a166;
+ public int a167;
+ public int a168;
+ public int a169;
+ public int a170;
+ public int a171;
+ public int a172;
+ public int a173;
+ public int a174;
+ public int a175;
+ public int a176;
+ public int a177;
+ public int a178;
+ public int a179;
+ public int a180;
+ public int a181;
+ public int a182;
+ public int a183;
+ public int a184;
+ public int a185;
+ public int a186;
+ public int a187;
+ public int a188;
+ public int a189;
+ public int a190;
+ public int a191;
+ public int a192;
+ public int a193;
+ public int a194;
+ public int a195;
+ public int a196;
+ public int a197;
+ public int a198;
+ public int a199;
+ public int a200;
+ public int a201;
+ public int a202;
+ public int a203;
+ public int a204;
+ public int a205;
+ public int a206;
+ public int a207;
+ public int a208;
+ public int a209;
+ public int a210;
+ public int a211;
+ public int a212;
+ public int a213;
+ public int a214;
+ public int a215;
+ public int a216;
+ public int a217;
+ public int a218;
+ public int a219;
+ public int a220;
+ public int a221;
+ public int a222;
+ public int a223;
+ public int a224;
+ public int a225;
+ public int a226;
+ public int a227;
+ public int a228;
+ public int a229;
+ public int a230;
+ public int a231;
+ public int a232;
+ public int a233;
+ public int a234;
+ public int a235;
+ public int a236;
+ public int a237;
+ public int a238;
+ public int a239;
+ public int a240;
+ public int a241;
+ public int a242;
+ public int a243;
+ public int a244;
+ public int a245;
+ public int a246;
+ public int a247;
+ public int a248;
+ public int a249;
+ public int a250;
+ public int a251;
+ public int a252;
+ public int a253;
+ public int a254;
+ public int a255;
+ public int a256;
+ public int a257;
+ public int a258;
+ public int a259;
+ public int a260;
+ public int a261;
+ public int a262;
+ public int a263;
+ public int a264;
+ public int a265;
+ public int a266;
+ public int a267;
+ public int a268;
+ public int a269;
+ public int a270;
+ public int a271;
+ public int a272;
+ public int a273;
+ public int a274;
+ public int a275;
+ public int a276;
+ public int a277;
+ public int a278;
+ public int a279;
+ public int a280;
+ public int a281;
+ public int a282;
+ public int a283;
+ public int a284;
+ public int a285;
+ public int a286;
+ public int a287;
+ public int a288;
+ public int a289;
+ public int a290;
+ public int a291;
+ public int a292;
+ public int a293;
+ public int a294;
+ public int a295;
+ public int a296;
+ public int a297;
+ public int a298;
+ public int a299;
+ public int a300;
+ public int a301;
+ public int a302;
+ public int a303;
+ public int a304;
+ public int a305;
+ public int a306;
+ public int a307;
+ public int a308;
+ public int a309;
+ public int a310;
+ public int a311;
+ public int a312;
+ public int a313;
+ public int a314;
+ public int a315;
+ public int a316;
+ public int a317;
+ public int a318;
+ public int a319;
+ public int a320;
+ public int a321;
+ public int a322;
+ public int a323;
+ public int a324;
+ public int a325;
+ public int a326;
+ public int a327;
+ public int a328;
+ public int a329;
+ public int a330;
+ public int a331;
+ public int a332;
+ public int a333;
+ public int a334;
+ public int a335;
+ public int a336;
+ public int a337;
+ public int a338;
+ public int a339;
+ public int a340;
+ public int a341;
+ public int a342;
+ public int a343;
+ public int a344;
+ public int a345;
+ public int a346;
+ public int a347;
+ public int a348;
+ public int a349;
+ public int a350;
+ public int a351;
+ public int a352;
+ public int a353;
+ public int a354;
+ public int a355;
+ public int a356;
+ public int a357;
+ public int a358;
+ public int a359;
+ public int a360;
+ public int a361;
+ public int a362;
+ public int a363;
+ public int a364;
+ public int a365;
+ public int a366;
+ public int a367;
+ public int a368;
+ public int a369;
+ public int a370;
+ public int a371;
+ public int a372;
+ public int a373;
+ public int a374;
+ public int a375;
+ public int a376;
+ public int a377;
+ public int a378;
+ public int a379;
+ public int a380;
+ public int a381;
+ public int a382;
+ public int a383;
+ public int a384;
+ public int a385;
+ public int a386;
+ public int a387;
+ public int a388;
+ public int a389;
+ public int a390;
+ public int a391;
+ public int a392;
+ public int a393;
+ public int a394;
+ public int a395;
+ public int a396;
+ public int a397;
+ public int a398;
+ public int a399;
+ public int a400;
+ public int a401;
+ public int a402;
+ public int a403;
+ public int a404;
+ public int a405;
+ public int a406;
+ public int a407;
+ public int a408;
+ public int a409;
+ public int a410;
+ public int a411;
+ public int a412;
+ public int a413;
+ public int a414;
+ public int a415;
+ public int a416;
+ public int a417;
+ public int a418;
+ public int a419;
+ public int a420;
+ public int a421;
+ public int a422;
+ public int a423;
+ public int a424;
+ public int a425;
+ public int a426;
+ public int a427;
+ public int a428;
+ public int a429;
+ public int a430;
+ public int a431;
+ public int a432;
+ public int a433;
+ public int a434;
+ public int a435;
+ public int a436;
+ public int a437;
+ public int a438;
+ public int a439;
+ public int a440;
+ public int a441;
+ public int a442;
+ public int a443;
+ public int a444;
+ public int a445;
+ public int a446;
+ public int a447;
+ public int a448;
+ public int a449;
+ public int a450;
+ public int a451;
+ public int a452;
+ public int a453;
+ public int a454;
+ public int a455;
+ public int a456;
+ public int a457;
+ public int a458;
+ public int a459;
+ public int a460;
+ public int a461;
+ public int a462;
+ public int a463;
+ public int a464;
+ public int a465;
+ public int a466;
+ public int a467;
+ public int a468;
+ public int a469;
+ public int a470;
+ public int a471;
+ public int a472;
+ public int a473;
+ public int a474;
+ public int a475;
+ public int a476;
+ public int a477;
+ public int a478;
+ public int a479;
+ public int a480;
+ public int a481;
+ public int a482;
+ public int a483;
+ public int a484;
+ public int a485;
+ public int a486;
+ public int a487;
+ public int a488;
+ public int a489;
+ public int a490;
+ public int a491;
+ public int a492;
+ public int a493;
+ public int a494;
+ public int a495;
+ public int a496;
+ public int a497;
+ public int a498;
+ public int a499;
+ public int a500;
+ public int a501;
+ public int a502;
+ public int a503;
+ public int a504;
+ public int a505;
+ public int a506;
+ public int a507;
+ public int a508;
+ public int a509;
+ public int a510;
+ public int a511;
+ public int a512;
+ public int a513;
+ public int a514;
+ public int a515;
+ public int a516;
+ public int a517;
+ public int a518;
+ public int a519;
+ public int a520;
+ public int a521;
+ public int a522;
+ public int a523;
+ public int a524;
+ public int a525;
+ public int a526;
+ public int a527;
+ public int a528;
+ public int a529;
+ public int a530;
+ public int a531;
+ public int a532;
+ public int a533;
+ public int a534;
+ public int a535;
+ public int a536;
+ public int a537;
+ public int a538;
+ public int a539;
+ public int a540;
+ public int a541;
+ public int a542;
+ public int a543;
+ public int a544;
+ public int a545;
+ public int a546;
+ public int a547;
+ public int a548;
+ public int a549;
+ public int a550;
+ public int a551;
+ public int a552;
+ public int a553;
+ public int a554;
+ public int a555;
+ public int a556;
+ public int a557;
+ public int a558;
+ public int a559;
+ public int a560;
+ public int a561;
+ public int a562;
+ public int a563;
+ public int a564;
+ public int a565;
+ public int a566;
+ public int a567;
+ public int a568;
+ public int a569;
+ public int a570;
+ public int a571;
+ public int a572;
+ public int a573;
+ public int a574;
+ public int a575;
+ public int a576;
+ public int a577;
+ public int a578;
+ public int a579;
+ public int a580;
+ public int a581;
+ public int a582;
+ public int a583;
+ public int a584;
+ public int a585;
+ public int a586;
+ public int a587;
+ public int a588;
+ public int a589;
+ public int a590;
+ public int a591;
+ public int a592;
+ public int a593;
+ public int a594;
+ public int a595;
+ public int a596;
+ public int a597;
+ public int a598;
+ public int a599;
+ public int a600;
+ public int a601;
+ public int a602;
+ public int a603;
+ public int a604;
+ public int a605;
+ public int a606;
+ public int a607;
+ public int a608;
+ public int a609;
+ public int a610;
+ public int a611;
+ public int a612;
+ public int a613;
+ public int a614;
+ public int a615;
+ public int a616;
+ public int a617;
+ public int a618;
+ public int a619;
+ public int a620;
+ public int a621;
+ public int a622;
+ public int a623;
+ public int a624;
+ public int a625;
+ public int a626;
+ public int a627;
+ public int a628;
+ public int a629;
+ public int a630;
+ public int a631;
+ public int a632;
+ public int a633;
+ public int a634;
+ public int a635;
+ public int a636;
+ public int a637;
+ public int a638;
+ public int a639;
+ public int a640;
+ public int a641;
+ public int a642;
+ public int a643;
+ public int a644;
+ public int a645;
+ public int a646;
+ public int a647;
+ public int a648;
+ public int a649;
+ public int a650;
+ public int a651;
+ public int a652;
+ public int a653;
+ public int a654;
+ public int a655;
+ public int a656;
+ public int a657;
+ public int a658;
+ public int a659;
+ public int a660;
+ public int a661;
+ public int a662;
+ public int a663;
+ public int a664;
+ public int a665;
+ public int a666;
+ public int a667;
+ public int a668;
+ public int a669;
+ public int a670;
+ public int a671;
+ public int a672;
+ public int a673;
+ public int a674;
+ public int a675;
+ public int a676;
+ public int a677;
+ public int a678;
+ public int a679;
+ public int a680;
+ public int a681;
+ public int a682;
+ public int a683;
+ public int a684;
+ public int a685;
+ public int a686;
+ public int a687;
+ public int a688;
+ public int a689;
+ public int a690;
+ public int a691;
+ public int a692;
+ public int a693;
+ public int a694;
+ public int a695;
+ public int a696;
+ public int a697;
+ public int a698;
+ public int a699;
+ public int a700;
+ public int a701;
+ public int a702;
+ public int a703;
+ public int a704;
+ public int a705;
+ public int a706;
+ public int a707;
+ public int a708;
+ public int a709;
+ public int a710;
+ public int a711;
+ public int a712;
+ public int a713;
+ public int a714;
+ public int a715;
+ public int a716;
+ public int a717;
+ public int a718;
+ public int a719;
+ public int a720;
+ public int a721;
+ public int a722;
+ public int a723;
+ public int a724;
+ public int a725;
+ public int a726;
+ public int a727;
+ public int a728;
+ public int a729;
+ public int a730;
+ public int a731;
+ public int a732;
+ public int a733;
+ public int a734;
+ public int a735;
+ public int a736;
+ public int a737;
+ public int a738;
+ public int a739;
+ public int a740;
+ public int a741;
+ public int a742;
+ public int a743;
+ public int a744;
+ public int a745;
+ public int a746;
+ public int a747;
+ public int a748;
+ public int a749;
+ public int a750;
+ public int a751;
+ public int a752;
+ public int a753;
+ public int a754;
+ public int a755;
+ public int a756;
+ public int a757;
+ public int a758;
+ public int a759;
+ public int a760;
+ public int a761;
+ public int a762;
+ public int a763;
+ public int a764;
+ public int a765;
+ public int a766;
+ public int a767;
+ public int a768;
+ public int a769;
+ public int a770;
+ public int a771;
+ public int a772;
+ public int a773;
+ public int a774;
+ public int a775;
+ public int a776;
+ public int a777;
+ public int a778;
+ public int a779;
+ public int a780;
+ public int a781;
+ public int a782;
+ public int a783;
+ public int a784;
+ public int a785;
+ public int a786;
+ public int a787;
+ public int a788;
+ public int a789;
+ public int a790;
+ public int a791;
+ public int a792;
+ public int a793;
+ public int a794;
+ public int a795;
+ public int a796;
+ public int a797;
+ public int a798;
+ public int a799;
+ public int a800;
+ public int a801;
+ public int a802;
+ public int a803;
+ public int a804;
+ public int a805;
+ public int a806;
+ public int a807;
+ public int a808;
+ public int a809;
+ public int a810;
+ public int a811;
+ public int a812;
+ public int a813;
+ public int a814;
+ public int a815;
+ public int a816;
+ public int a817;
+ public int a818;
+ public int a819;
+ public int a820;
+ public int a821;
+ public int a822;
+ public int a823;
+ public int a824;
+ public int a825;
+ public int a826;
+ public int a827;
+ public int a828;
+ public int a829;
+ public int a830;
+ public int a831;
+ public int a832;
+ public int a833;
+ public int a834;
+ public int a835;
+ public int a836;
+ public int a837;
+ public int a838;
+ public int a839;
+ public int a840;
+ public int a841;
+ public int a842;
+ public int a843;
+ public int a844;
+ public int a845;
+ public int a846;
+ public int a847;
+ public int a848;
+ public int a849;
+ public int a850;
+ public int a851;
+ public int a852;
+ public int a853;
+ public int a854;
+ public int a855;
+ public int a856;
+ public int a857;
+ public int a858;
+ public int a859;
+ public int a860;
+ public int a861;
+ public int a862;
+ public int a863;
+ public int a864;
+ public int a865;
+ public int a866;
+ public int a867;
+ public int a868;
+ public int a869;
+ public int a870;
+ public int a871;
+ public int a872;
+ public int a873;
+ public int a874;
+ public int a875;
+ public int a876;
+ public int a877;
+ public int a878;
+ public int a879;
+ public int a880;
+ public int a881;
+ public int a882;
+ public int a883;
+ public int a884;
+ public int a885;
+ public int a886;
+ public int a887;
+ public int a888;
+ public int a889;
+ public int a890;
+ public int a891;
+ public int a892;
+ public int a893;
+ public int a894;
+ public int a895;
+ public int a896;
+ public int a897;
+ public int a898;
+ public int a899;
+ public int a900;
+ public int a901;
+ public int a902;
+ public int a903;
+ public int a904;
+ public int a905;
+ public int a906;
+ public int a907;
+ public int a908;
+ public int a909;
+ public int a910;
+ public int a911;
+ public int a912;
+ public int a913;
+ public int a914;
+ public int a915;
+ public int a916;
+ public int a917;
+ public int a918;
+ public int a919;
+ public int a920;
+ public int a921;
+ public int a922;
+ public int a923;
+ public int a924;
+ public int a925;
+ public int a926;
+ public int a927;
+ public int a928;
+ public int a929;
+ public int a930;
+ public int a931;
+ public int a932;
+ public int a933;
+ public int a934;
+ public int a935;
+ public int a936;
+ public int a937;
+ public int a938;
+ public int a939;
+ public int a940;
+ public int a941;
+ public int a942;
+ public int a943;
+ public int a944;
+ public int a945;
+ public int a946;
+ public int a947;
+ public int a948;
+ public int a949;
+ public int a950;
+ public int a951;
+ public int a952;
+ public int a953;
+ public int a954;
+ public int a955;
+ public int a956;
+ public int a957;
+ public int a958;
+ public int a959;
+ public int a960;
+ public int a961;
+ public int a962;
+ public int a963;
+ public int a964;
+ public int a965;
+ public int a966;
+ public int a967;
+ public int a968;
+ public int a969;
+ public int a970;
+ public int a971;
+ public int a972;
+ public int a973;
+ public int a974;
+ public int a975;
+ public int a976;
+ public int a977;
+ public int a978;
+ public int a979;
+ public int a980;
+ public int a981;
+ public int a982;
+ public int a983;
+ public int a984;
+ public int a985;
+ public int a986;
+ public int a987;
+ public int a988;
+ public int a989;
+ public int a990;
+ public int a991;
+ public int a992;
+ public int a993;
+ public int a994;
+ public int a995;
+ public int a996;
+ public int a997;
+ public int a998;
+ public int a999;
+ public int a1000;
+ public int a1001;
+ public int a1002;
+ public int a1003;
+ public int a1004;
+ public int a1005;
+ public int a1006;
+ public int a1007;
+ public int a1008;
+ public int a1009;
+ public int a1010;
+ public int a1011;
+ public int a1012;
+ public int a1013;
+ public int a1014;
+ public int a1015;
+ public int a1016;
+ public int a1017;
+ public int a1018;
+ public int a1019;
+ public int a1020;
+ public int a1021;
+ public int a1022;
+ public int a1023;
+ public int a1024;
+ public int a1025;
+ public int a1026;
+ public int a1027;
+ public int a1028;
+ public int a1029;
+ public int a1030;
+ public int a1031;
+ public int a1032;
+ public int a1033;
+ public int a1034;
+ public int a1035;
+ public int a1036;
+ public int a1037;
+ public int a1038;
+ public int a1039;
+ public int a1040;
+ public int a1041;
+ public int a1042;
+ public int a1043;
+ public int a1044;
+ public int a1045;
+ public int a1046;
+ public int a1047;
+ public int a1048;
+ public int a1049;
+ public int a1050;
+ public int a1051;
+ public int a1052;
+ public int a1053;
+ public int a1054;
+ public int a1055;
+ public int a1056;
+ public int a1057;
+ public int a1058;
+ public int a1059;
+ public int a1060;
+ public int a1061;
+ public int a1062;
+ public int a1063;
+ public int a1064;
+ public int a1065;
+ public int a1066;
+ public int a1067;
+ public int a1068;
+ public int a1069;
+ public int a1070;
+ public int a1071;
+ public int a1072;
+ public int a1073;
+ public int a1074;
+ public int a1075;
+ public int a1076;
+ public int a1077;
+ public int a1078;
+ public int a1079;
+ public int a1080;
+ public int a1081;
+ public int a1082;
+ public int a1083;
+ public int a1084;
+ public int a1085;
+ public int a1086;
+ public int a1087;
+ public int a1088;
+ public int a1089;
+ public int a1090;
+ public int a1091;
+ public int a1092;
+ public int a1093;
+ public int a1094;
+ public int a1095;
+ public int a1096;
+ public int a1097;
+ public int a1098;
+ public int a1099;
+ public int a1100;
+ public int a1101;
+ public int a1102;
+ public int a1103;
+ public int a1104;
+ public int a1105;
+ public int a1106;
+ public int a1107;
+ public int a1108;
+ public int a1109;
+ public int a1110;
+ public int a1111;
+ public int a1112;
+ public int a1113;
+ public int a1114;
+ public int a1115;
+ public int a1116;
+ public int a1117;
+ public int a1118;
+ public int a1119;
+ public int a1120;
+ public int a1121;
+ public int a1122;
+ public int a1123;
+ public int a1124;
+ public int a1125;
+ public int a1126;
+ public int a1127;
+ public int a1128;
+ public int a1129;
+ public int a1130;
+ public int a1131;
+ public int a1132;
+ public int a1133;
+ public int a1134;
+ public int a1135;
+ public int a1136;
+ public int a1137;
+ public int a1138;
+ public int a1139;
+ public int a1140;
+ public int a1141;
+ public int a1142;
+ public int a1143;
+ public int a1144;
+ public int a1145;
+ public int a1146;
+ public int a1147;
+ public int a1148;
+ public int a1149;
+ public int a1150;
+ public int a1151;
+ public int a1152;
+ public int a1153;
+ public int a1154;
+ public int a1155;
+ public int a1156;
+ public int a1157;
+ public int a1158;
+ public int a1159;
+ public int a1160;
+ public int a1161;
+ public int a1162;
+ public int a1163;
+ public int a1164;
+ public int a1165;
+ public int a1166;
+ public int a1167;
+ public int a1168;
+ public int a1169;
+ public int a1170;
+ public int a1171;
+ public int a1172;
+ public int a1173;
+ public int a1174;
+ public int a1175;
+ public int a1176;
+ public int a1177;
+ public int a1178;
+ public int a1179;
+ public int a1180;
+ public int a1181;
+ public int a1182;
+ public int a1183;
+ public int a1184;
+ public int a1185;
+ public int a1186;
+ public int a1187;
+ public int a1188;
+ public int a1189;
+ public int a1190;
+ public int a1191;
+ public int a1192;
+ public int a1193;
+ public int a1194;
+ public int a1195;
+ public int a1196;
+ public int a1197;
+ public int a1198;
+ public int a1199;
+ public int a1200;
+ public int a1201;
+ public int a1202;
+ public int a1203;
+ public int a1204;
+ public int a1205;
+ public int a1206;
+ public int a1207;
+ public int a1208;
+ public int a1209;
+ public int a1210;
+ public int a1211;
+ public int a1212;
+ public int a1213;
+ public int a1214;
+ public int a1215;
+ public int a1216;
+ public int a1217;
+ public int a1218;
+ public int a1219;
+ public int a1220;
+ public int a1221;
+ public int a1222;
+ public int a1223;
+ public int a1224;
+ public int a1225;
+ public int a1226;
+ public int a1227;
+ public int a1228;
+ public int a1229;
+ public int a1230;
+ public int a1231;
+ public int a1232;
+ public int a1233;
+ public int a1234;
+ public int a1235;
+ public int a1236;
+ public int a1237;
+ public int a1238;
+ public int a1239;
+ public int a1240;
+ public int a1241;
+ public int a1242;
+ public int a1243;
+ public int a1244;
+ public int a1245;
+ public int a1246;
+ public int a1247;
+ public int a1248;
+ public int a1249;
+ public int a1250;
+ public int a1251;
+ public int a1252;
+ public int a1253;
+ public int a1254;
+ public int a1255;
+ public int a1256;
+ public int a1257;
+ public int a1258;
+ public int a1259;
+ public int a1260;
+ public int a1261;
+ public int a1262;
+ public int a1263;
+ public int a1264;
+ public int a1265;
+ public int a1266;
+ public int a1267;
+ public int a1268;
+ public int a1269;
+ public int a1270;
+ public int a1271;
+ public int a1272;
+ public int a1273;
+ public int a1274;
+ public int a1275;
+ public int a1276;
+ public int a1277;
+ public int a1278;
+ public int a1279;
+ public int a1280;
+ public int a1281;
+ public int a1282;
+ public int a1283;
+ public int a1284;
+ public int a1285;
+ public int a1286;
+ public int a1287;
+ public int a1288;
+ public int a1289;
+ public int a1290;
+ public int a1291;
+ public int a1292;
+ public int a1293;
+ public int a1294;
+ public int a1295;
+ public int a1296;
+ public int a1297;
+ public int a1298;
+ public int a1299;
+ public int a1300;
+ public int a1301;
+ public int a1302;
+ public int a1303;
+ public int a1304;
+ public int a1305;
+ public int a1306;
+ public int a1307;
+ public int a1308;
+ public int a1309;
+ public int a1310;
+ public int a1311;
+ public int a1312;
+ public int a1313;
+ public int a1314;
+ public int a1315;
+ public int a1316;
+ public int a1317;
+ public int a1318;
+ public int a1319;
+ public int a1320;
+ public int a1321;
+ public int a1322;
+ public int a1323;
+ public int a1324;
+ public int a1325;
+ public int a1326;
+ public int a1327;
+ public int a1328;
+ public int a1329;
+ public int a1330;
+ public int a1331;
+ public int a1332;
+ public int a1333;
+ public int a1334;
+ public int a1335;
+ public int a1336;
+ public int a1337;
+ public int a1338;
+ public int a1339;
+ public int a1340;
+ public int a1341;
+ public int a1342;
+ public int a1343;
+ public int a1344;
+ public int a1345;
+ public int a1346;
+ public int a1347;
+ public int a1348;
+ public int a1349;
+ public int a1350;
+ public int a1351;
+ public int a1352;
+ public int a1353;
+ public int a1354;
+ public int a1355;
+ public int a1356;
+ public int a1357;
+ public int a1358;
+ public int a1359;
+ public int a1360;
+ public int a1361;
+ public int a1362;
+ public int a1363;
+ public int a1364;
+ public int a1365;
+ public int a1366;
+ public int a1367;
+ public int a1368;
+ public int a1369;
+ public int a1370;
+ public int a1371;
+ public int a1372;
+ public int a1373;
+ public int a1374;
+ public int a1375;
+ public int a1376;
+ public int a1377;
+ public int a1378;
+ public int a1379;
+ public int a1380;
+ public int a1381;
+ public int a1382;
+ public int a1383;
+ public int a1384;
+ public int a1385;
+ public int a1386;
+ public int a1387;
+ public int a1388;
+ public int a1389;
+ public int a1390;
+ public int a1391;
+ public int a1392;
+ public int a1393;
+ public int a1394;
+ public int a1395;
+ public int a1396;
+ public int a1397;
+ public int a1398;
+ public int a1399;
+ public int a1400;
+ public int a1401;
+ public int a1402;
+ public int a1403;
+ public int a1404;
+ public int a1405;
+ public int a1406;
+ public int a1407;
+ public int a1408;
+ public int a1409;
+ public int a1410;
+ public int a1411;
+ public int a1412;
+ public int a1413;
+ public int a1414;
+ public int a1415;
+ public int a1416;
+ public int a1417;
+ public int a1418;
+ public int a1419;
+ public int a1420;
+ public int a1421;
+ public int a1422;
+ public int a1423;
+ public int a1424;
+ public int a1425;
+ public int a1426;
+ public int a1427;
+ public int a1428;
+ public int a1429;
+ public int a1430;
+ public int a1431;
+ public int a1432;
+ public int a1433;
+ public int a1434;
+ public int a1435;
+ public int a1436;
+ public int a1437;
+ public int a1438;
+ public int a1439;
+ public int a1440;
+ public int a1441;
+ public int a1442;
+ public int a1443;
+ public int a1444;
+ public int a1445;
+ public int a1446;
+ public int a1447;
+ public int a1448;
+ public int a1449;
+ public int a1450;
+ public int a1451;
+ public int a1452;
+ public int a1453;
+ public int a1454;
+ public int a1455;
+ public int a1456;
+ public int a1457;
+ public int a1458;
+ public int a1459;
+ public int a1460;
+ public int a1461;
+ public int a1462;
+ public int a1463;
+ public int a1464;
+ public int a1465;
+ public int a1466;
+ public int a1467;
+ public int a1468;
+ public int a1469;
+ public int a1470;
+ public int a1471;
+ public int a1472;
+ public int a1473;
+ public int a1474;
+ public int a1475;
+ public int a1476;
+ public int a1477;
+ public int a1478;
+ public int a1479;
+ public int a1480;
+ public int a1481;
+ public int a1482;
+ public int a1483;
+ public int a1484;
+ public int a1485;
+ public int a1486;
+ public int a1487;
+ public int a1488;
+ public int a1489;
+ public int a1490;
+ public int a1491;
+ public int a1492;
+ public int a1493;
+ public int a1494;
+ public int a1495;
+ public int a1496;
+ public int a1497;
+ public int a1498;
+ public int a1499;
+ public int a1500;
+ public int a1501;
+ public int a1502;
+ public int a1503;
+ public int a1504;
+ public int a1505;
+ public int a1506;
+ public int a1507;
+ public int a1508;
+ public int a1509;
+ public int a1510;
+ public int a1511;
+ public int a1512;
+ public int a1513;
+ public int a1514;
+ public int a1515;
+ public int a1516;
+ public int a1517;
+ public int a1518;
+ public int a1519;
+ public int a1520;
+ public int a1521;
+ public int a1522;
+ public int a1523;
+ public int a1524;
+ public int a1525;
+ public int a1526;
+ public int a1527;
+ public int a1528;
+ public int a1529;
+ public int a1530;
+ public int a1531;
+ public int a1532;
+ public int a1533;
+ public int a1534;
+ public int a1535;
+ public int a1536;
+ public int a1537;
+ public int a1538;
+ public int a1539;
+ public int a1540;
+ public int a1541;
+ public int a1542;
+ public int a1543;
+ public int a1544;
+ public int a1545;
+ public int a1546;
+ public int a1547;
+ public int a1548;
+ public int a1549;
+ public int a1550;
+ public int a1551;
+ public int a1552;
+ public int a1553;
+ public int a1554;
+ public int a1555;
+ public int a1556;
+ public int a1557;
+ public int a1558;
+ public int a1559;
+ public int a1560;
+ public int a1561;
+ public int a1562;
+ public int a1563;
+ public int a1564;
+ public int a1565;
+ public int a1566;
+ public int a1567;
+ public int a1568;
+ public int a1569;
+ public int a1570;
+ public int a1571;
+ public int a1572;
+ public int a1573;
+ public int a1574;
+ public int a1575;
+ public int a1576;
+ public int a1577;
+ public int a1578;
+ public int a1579;
+ public int a1580;
+ public int a1581;
+ public int a1582;
+ public int a1583;
+ public int a1584;
+ public int a1585;
+ public int a1586;
+ public int a1587;
+ public int a1588;
+ public int a1589;
+ public int a1590;
+ public int a1591;
+ public int a1592;
+ public int a1593;
+ public int a1594;
+ public int a1595;
+ public int a1596;
+ public int a1597;
+ public int a1598;
+ public int a1599;
+ public int a1600;
+ public int a1601;
+ public int a1602;
+ public int a1603;
+ public int a1604;
+ public int a1605;
+ public int a1606;
+ public int a1607;
+ public int a1608;
+ public int a1609;
+ public int a1610;
+ public int a1611;
+ public int a1612;
+ public int a1613;
+ public int a1614;
+ public int a1615;
+ public int a1616;
+ public int a1617;
+ public int a1618;
+ public int a1619;
+ public int a1620;
+ public int a1621;
+ public int a1622;
+ public int a1623;
+ public int a1624;
+ public int a1625;
+ public int a1626;
+ public int a1627;
+ public int a1628;
+ public int a1629;
+ public int a1630;
+ public int a1631;
+ public int a1632;
+ public int a1633;
+ public int a1634;
+ public int a1635;
+ public int a1636;
+ public int a1637;
+ public int a1638;
+ public int a1639;
+ public int a1640;
+ public int a1641;
+ public int a1642;
+ public int a1643;
+ public int a1644;
+ public int a1645;
+ public int a1646;
+ public int a1647;
+ public int a1648;
+ public int a1649;
+ public int a1650;
+ public int a1651;
+ public int a1652;
+ public int a1653;
+ public int a1654;
+ public int a1655;
+ public int a1656;
+ public int a1657;
+ public int a1658;
+ public int a1659;
+ public int a1660;
+ public int a1661;
+ public int a1662;
+ public int a1663;
+ public int a1664;
+ public int a1665;
+ public int a1666;
+ public int a1667;
+ public int a1668;
+ public int a1669;
+ public int a1670;
+ public int a1671;
+ public int a1672;
+ public int a1673;
+ public int a1674;
+ public int a1675;
+ public int a1676;
+ public int a1677;
+ public int a1678;
+ public int a1679;
+ public int a1680;
+ public int a1681;
+ public int a1682;
+ public int a1683;
+ public int a1684;
+ public int a1685;
+ public int a1686;
+ public int a1687;
+ public int a1688;
+ public int a1689;
+ public int a1690;
+ public int a1691;
+ public int a1692;
+ public int a1693;
+ public int a1694;
+ public int a1695;
+ public int a1696;
+ public int a1697;
+ public int a1698;
+ public int a1699;
+ public int a1700;
+ public int a1701;
+ public int a1702;
+ public int a1703;
+ public int a1704;
+ public int a1705;
+ public int a1706;
+ public int a1707;
+ public int a1708;
+ public int a1709;
+ public int a1710;
+ public int a1711;
+ public int a1712;
+ public int a1713;
+ public int a1714;
+ public int a1715;
+ public int a1716;
+ public int a1717;
+ public int a1718;
+ public int a1719;
+ public int a1720;
+ public int a1721;
+ public int a1722;
+ public int a1723;
+ public int a1724;
+ public int a1725;
+ public int a1726;
+ public int a1727;
+ public int a1728;
+ public int a1729;
+ public int a1730;
+ public int a1731;
+ public int a1732;
+ public int a1733;
+ public int a1734;
+ public int a1735;
+ public int a1736;
+ public int a1737;
+ public int a1738;
+ public int a1739;
+ public int a1740;
+ public int a1741;
+ public int a1742;
+ public int a1743;
+ public int a1744;
+ public int a1745;
+ public int a1746;
+ public int a1747;
+ public int a1748;
+ public int a1749;
+ public int a1750;
+ public int a1751;
+ public int a1752;
+ public int a1753;
+ public int a1754;
+ public int a1755;
+ public int a1756;
+ public int a1757;
+ public int a1758;
+ public int a1759;
+ public int a1760;
+ public int a1761;
+ public int a1762;
+ public int a1763;
+ public int a1764;
+ public int a1765;
+ public int a1766;
+ public int a1767;
+ public int a1768;
+ public int a1769;
+ public int a1770;
+ public int a1771;
+ public int a1772;
+ public int a1773;
+ public int a1774;
+ public int a1775;
+ public int a1776;
+ public int a1777;
+ public int a1778;
+ public int a1779;
+ public int a1780;
+ public int a1781;
+ public int a1782;
+ public int a1783;
+ public int a1784;
+ public int a1785;
+ public int a1786;
+ public int a1787;
+ public int a1788;
+ public int a1789;
+ public int a1790;
+ public int a1791;
+ public int a1792;
+ public int a1793;
+ public int a1794;
+ public int a1795;
+ public int a1796;
+ public int a1797;
+ public int a1798;
+ public int a1799;
+ public int a1800;
+ public int a1801;
+ public int a1802;
+ public int a1803;
+ public int a1804;
+ public int a1805;
+ public int a1806;
+ public int a1807;
+ public int a1808;
+ public int a1809;
+ public int a1810;
+ public int a1811;
+ public int a1812;
+ public int a1813;
+ public int a1814;
+ public int a1815;
+ public int a1816;
+ public int a1817;
+ public int a1818;
+ public int a1819;
+ public int a1820;
+ public int a1821;
+ public int a1822;
+ public int a1823;
+ public int a1824;
+ public int a1825;
+ public int a1826;
+ public int a1827;
+ public int a1828;
+ public int a1829;
+ public int a1830;
+ public int a1831;
+ public int a1832;
+ public int a1833;
+ public int a1834;
+ public int a1835;
+ public int a1836;
+ public int a1837;
+ public int a1838;
+ public int a1839;
+ public int a1840;
+ public int a1841;
+ public int a1842;
+ public int a1843;
+ public int a1844;
+ public int a1845;
+ public int a1846;
+ public int a1847;
+ public int a1848;
+ public int a1849;
+ public int a1850;
+ public int a1851;
+ public int a1852;
+ public int a1853;
+ public int a1854;
+ public int a1855;
+ public int a1856;
+ public int a1857;
+ public int a1858;
+ public int a1859;
+ public int a1860;
+ public int a1861;
+ public int a1862;
+ public int a1863;
+ public int a1864;
+ public int a1865;
+ public int a1866;
+ public int a1867;
+ public int a1868;
+ public int a1869;
+ public int a1870;
+ public int a1871;
+ public int a1872;
+ public int a1873;
+ public int a1874;
+ public int a1875;
+ public int a1876;
+ public int a1877;
+ public int a1878;
+ public int a1879;
+ public int a1880;
+ public int a1881;
+ public int a1882;
+ public int a1883;
+ public int a1884;
+ public int a1885;
+ public int a1886;
+ public int a1887;
+ public int a1888;
+ public int a1889;
+ public int a1890;
+ public int a1891;
+ public int a1892;
+ public int a1893;
+ public int a1894;
+ public int a1895;
+ public int a1896;
+ public int a1897;
+ public int a1898;
+ public int a1899;
+ public int a1900;
+ public int a1901;
+ public int a1902;
+ public int a1903;
+ public int a1904;
+ public int a1905;
+ public int a1906;
+ public int a1907;
+ public int a1908;
+ public int a1909;
+ public int a1910;
+ public int a1911;
+ public int a1912;
+ public int a1913;
+ public int a1914;
+ public int a1915;
+ public int a1916;
+ public int a1917;
+ public int a1918;
+ public int a1919;
+ public int a1920;
+ public int a1921;
+ public int a1922;
+ public int a1923;
+ public int a1924;
+ public int a1925;
+ public int a1926;
+ public int a1927;
+ public int a1928;
+ public int a1929;
+ public int a1930;
+ public int a1931;
+ public int a1932;
+ public int a1933;
+ public int a1934;
+ public int a1935;
+ public int a1936;
+ public int a1937;
+ public int a1938;
+ public int a1939;
+ public int a1940;
+ public int a1941;
+ public int a1942;
+ public int a1943;
+ public int a1944;
+ public int a1945;
+ public int a1946;
+ public int a1947;
+ public int a1948;
+ public int a1949;
+ public int a1950;
+ public int a1951;
+ public int a1952;
+ public int a1953;
+ public int a1954;
+ public int a1955;
+ public int a1956;
+ public int a1957;
+ public int a1958;
+ public int a1959;
+ public int a1960;
+ public int a1961;
+ public int a1962;
+ public int a1963;
+ public int a1964;
+ public int a1965;
+ public int a1966;
+ public int a1967;
+ public int a1968;
+ public int a1969;
+ public int a1970;
+ public int a1971;
+ public int a1972;
+ public int a1973;
+ public int a1974;
+ public int a1975;
+ public int a1976;
+ public int a1977;
+ public int a1978;
+ public int a1979;
+ public int a1980;
+ public int a1981;
+ public int a1982;
+ public int a1983;
+ public int a1984;
+ public int a1985;
+ public int a1986;
+ public int a1987;
+ public int a1988;
+ public int a1989;
+ public int a1990;
+ public int a1991;
+ public int a1992;
+ public int a1993;
+ public int a1994;
+ public int a1995;
+ public int a1996;
+ public int a1997;
+ public int a1998;
+ public int a1999;
+ public int a2000;
+ public int a2001;
+ public int a2002;
+ public int a2003;
+ public int a2004;
+ public int a2005;
+ public int a2006;
+ public int a2007;
+ public int a2008;
+ public int a2009;
+ public int a2010;
+ public int a2011;
+ public int a2012;
+ public int a2013;
+ public int a2014;
+ public int a2015;
+ public int a2016;
+ public int a2017;
+ public int a2018;
+ public int a2019;
+ public int a2020;
+ public int a2021;
+ public int a2022;
+ public int a2023;
+ public int a2024;
+ public int a2025;
+ public int a2026;
+ public int a2027;
+ public int a2028;
+ public int a2029;
+ public int a2030;
+ public int a2031;
+ public int a2032;
+ public int a2033;
+ public int a2034;
+ public int a2035;
+ public int a2036;
+ public int a2037;
+ public int a2038;
+ public int a2039;
+ public int a2040;
+ public int a2041;
+ public int a2042;
+ public int a2043;
+ public int a2044;
+ public int a2045;
+ public int a2046;
+ public int a2047;
+ public int a2048;
+ public int a2049;
+ public int a2050;
+ public int a2051;
+ public int a2052;
+ public int a2053;
+ public int a2054;
+ public int a2055;
+ public int a2056;
+ public int a2057;
+ public int a2058;
+ public int a2059;
+ public int a2060;
+ public int a2061;
+ public int a2062;
+ public int a2063;
+ public int a2064;
+ public int a2065;
+ public int a2066;
+ public int a2067;
+ public int a2068;
+ public int a2069;
+ public int a2070;
+ public int a2071;
+ public int a2072;
+ public int a2073;
+ public int a2074;
+ public int a2075;
+ public int a2076;
+ public int a2077;
+ public int a2078;
+ public int a2079;
+ public int a2080;
+ public int a2081;
+ public int a2082;
+ public int a2083;
+ public int a2084;
+ public int a2085;
+ public int a2086;
+ public int a2087;
+ public int a2088;
+ public int a2089;
+ public int a2090;
+ public int a2091;
+ public int a2092;
+ public int a2093;
+ public int a2094;
+ public int a2095;
+ public int a2096;
+ public int a2097;
+ public int a2098;
+ public int a2099;
+ public int a2100;
+ public int a2101;
+ public int a2102;
+ public int a2103;
+ public int a2104;
+ public int a2105;
+ public int a2106;
+ public int a2107;
+ public int a2108;
+ public int a2109;
+ public int a2110;
+ public int a2111;
+ public int a2112;
+ public int a2113;
+ public int a2114;
+ public int a2115;
+ public int a2116;
+ public int a2117;
+ public int a2118;
+ public int a2119;
+ public int a2120;
+ public int a2121;
+ public int a2122;
+ public int a2123;
+ public int a2124;
+ public int a2125;
+ public int a2126;
+ public int a2127;
+ public int a2128;
+ public int a2129;
+ public int a2130;
+ public int a2131;
+ public int a2132;
+ public int a2133;
+ public int a2134;
+ public int a2135;
+ public int a2136;
+ public int a2137;
+ public int a2138;
+ public int a2139;
+ public int a2140;
+ public int a2141;
+ public int a2142;
+ public int a2143;
+ public int a2144;
+ public int a2145;
+ public int a2146;
+ public int a2147;
+ public int a2148;
+ public int a2149;
+ public int a2150;
+ public int a2151;
+ public int a2152;
+ public int a2153;
+ public int a2154;
+ public int a2155;
+ public int a2156;
+ public int a2157;
+ public int a2158;
+ public int a2159;
+ public int a2160;
+ public int a2161;
+ public int a2162;
+ public int a2163;
+ public int a2164;
+ public int a2165;
+ public int a2166;
+ public int a2167;
+ public int a2168;
+ public int a2169;
+ public int a2170;
+ public int a2171;
+ public int a2172;
+ public int a2173;
+ public int a2174;
+ public int a2175;
+ public int a2176;
+ public int a2177;
+ public int a2178;
+ public int a2179;
+ public int a2180;
+ public int a2181;
+ public int a2182;
+ public int a2183;
+ public int a2184;
+ public int a2185;
+ public int a2186;
+ public int a2187;
+ public int a2188;
+ public int a2189;
+ public int a2190;
+ public int a2191;
+ public int a2192;
+ public int a2193;
+ public int a2194;
+ public int a2195;
+ public int a2196;
+ public int a2197;
+ public int a2198;
+ public int a2199;
+ public int a2200;
+ public int a2201;
+ public int a2202;
+ public int a2203;
+ public int a2204;
+ public int a2205;
+ public int a2206;
+ public int a2207;
+ public int a2208;
+ public int a2209;
+ public int a2210;
+ public int a2211;
+ public int a2212;
+ public int a2213;
+ public int a2214;
+ public int a2215;
+ public int a2216;
+ public int a2217;
+ public int a2218;
+ public int a2219;
+ public int a2220;
+ public int a2221;
+ public int a2222;
+ public int a2223;
+ public int a2224;
+ public int a2225;
+ public int a2226;
+ public int a2227;
+ public int a2228;
+ public int a2229;
+ public int a2230;
+ public int a2231;
+ public int a2232;
+ public int a2233;
+ public int a2234;
+ public int a2235;
+ public int a2236;
+ public int a2237;
+ public int a2238;
+ public int a2239;
+ public int a2240;
+ public int a2241;
+ public int a2242;
+ public int a2243;
+ public int a2244;
+ public int a2245;
+ public int a2246;
+ public int a2247;
+ public int a2248;
+ public int a2249;
+ public int a2250;
+ public int a2251;
+ public int a2252;
+ public int a2253;
+ public int a2254;
+ public int a2255;
+ public int a2256;
+ public int a2257;
+ public int a2258;
+ public int a2259;
+ public int a2260;
+ public int a2261;
+ public int a2262;
+ public int a2263;
+ public int a2264;
+ public int a2265;
+ public int a2266;
+ public int a2267;
+ public int a2268;
+ public int a2269;
+ public int a2270;
+ public int a2271;
+ public int a2272;
+ public int a2273;
+ public int a2274;
+ public int a2275;
+ public int a2276;
+ public int a2277;
+ public int a2278;
+ public int a2279;
+ public int a2280;
+ public int a2281;
+ public int a2282;
+ public int a2283;
+ public int a2284;
+ public int a2285;
+ public int a2286;
+ public int a2287;
+ public int a2288;
+ public int a2289;
+ public int a2290;
+ public int a2291;
+ public int a2292;
+ public int a2293;
+ public int a2294;
+ public int a2295;
+ public int a2296;
+ public int a2297;
+ public int a2298;
+ public int a2299;
+ public int a2300;
+ public int a2301;
+ public int a2302;
+ public int a2303;
+ public int a2304;
+ public int a2305;
+ public int a2306;
+ public int a2307;
+ public int a2308;
+ public int a2309;
+ public int a2310;
+ public int a2311;
+ public int a2312;
+ public int a2313;
+ public int a2314;
+ public int a2315;
+ public int a2316;
+ public int a2317;
+ public int a2318;
+ public int a2319;
+ public int a2320;
+ public int a2321;
+ public int a2322;
+ public int a2323;
+ public int a2324;
+ public int a2325;
+ public int a2326;
+ public int a2327;
+ public int a2328;
+ public int a2329;
+ public int a2330;
+ public int a2331;
+ public int a2332;
+ public int a2333;
+ public int a2334;
+ public int a2335;
+ public int a2336;
+ public int a2337;
+ public int a2338;
+ public int a2339;
+ public int a2340;
+ public int a2341;
+ public int a2342;
+ public int a2343;
+ public int a2344;
+ public int a2345;
+ public int a2346;
+ public int a2347;
+ public int a2348;
+ public int a2349;
+ public int a2350;
+ public int a2351;
+ public int a2352;
+ public int a2353;
+ public int a2354;
+ public int a2355;
+ public int a2356;
+ public int a2357;
+ public int a2358;
+ public int a2359;
+ public int a2360;
+ public int a2361;
+ public int a2362;
+ public int a2363;
+ public int a2364;
+ public int a2365;
+ public int a2366;
+ public int a2367;
+ public int a2368;
+ public int a2369;
+ public int a2370;
+ public int a2371;
+ public int a2372;
+ public int a2373;
+ public int a2374;
+ public int a2375;
+ public int a2376;
+ public int a2377;
+ public int a2378;
+ public int a2379;
+ public int a2380;
+ public int a2381;
+ public int a2382;
+ public int a2383;
+ public int a2384;
+ public int a2385;
+ public int a2386;
+ public int a2387;
+ public int a2388;
+ public int a2389;
+ public int a2390;
+ public int a2391;
+ public int a2392;
+ public int a2393;
+ public int a2394;
+ public int a2395;
+ public int a2396;
+ public int a2397;
+ public int a2398;
+ public int a2399;
+ public int a2400;
+ public int a2401;
+ public int a2402;
+ public int a2403;
+ public int a2404;
+ public int a2405;
+ public int a2406;
+ public int a2407;
+ public int a2408;
+ public int a2409;
+ public int a2410;
+ public int a2411;
+ public int a2412;
+ public int a2413;
+ public int a2414;
+ public int a2415;
+ public int a2416;
+ public int a2417;
+ public int a2418;
+ public int a2419;
+ public int a2420;
+ public int a2421;
+ public int a2422;
+ public int a2423;
+ public int a2424;
+ public int a2425;
+ public int a2426;
+ public int a2427;
+ public int a2428;
+ public int a2429;
+ public int a2430;
+ public int a2431;
+ public int a2432;
+ public int a2433;
+ public int a2434;
+ public int a2435;
+ public int a2436;
+ public int a2437;
+ public int a2438;
+ public int a2439;
+ public int a2440;
+ public int a2441;
+ public int a2442;
+ public int a2443;
+ public int a2444;
+ public int a2445;
+ public int a2446;
+ public int a2447;
+ public int a2448;
+ public int a2449;
+ public int a2450;
+ public int a2451;
+ public int a2452;
+ public int a2453;
+ public int a2454;
+ public int a2455;
+ public int a2456;
+ public int a2457;
+ public int a2458;
+ public int a2459;
+ public int a2460;
+ public int a2461;
+ public int a2462;
+ public int a2463;
+ public int a2464;
+ public int a2465;
+ public int a2466;
+ public int a2467;
+ public int a2468;
+ public int a2469;
+ public int a2470;
+ public int a2471;
+ public int a2472;
+ public int a2473;
+ public int a2474;
+ public int a2475;
+ public int a2476;
+ public int a2477;
+ public int a2478;
+ public int a2479;
+ public int a2480;
+ public int a2481;
+ public int a2482;
+ public int a2483;
+ public int a2484;
+ public int a2485;
+ public int a2486;
+ public int a2487;
+ public int a2488;
+ public int a2489;
+ public int a2490;
+ public int a2491;
+ public int a2492;
+ public int a2493;
+ public int a2494;
+ public int a2495;
+ public int a2496;
+ public int a2497;
+ public int a2498;
+ public int a2499;
+ public int a2500;
+ public int a2501;
+ public int a2502;
+ public int a2503;
+ public int a2504;
+ public int a2505;
+ public int a2506;
+ public int a2507;
+ public int a2508;
+ public int a2509;
+ public int a2510;
+ public int a2511;
+ public int a2512;
+ public int a2513;
+ public int a2514;
+ public int a2515;
+ public int a2516;
+ public int a2517;
+ public int a2518;
+ public int a2519;
+ public int a2520;
+ public int a2521;
+ public int a2522;
+ public int a2523;
+ public int a2524;
+ public int a2525;
+ public int a2526;
+ public int a2527;
+ public int a2528;
+ public int a2529;
+ public int a2530;
+ public int a2531;
+ public int a2532;
+ public int a2533;
+ public int a2534;
+ public int a2535;
+ public int a2536;
+ public int a2537;
+ public int a2538;
+ public int a2539;
+ public int a2540;
+ public int a2541;
+ public int a2542;
+ public int a2543;
+ public int a2544;
+ public int a2545;
+ public int a2546;
+ public int a2547;
+ public int a2548;
+ public int a2549;
+ public int a2550;
+ public int a2551;
+ public int a2552;
+ public int a2553;
+ public int a2554;
+ public int a2555;
+ public int a2556;
+ public int a2557;
+ public int a2558;
+ public int a2559;
+ public int a2560;
+ public int a2561;
+ public int a2562;
+ public int a2563;
+ public int a2564;
+ public int a2565;
+ public int a2566;
+ public int a2567;
+ public int a2568;
+ public int a2569;
+ public int a2570;
+ public int a2571;
+ public int a2572;
+ public int a2573;
+ public int a2574;
+ public int a2575;
+ public int a2576;
+ public int a2577;
+ public int a2578;
+ public int a2579;
+ public int a2580;
+ public int a2581;
+ public int a2582;
+ public int a2583;
+ public int a2584;
+ public int a2585;
+ public int a2586;
+ public int a2587;
+ public int a2588;
+ public int a2589;
+ public int a2590;
+ public int a2591;
+ public int a2592;
+ public int a2593;
+ public int a2594;
+ public int a2595;
+ public int a2596;
+ public int a2597;
+ public int a2598;
+ public int a2599;
+ public int a2600;
+ public int a2601;
+ public int a2602;
+ public int a2603;
+ public int a2604;
+ public int a2605;
+ public int a2606;
+ public int a2607;
+ public int a2608;
+ public int a2609;
+ public int a2610;
+ public int a2611;
+ public int a2612;
+ public int a2613;
+ public int a2614;
+ public int a2615;
+ public int a2616;
+ public int a2617;
+ public int a2618;
+ public int a2619;
+ public int a2620;
+ public int a2621;
+ public int a2622;
+ public int a2623;
+ public int a2624;
+ public int a2625;
+ public int a2626;
+ public int a2627;
+ public int a2628;
+ public int a2629;
+ public int a2630;
+ public int a2631;
+ public int a2632;
+ public int a2633;
+ public int a2634;
+ public int a2635;
+ public int a2636;
+ public int a2637;
+ public int a2638;
+ public int a2639;
+ public int a2640;
+ public int a2641;
+ public int a2642;
+ public int a2643;
+ public int a2644;
+ public int a2645;
+ public int a2646;
+ public int a2647;
+ public int a2648;
+ public int a2649;
+ public int a2650;
+ public int a2651;
+ public int a2652;
+ public int a2653;
+ public int a2654;
+ public int a2655;
+ public int a2656;
+ public int a2657;
+ public int a2658;
+ public int a2659;
+ public int a2660;
+ public int a2661;
+ public int a2662;
+ public int a2663;
+ public int a2664;
+ public int a2665;
+ public int a2666;
+ public int a2667;
+ public int a2668;
+ public int a2669;
+ public int a2670;
+ public int a2671;
+ public int a2672;
+ public int a2673;
+ public int a2674;
+ public int a2675;
+ public int a2676;
+ public int a2677;
+ public int a2678;
+ public int a2679;
+ public int a2680;
+ public int a2681;
+ public int a2682;
+ public int a2683;
+ public int a2684;
+ public int a2685;
+ public int a2686;
+ public int a2687;
+ public int a2688;
+ public int a2689;
+ public int a2690;
+ public int a2691;
+ public int a2692;
+ public int a2693;
+ public int a2694;
+ public int a2695;
+ public int a2696;
+ public int a2697;
+ public int a2698;
+ public int a2699;
+ public int a2700;
+ public int a2701;
+ public int a2702;
+ public int a2703;
+ public int a2704;
+ public int a2705;
+ public int a2706;
+ public int a2707;
+ public int a2708;
+ public int a2709;
+ public int a2710;
+ public int a2711;
+ public int a2712;
+ public int a2713;
+ public int a2714;
+ public int a2715;
+ public int a2716;
+ public int a2717;
+ public int a2718;
+ public int a2719;
+ public int a2720;
+ public int a2721;
+ public int a2722;
+ public int a2723;
+ public int a2724;
+ public int a2725;
+ public int a2726;
+ public int a2727;
+ public int a2728;
+ public int a2729;
+ public int a2730;
+ public int a2731;
+ public int a2732;
+ public int a2733;
+ public int a2734;
+ public int a2735;
+ public int a2736;
+ public int a2737;
+ public int a2738;
+ public int a2739;
+ public int a2740;
+ public int a2741;
+ public int a2742;
+ public int a2743;
+ public int a2744;
+ public int a2745;
+ public int a2746;
+ public int a2747;
+ public int a2748;
+ public int a2749;
+ public int a2750;
+ public int a2751;
+ public int a2752;
+ public int a2753;
+ public int a2754;
+ public int a2755;
+ public int a2756;
+ public int a2757;
+ public int a2758;
+ public int a2759;
+ public int a2760;
+ public int a2761;
+ public int a2762;
+ public int a2763;
+ public int a2764;
+ public int a2765;
+ public int a2766;
+ public int a2767;
+ public int a2768;
+ public int a2769;
+ public int a2770;
+ public int a2771;
+ public int a2772;
+ public int a2773;
+ public int a2774;
+ public int a2775;
+ public int a2776;
+ public int a2777;
+ public int a2778;
+ public int a2779;
+ public int a2780;
+ public int a2781;
+ public int a2782;
+ public int a2783;
+ public int a2784;
+ public int a2785;
+ public int a2786;
+ public int a2787;
+ public int a2788;
+ public int a2789;
+ public int a2790;
+ public int a2791;
+ public int a2792;
+ public int a2793;
+ public int a2794;
+ public int a2795;
+ public int a2796;
+ public int a2797;
+ public int a2798;
+ public int a2799;
+ public int a2800;
+ public int a2801;
+ public int a2802;
+ public int a2803;
+ public int a2804;
+ public int a2805;
+ public int a2806;
+ public int a2807;
+ public int a2808;
+ public int a2809;
+ public int a2810;
+ public int a2811;
+ public int a2812;
+ public int a2813;
+ public int a2814;
+ public int a2815;
+ public int a2816;
+ public int a2817;
+ public int a2818;
+ public int a2819;
+ public int a2820;
+ public int a2821;
+ public int a2822;
+ public int a2823;
+ public int a2824;
+ public int a2825;
+ public int a2826;
+ public int a2827;
+ public int a2828;
+ public int a2829;
+ public int a2830;
+ public int a2831;
+ public int a2832;
+ public int a2833;
+ public int a2834;
+ public int a2835;
+ public int a2836;
+ public int a2837;
+ public int a2838;
+ public int a2839;
+ public int a2840;
+ public int a2841;
+ public int a2842;
+ public int a2843;
+ public int a2844;
+ public int a2845;
+ public int a2846;
+ public int a2847;
+ public int a2848;
+ public int a2849;
+ public int a2850;
+ public int a2851;
+ public int a2852;
+ public int a2853;
+ public int a2854;
+ public int a2855;
+ public int a2856;
+ public int a2857;
+ public int a2858;
+ public int a2859;
+ public int a2860;
+ public int a2861;
+ public int a2862;
+ public int a2863;
+ public int a2864;
+ public int a2865;
+ public int a2866;
+ public int a2867;
+ public int a2868;
+ public int a2869;
+ public int a2870;
+ public int a2871;
+ public int a2872;
+ public int a2873;
+ public int a2874;
+ public int a2875;
+ public int a2876;
+ public int a2877;
+ public int a2878;
+ public int a2879;
+ public int a2880;
+ public int a2881;
+ public int a2882;
+ public int a2883;
+ public int a2884;
+ public int a2885;
+ public int a2886;
+ public int a2887;
+ public int a2888;
+ public int a2889;
+ public int a2890;
+ public int a2891;
+ public int a2892;
+ public int a2893;
+ public int a2894;
+ public int a2895;
+ public int a2896;
+ public int a2897;
+ public int a2898;
+ public int a2899;
+ public int a2900;
+ public int a2901;
+ public int a2902;
+ public int a2903;
+ public int a2904;
+ public int a2905;
+ public int a2906;
+ public int a2907;
+ public int a2908;
+ public int a2909;
+ public int a2910;
+ public int a2911;
+ public int a2912;
+ public int a2913;
+ public int a2914;
+ public int a2915;
+ public int a2916;
+ public int a2917;
+ public int a2918;
+ public int a2919;
+ public int a2920;
+ public int a2921;
+ public int a2922;
+ public int a2923;
+ public int a2924;
+ public int a2925;
+ public int a2926;
+ public int a2927;
+ public int a2928;
+ public int a2929;
+ public int a2930;
+ public int a2931;
+ public int a2932;
+ public int a2933;
+ public int a2934;
+ public int a2935;
+ public int a2936;
+ public int a2937;
+ public int a2938;
+ public int a2939;
+ public int a2940;
+ public int a2941;
+ public int a2942;
+ public int a2943;
+ public int a2944;
+ public int a2945;
+ public int a2946;
+ public int a2947;
+ public int a2948;
+ public int a2949;
+ public int a2950;
+ public int a2951;
+ public int a2952;
+ public int a2953;
+ public int a2954;
+ public int a2955;
+ public int a2956;
+ public int a2957;
+ public int a2958;
+ public int a2959;
+ public int a2960;
+ public int a2961;
+ public int a2962;
+ public int a2963;
+ public int a2964;
+ public int a2965;
+ public int a2966;
+ public int a2967;
+ public int a2968;
+ public int a2969;
+ public int a2970;
+ public int a2971;
+ public int a2972;
+ public int a2973;
+ public int a2974;
+ public int a2975;
+ public int a2976;
+ public int a2977;
+ public int a2978;
+ public int a2979;
+ public int a2980;
+ public int a2981;
+ public int a2982;
+ public int a2983;
+ public int a2984;
+ public int a2985;
+ public int a2986;
+ public int a2987;
+ public int a2988;
+ public int a2989;
+ public int a2990;
+ public int a2991;
+ public int a2992;
+ public int a2993;
+ public int a2994;
+ public int a2995;
+ public int a2996;
+ public int a2997;
+ public int a2998;
+ public int a2999;
+ public int a3000;
+ public int a3001;
+ public int a3002;
+ public int a3003;
+ public int a3004;
+ public int a3005;
+ public int a3006;
+ public int a3007;
+ public int a3008;
+ public int a3009;
+ public int a3010;
+ public int a3011;
+ public int a3012;
+ public int a3013;
+ public int a3014;
+ public int a3015;
+ public int a3016;
+ public int a3017;
+ public int a3018;
+ public int a3019;
+ public int a3020;
+ public int a3021;
+ public int a3022;
+ public int a3023;
+ public int a3024;
+ public int a3025;
+ public int a3026;
+ public int a3027;
+ public int a3028;
+ public int a3029;
+ public int a3030;
+ public int a3031;
+ public int a3032;
+ public int a3033;
+ public int a3034;
+ public int a3035;
+ public int a3036;
+ public int a3037;
+ public int a3038;
+ public int a3039;
+ public int a3040;
+ public int a3041;
+ public int a3042;
+ public int a3043;
+ public int a3044;
+ public int a3045;
+ public int a3046;
+ public int a3047;
+ public int a3048;
+ public int a3049;
+ public int a3050;
+ public int a3051;
+ public int a3052;
+ public int a3053;
+ public int a3054;
+ public int a3055;
+ public int a3056;
+ public int a3057;
+ public int a3058;
+ public int a3059;
+ public int a3060;
+ public int a3061;
+ public int a3062;
+ public int a3063;
+ public int a3064;
+ public int a3065;
+ public int a3066;
+ public int a3067;
+ public int a3068;
+ public int a3069;
+ public int a3070;
+ public int a3071;
+ public int a3072;
+ public int a3073;
+ public int a3074;
+ public int a3075;
+ public int a3076;
+ public int a3077;
+ public int a3078;
+ public int a3079;
+ public int a3080;
+ public int a3081;
+ public int a3082;
+ public int a3083;
+ public int a3084;
+ public int a3085;
+ public int a3086;
+ public int a3087;
+ public int a3088;
+ public int a3089;
+ public int a3090;
+ public int a3091;
+ public int a3092;
+ public int a3093;
+ public int a3094;
+ public int a3095;
+ public int a3096;
+ public int a3097;
+ public int a3098;
+ public int a3099;
+ public int a3100;
+ public int a3101;
+ public int a3102;
+ public int a3103;
+ public int a3104;
+ public int a3105;
+ public int a3106;
+ public int a3107;
+ public int a3108;
+ public int a3109;
+ public int a3110;
+ public int a3111;
+ public int a3112;
+ public int a3113;
+ public int a3114;
+ public int a3115;
+ public int a3116;
+ public int a3117;
+ public int a3118;
+ public int a3119;
+ public int a3120;
+ public int a3121;
+ public int a3122;
+ public int a3123;
+ public int a3124;
+ public int a3125;
+ public int a3126;
+ public int a3127;
+ public int a3128;
+ public int a3129;
+ public int a3130;
+ public int a3131;
+ public int a3132;
+ public int a3133;
+ public int a3134;
+ public int a3135;
+ public int a3136;
+ public int a3137;
+ public int a3138;
+ public int a3139;
+ public int a3140;
+ public int a3141;
+ public int a3142;
+ public int a3143;
+ public int a3144;
+ public int a3145;
+ public int a3146;
+ public int a3147;
+ public int a3148;
+ public int a3149;
+ public int a3150;
+ public int a3151;
+ public int a3152;
+ public int a3153;
+ public int a3154;
+ public int a3155;
+ public int a3156;
+ public int a3157;
+ public int a3158;
+ public int a3159;
+ public int a3160;
+ public int a3161;
+ public int a3162;
+ public int a3163;
+ public int a3164;
+ public int a3165;
+ public int a3166;
+ public int a3167;
+ public int a3168;
+ public int a3169;
+ public int a3170;
+ public int a3171;
+ public int a3172;
+ public int a3173;
+ public int a3174;
+ public int a3175;
+ public int a3176;
+ public int a3177;
+ public int a3178;
+ public int a3179;
+ public int a3180;
+ public int a3181;
+ public int a3182;
+ public int a3183;
+ public int a3184;
+ public int a3185;
+ public int a3186;
+ public int a3187;
+ public int a3188;
+ public int a3189;
+ public int a3190;
+ public int a3191;
+ public int a3192;
+ public int a3193;
+ public int a3194;
+ public int a3195;
+ public int a3196;
+ public int a3197;
+ public int a3198;
+ public int a3199;
+ public int a3200;
+ public int a3201;
+ public int a3202;
+ public int a3203;
+ public int a3204;
+ public int a3205;
+ public int a3206;
+ public int a3207;
+ public int a3208;
+ public int a3209;
+ public int a3210;
+ public int a3211;
+ public int a3212;
+ public int a3213;
+ public int a3214;
+ public int a3215;
+ public int a3216;
+ public int a3217;
+ public int a3218;
+ public int a3219;
+ public int a3220;
+ public int a3221;
+ public int a3222;
+ public int a3223;
+ public int a3224;
+ public int a3225;
+ public int a3226;
+ public int a3227;
+ public int a3228;
+ public int a3229;
+ public int a3230;
+ public int a3231;
+ public int a3232;
+ public int a3233;
+ public int a3234;
+ public int a3235;
+ public int a3236;
+ public int a3237;
+ public int a3238;
+ public int a3239;
+ public int a3240;
+ public int a3241;
+ public int a3242;
+ public int a3243;
+ public int a3244;
+ public int a3245;
+ public int a3246;
+ public int a3247;
+ public int a3248;
+ public int a3249;
+ public int a3250;
+ public int a3251;
+ public int a3252;
+ public int a3253;
+ public int a3254;
+ public int a3255;
+ public int a3256;
+ public int a3257;
+ public int a3258;
+ public int a3259;
+ public int a3260;
+ public int a3261;
+ public int a3262;
+ public int a3263;
+ public int a3264;
+ public int a3265;
+ public int a3266;
+ public int a3267;
+ public int a3268;
+ public int a3269;
+ public int a3270;
+ public int a3271;
+ public int a3272;
+ public int a3273;
+ public int a3274;
+ public int a3275;
+ public int a3276;
+ public int a3277;
+ public int a3278;
+ public int a3279;
+ public int a3280;
+ public int a3281;
+ public int a3282;
+ public int a3283;
+ public int a3284;
+ public int a3285;
+ public int a3286;
+ public int a3287;
+ public int a3288;
+ public int a3289;
+ public int a3290;
+ public int a3291;
+ public int a3292;
+ public int a3293;
+ public int a3294;
+ public int a3295;
+ public int a3296;
+ public int a3297;
+ public int a3298;
+ public int a3299;
+ public int a3300;
+ public int a3301;
+ public int a3302;
+ public int a3303;
+ public int a3304;
+ public int a3305;
+ public int a3306;
+ public int a3307;
+ public int a3308;
+ public int a3309;
+ public int a3310;
+ public int a3311;
+ public int a3312;
+ public int a3313;
+ public int a3314;
+ public int a3315;
+ public int a3316;
+ public int a3317;
+ public int a3318;
+ public int a3319;
+ public int a3320;
+ public int a3321;
+ public int a3322;
+ public int a3323;
+ public int a3324;
+ public int a3325;
+ public int a3326;
+ public int a3327;
+ public int a3328;
+ public int a3329;
+ public int a3330;
+ public int a3331;
+ public int a3332;
+ public int a3333;
+ public int a3334;
+ public int a3335;
+ public int a3336;
+ public int a3337;
+ public int a3338;
+ public int a3339;
+ public int a3340;
+ public int a3341;
+ public int a3342;
+ public int a3343;
+ public int a3344;
+ public int a3345;
+ public int a3346;
+ public int a3347;
+ public int a3348;
+ public int a3349;
+ public int a3350;
+ public int a3351;
+ public int a3352;
+ public int a3353;
+ public int a3354;
+ public int a3355;
+ public int a3356;
+ public int a3357;
+ public int a3358;
+ public int a3359;
+ public int a3360;
+ public int a3361;
+ public int a3362;
+ public int a3363;
+ public int a3364;
+ public int a3365;
+ public int a3366;
+ public int a3367;
+ public int a3368;
+ public int a3369;
+ public int a3370;
+ public int a3371;
+ public int a3372;
+ public int a3373;
+ public int a3374;
+ public int a3375;
+ public int a3376;
+ public int a3377;
+ public int a3378;
+ public int a3379;
+ public int a3380;
+ public int a3381;
+ public int a3382;
+ public int a3383;
+ public int a3384;
+ public int a3385;
+ public int a3386;
+ public int a3387;
+ public int a3388;
+ public int a3389;
+ public int a3390;
+ public int a3391;
+ public int a3392;
+ public int a3393;
+ public int a3394;
+ public int a3395;
+ public int a3396;
+ public int a3397;
+ public int a3398;
+ public int a3399;
+ public int a3400;
+ public int a3401;
+ public int a3402;
+ public int a3403;
+ public int a3404;
+ public int a3405;
+ public int a3406;
+ public int a3407;
+ public int a3408;
+ public int a3409;
+ public int a3410;
+ public int a3411;
+ public int a3412;
+ public int a3413;
+ public int a3414;
+ public int a3415;
+ public int a3416;
+ public int a3417;
+ public int a3418;
+ public int a3419;
+ public int a3420;
+ public int a3421;
+ public int a3422;
+ public int a3423;
+ public int a3424;
+ public int a3425;
+ public int a3426;
+ public int a3427;
+ public int a3428;
+ public int a3429;
+ public int a3430;
+ public int a3431;
+ public int a3432;
+ public int a3433;
+ public int a3434;
+ public int a3435;
+ public int a3436;
+ public int a3437;
+ public int a3438;
+ public int a3439;
+ public int a3440;
+ public int a3441;
+ public int a3442;
+ public int a3443;
+ public int a3444;
+ public int a3445;
+ public int a3446;
+ public int a3447;
+ public int a3448;
+ public int a3449;
+ public int a3450;
+ public int a3451;
+ public int a3452;
+ public int a3453;
+ public int a3454;
+ public int a3455;
+ public int a3456;
+ public int a3457;
+ public int a3458;
+ public int a3459;
+ public int a3460;
+ public int a3461;
+ public int a3462;
+ public int a3463;
+ public int a3464;
+ public int a3465;
+ public int a3466;
+ public int a3467;
+ public int a3468;
+ public int a3469;
+ public int a3470;
+ public int a3471;
+ public int a3472;
+ public int a3473;
+ public int a3474;
+ public int a3475;
+ public int a3476;
+ public int a3477;
+ public int a3478;
+ public int a3479;
+ public int a3480;
+ public int a3481;
+ public int a3482;
+ public int a3483;
+ public int a3484;
+ public int a3485;
+ public int a3486;
+ public int a3487;
+ public int a3488;
+ public int a3489;
+ public int a3490;
+ public int a3491;
+ public int a3492;
+ public int a3493;
+ public int a3494;
+ public int a3495;
+ public int a3496;
+ public int a3497;
+ public int a3498;
+ public int a3499;
+ public int a3500;
+ public int a3501;
+ public int a3502;
+ public int a3503;
+ public int a3504;
+ public int a3505;
+ public int a3506;
+ public int a3507;
+ public int a3508;
+ public int a3509;
+ public int a3510;
+ public int a3511;
+ public int a3512;
+ public int a3513;
+ public int a3514;
+ public int a3515;
+ public int a3516;
+ public int a3517;
+ public int a3518;
+ public int a3519;
+ public int a3520;
+ public int a3521;
+ public int a3522;
+ public int a3523;
+ public int a3524;
+ public int a3525;
+ public int a3526;
+ public int a3527;
+ public int a3528;
+ public int a3529;
+ public int a3530;
+ public int a3531;
+ public int a3532;
+ public int a3533;
+ public int a3534;
+ public int a3535;
+ public int a3536;
+ public int a3537;
+ public int a3538;
+ public int a3539;
+ public int a3540;
+ public int a3541;
+ public int a3542;
+ public int a3543;
+ public int a3544;
+ public int a3545;
+ public int a3546;
+ public int a3547;
+ public int a3548;
+ public int a3549;
+ public int a3550;
+ public int a3551;
+ public int a3552;
+ public int a3553;
+ public int a3554;
+ public int a3555;
+ public int a3556;
+ public int a3557;
+ public int a3558;
+ public int a3559;
+ public int a3560;
+ public int a3561;
+ public int a3562;
+ public int a3563;
+ public int a3564;
+ public int a3565;
+ public int a3566;
+ public int a3567;
+ public int a3568;
+ public int a3569;
+ public int a3570;
+ public int a3571;
+ public int a3572;
+ public int a3573;
+ public int a3574;
+ public int a3575;
+ public int a3576;
+ public int a3577;
+ public int a3578;
+ public int a3579;
+ public int a3580;
+ public int a3581;
+ public int a3582;
+ public int a3583;
+ public int a3584;
+ public int a3585;
+ public int a3586;
+ public int a3587;
+ public int a3588;
+ public int a3589;
+ public int a3590;
+ public int a3591;
+ public int a3592;
+ public int a3593;
+ public int a3594;
+ public int a3595;
+ public int a3596;
+ public int a3597;
+ public int a3598;
+ public int a3599;
+ public int a3600;
+ public int a3601;
+ public int a3602;
+ public int a3603;
+ public int a3604;
+ public int a3605;
+ public int a3606;
+ public int a3607;
+ public int a3608;
+ public int a3609;
+ public int a3610;
+ public int a3611;
+ public int a3612;
+ public int a3613;
+ public int a3614;
+ public int a3615;
+ public int a3616;
+ public int a3617;
+ public int a3618;
+ public int a3619;
+ public int a3620;
+ public int a3621;
+ public int a3622;
+ public int a3623;
+ public int a3624;
+ public int a3625;
+ public int a3626;
+ public int a3627;
+ public int a3628;
+ public int a3629;
+ public int a3630;
+ public int a3631;
+ public int a3632;
+ public int a3633;
+ public int a3634;
+ public int a3635;
+ public int a3636;
+ public int a3637;
+ public int a3638;
+ public int a3639;
+ public int a3640;
+ public int a3641;
+ public int a3642;
+ public int a3643;
+ public int a3644;
+ public int a3645;
+ public int a3646;
+ public int a3647;
+ public int a3648;
+ public int a3649;
+ public int a3650;
+ public int a3651;
+ public int a3652;
+ public int a3653;
+ public int a3654;
+ public int a3655;
+ public int a3656;
+ public int a3657;
+ public int a3658;
+ public int a3659;
+ public int a3660;
+ public int a3661;
+ public int a3662;
+ public int a3663;
+ public int a3664;
+ public int a3665;
+ public int a3666;
+ public int a3667;
+ public int a3668;
+ public int a3669;
+ public int a3670;
+ public int a3671;
+ public int a3672;
+ public int a3673;
+ public int a3674;
+ public int a3675;
+ public int a3676;
+ public int a3677;
+ public int a3678;
+ public int a3679;
+ public int a3680;
+ public int a3681;
+ public int a3682;
+ public int a3683;
+ public int a3684;
+ public int a3685;
+ public int a3686;
+ public int a3687;
+ public int a3688;
+ public int a3689;
+ public int a3690;
+ public int a3691;
+ public int a3692;
+ public int a3693;
+ public int a3694;
+ public int a3695;
+ public int a3696;
+ public int a3697;
+ public int a3698;
+ public int a3699;
+ public int a3700;
+ public int a3701;
+ public int a3702;
+ public int a3703;
+ public int a3704;
+ public int a3705;
+ public int a3706;
+ public int a3707;
+ public int a3708;
+ public int a3709;
+ public int a3710;
+ public int a3711;
+ public int a3712;
+ public int a3713;
+ public int a3714;
+ public int a3715;
+ public int a3716;
+ public int a3717;
+ public int a3718;
+ public int a3719;
+ public int a3720;
+ public int a3721;
+ public int a3722;
+ public int a3723;
+ public int a3724;
+ public int a3725;
+ public int a3726;
+ public int a3727;
+ public int a3728;
+ public int a3729;
+ public int a3730;
+ public int a3731;
+ public int a3732;
+ public int a3733;
+ public int a3734;
+ public int a3735;
+ public int a3736;
+ public int a3737;
+ public int a3738;
+ public int a3739;
+ public int a3740;
+ public int a3741;
+ public int a3742;
+ public int a3743;
+ public int a3744;
+ public int a3745;
+ public int a3746;
+ public int a3747;
+ public int a3748;
+ public int a3749;
+ public int a3750;
+ public int a3751;
+ public int a3752;
+ public int a3753;
+ public int a3754;
+ public int a3755;
+ public int a3756;
+ public int a3757;
+ public int a3758;
+ public int a3759;
+ public int a3760;
+ public int a3761;
+ public int a3762;
+ public int a3763;
+ public int a3764;
+ public int a3765;
+ public int a3766;
+ public int a3767;
+ public int a3768;
+ public int a3769;
+ public int a3770;
+ public int a3771;
+ public int a3772;
+ public int a3773;
+ public int a3774;
+ public int a3775;
+ public int a3776;
+ public int a3777;
+ public int a3778;
+ public int a3779;
+ public int a3780;
+ public int a3781;
+ public int a3782;
+ public int a3783;
+ public int a3784;
+ public int a3785;
+ public int a3786;
+ public int a3787;
+ public int a3788;
+ public int a3789;
+ public int a3790;
+ public int a3791;
+ public int a3792;
+ public int a3793;
+ public int a3794;
+ public int a3795;
+ public int a3796;
+ public int a3797;
+ public int a3798;
+ public int a3799;
+ public int a3800;
+ public int a3801;
+ public int a3802;
+ public int a3803;
+ public int a3804;
+ public int a3805;
+ public int a3806;
+ public int a3807;
+ public int a3808;
+ public int a3809;
+ public int a3810;
+ public int a3811;
+ public int a3812;
+ public int a3813;
+ public int a3814;
+ public int a3815;
+ public int a3816;
+ public int a3817;
+ public int a3818;
+ public int a3819;
+ public int a3820;
+ public int a3821;
+ public int a3822;
+ public int a3823;
+ public int a3824;
+ public int a3825;
+ public int a3826;
+ public int a3827;
+ public int a3828;
+ public int a3829;
+ public int a3830;
+ public int a3831;
+ public int a3832;
+ public int a3833;
+ public int a3834;
+ public int a3835;
+ public int a3836;
+ public int a3837;
+ public int a3838;
+ public int a3839;
+ public int a3840;
+ public int a3841;
+ public int a3842;
+ public int a3843;
+ public int a3844;
+ public int a3845;
+ public int a3846;
+ public int a3847;
+ public int a3848;
+ public int a3849;
+ public int a3850;
+ public int a3851;
+ public int a3852;
+ public int a3853;
+ public int a3854;
+ public int a3855;
+ public int a3856;
+ public int a3857;
+ public int a3858;
+ public int a3859;
+ public int a3860;
+ public int a3861;
+ public int a3862;
+ public int a3863;
+ public int a3864;
+ public int a3865;
+ public int a3866;
+ public int a3867;
+ public int a3868;
+ public int a3869;
+ public int a3870;
+ public int a3871;
+ public int a3872;
+ public int a3873;
+ public int a3874;
+ public int a3875;
+ public int a3876;
+ public int a3877;
+ public int a3878;
+ public int a3879;
+ public int a3880;
+ public int a3881;
+ public int a3882;
+ public int a3883;
+ public int a3884;
+ public int a3885;
+ public int a3886;
+ public int a3887;
+ public int a3888;
+ public int a3889;
+ public int a3890;
+ public int a3891;
+ public int a3892;
+ public int a3893;
+ public int a3894;
+ public int a3895;
+ public int a3896;
+ public int a3897;
+ public int a3898;
+ public int a3899;
+ public int a3900;
+ public int a3901;
+ public int a3902;
+ public int a3903;
+ public int a3904;
+ public int a3905;
+ public int a3906;
+ public int a3907;
+ public int a3908;
+ public int a3909;
+ public int a3910;
+ public int a3911;
+ public int a3912;
+ public int a3913;
+ public int a3914;
+ public int a3915;
+ public int a3916;
+ public int a3917;
+ public int a3918;
+ public int a3919;
+ public int a3920;
+ public int a3921;
+ public int a3922;
+ public int a3923;
+ public int a3924;
+ public int a3925;
+ public int a3926;
+ public int a3927;
+ public int a3928;
+ public int a3929;
+ public int a3930;
+ public int a3931;
+ public int a3932;
+ public int a3933;
+ public int a3934;
+ public int a3935;
+ public int a3936;
+ public int a3937;
+ public int a3938;
+ public int a3939;
+ public int a3940;
+ public int a3941;
+ public int a3942;
+ public int a3943;
+ public int a3944;
+ public int a3945;
+ public int a3946;
+ public int a3947;
+ public int a3948;
+ public int a3949;
+ public int a3950;
+ public int a3951;
+ public int a3952;
+ public int a3953;
+ public int a3954;
+ public int a3955;
+ public int a3956;
+ public int a3957;
+ public int a3958;
+ public int a3959;
+ public int a3960;
+ public int a3961;
+ public int a3962;
+ public int a3963;
+ public int a3964;
+ public int a3965;
+ public int a3966;
+ public int a3967;
+ public int a3968;
+ public int a3969;
+ public int a3970;
+ public int a3971;
+ public int a3972;
+ public int a3973;
+ public int a3974;
+ public int a3975;
+ public int a3976;
+ public int a3977;
+ public int a3978;
+ public int a3979;
+ public int a3980;
+ public int a3981;
+ public int a3982;
+ public int a3983;
+ public int a3984;
+ public int a3985;
+ public int a3986;
+ public int a3987;
+ public int a3988;
+ public int a3989;
+ public int a3990;
+ public int a3991;
+ public int a3992;
+ public int a3993;
+ public int a3994;
+ public int a3995;
+ public int a3996;
+ public int a3997;
+ public int a3998;
+ public int a3999;
+ public int a4000;
+ public int a4001;
+ public int a4002;
+ public int a4003;
+ public int a4004;
+ public int a4005;
+ public int a4006;
+ public int a4007;
+ public int a4008;
+ public int a4009;
+ public int a4010;
+ public int a4011;
+ public int a4012;
+ public int a4013;
+ public int a4014;
+ public int a4015;
+ public int a4016;
+ public int a4017;
+ public int a4018;
+ public int a4019;
+ public int a4020;
+ public int a4021;
+ public int a4022;
+ public int a4023;
+ public int a4024;
+ public int a4025;
+ public int a4026;
+ public int a4027;
+ public int a4028;
+ public int a4029;
+ public int a4030;
+ public int a4031;
+ public int a4032;
+ public int a4033;
+ public int a4034;
+ public int a4035;
+ public int a4036;
+ public int a4037;
+ public int a4038;
+ public int a4039;
+ public int a4040;
+ public int a4041;
+ public int a4042;
+ public int a4043;
+ public int a4044;
+ public int a4045;
+ public int a4046;
+ public int a4047;
+ public int a4048;
+ public int a4049;
+ public int a4050;
+ public int a4051;
+ public int a4052;
+ public int a4053;
+ public int a4054;
+ public int a4055;
+ public int a4056;
+ public int a4057;
+ public int a4058;
+ public int a4059;
+ public int a4060;
+ public int a4061;
+ public int a4062;
+ public int a4063;
+ public int a4064;
+ public int a4065;
+ public int a4066;
+ public int a4067;
+ public int a4068;
+ public int a4069;
+ public int a4070;
+ public int a4071;
+ public int a4072;
+ public int a4073;
+ public int a4074;
+ public int a4075;
+ public int a4076;
+ public int a4077;
+ public int a4078;
+ public int a4079;
+ public int a4080;
+ public int a4081;
+ public int a4082;
+ public int a4083;
+ public int a4084;
+ public int a4085;
+ public int a4086;
+ public int a4087;
+ public int a4088;
+ public int a4089;
+ public int a4090;
+ public int a4091;
+ public int a4092;
+ public int a4093;
+ public int a4094;
+ public int a4095;
+ public int a4096;
+ public int a4097;
+ public int a4098;
+ public int a4099;
+ public int a4100;
+ public int a4101;
+ public int a4102;
+ public int a4103;
+ public int a4104;
+ public int a4105;
+ public int a4106;
+ public int a4107;
+ public int a4108;
+ public int a4109;
+ public int a4110;
+ public int a4111;
+ public int a4112;
+ public int a4113;
+ public int a4114;
+ public int a4115;
+ public int a4116;
+ public int a4117;
+ public int a4118;
+ public int a4119;
+ public int a4120;
+ public int a4121;
+ public int a4122;
+ public int a4123;
+ public int a4124;
+ public int a4125;
+ public int a4126;
+ public int a4127;
+ public int a4128;
+ public int a4129;
+ public int a4130;
+ public int a4131;
+ public int a4132;
+ public int a4133;
+ public int a4134;
+ public int a4135;
+ public int a4136;
+ public int a4137;
+ public int a4138;
+ public int a4139;
+ public int a4140;
+ public int a4141;
+ public int a4142;
+ public int a4143;
+ public int a4144;
+ public int a4145;
+ public int a4146;
+ public int a4147;
+ public int a4148;
+ public int a4149;
+ public int a4150;
+ public int a4151;
+ public int a4152;
+ public int a4153;
+ public int a4154;
+ public int a4155;
+ public int a4156;
+ public int a4157;
+ public int a4158;
+ public int a4159;
+ public int a4160;
+ public int a4161;
+ public int a4162;
+ public int a4163;
+ public int a4164;
+ public int a4165;
+ public int a4166;
+ public int a4167;
+ public int a4168;
+ public int a4169;
+ public int a4170;
+ public int a4171;
+ public int a4172;
+ public int a4173;
+ public int a4174;
+ public int a4175;
+ public int a4176;
+ public int a4177;
+ public int a4178;
+ public int a4179;
+ public int a4180;
+ public int a4181;
+ public int a4182;
+ public int a4183;
+ public int a4184;
+ public int a4185;
+ public int a4186;
+ public int a4187;
+ public int a4188;
+ public int a4189;
+ public int a4190;
+ public int a4191;
+ public int a4192;
+ public int a4193;
+ public int a4194;
+ public int a4195;
+ public int a4196;
+ public int a4197;
+ public int a4198;
+ public int a4199;
+ public int a4200;
+ public int a4201;
+ public int a4202;
+ public int a4203;
+ public int a4204;
+ public int a4205;
+ public int a4206;
+ public int a4207;
+ public int a4208;
+ public int a4209;
+ public int a4210;
+ public int a4211;
+ public int a4212;
+ public int a4213;
+ public int a4214;
+ public int a4215;
+ public int a4216;
+ public int a4217;
+ public int a4218;
+ public int a4219;
+ public int a4220;
+ public int a4221;
+ public int a4222;
+ public int a4223;
+ public int a4224;
+ public int a4225;
+ public int a4226;
+ public int a4227;
+ public int a4228;
+ public int a4229;
+ public int a4230;
+ public int a4231;
+ public int a4232;
+ public int a4233;
+ public int a4234;
+ public int a4235;
+ public int a4236;
+ public int a4237;
+ public int a4238;
+ public int a4239;
+ public int a4240;
+ public int a4241;
+ public int a4242;
+ public int a4243;
+ public int a4244;
+ public int a4245;
+ public int a4246;
+ public int a4247;
+ public int a4248;
+ public int a4249;
+ public int a4250;
+ public int a4251;
+ public int a4252;
+ public int a4253;
+ public int a4254;
+ public int a4255;
+ public int a4256;
+ public int a4257;
+ public int a4258;
+ public int a4259;
+ public int a4260;
+ public int a4261;
+ public int a4262;
+ public int a4263;
+ public int a4264;
+ public int a4265;
+ public int a4266;
+ public int a4267;
+ public int a4268;
+ public int a4269;
+ public int a4270;
+ public int a4271;
+ public int a4272;
+ public int a4273;
+ public int a4274;
+ public int a4275;
+ public int a4276;
+ public int a4277;
+ public int a4278;
+ public int a4279;
+ public int a4280;
+ public int a4281;
+ public int a4282;
+ public int a4283;
+ public int a4284;
+ public int a4285;
+ public int a4286;
+ public int a4287;
+ public int a4288;
+ public int a4289;
+ public int a4290;
+ public int a4291;
+ public int a4292;
+ public int a4293;
+ public int a4294;
+ public int a4295;
+ public int a4296;
+ public int a4297;
+ public int a4298;
+ public int a4299;
+ public int a4300;
+ public int a4301;
+ public int a4302;
+ public int a4303;
+ public int a4304;
+ public int a4305;
+ public int a4306;
+ public int a4307;
+ public int a4308;
+ public int a4309;
+ public int a4310;
+ public int a4311;
+ public int a4312;
+ public int a4313;
+ public int a4314;
+ public int a4315;
+ public int a4316;
+ public int a4317;
+ public int a4318;
+ public int a4319;
+ public int a4320;
+ public int a4321;
+ public int a4322;
+ public int a4323;
+ public int a4324;
+ public int a4325;
+ public int a4326;
+ public int a4327;
+ public int a4328;
+ public int a4329;
+ public int a4330;
+ public int a4331;
+ public int a4332;
+ public int a4333;
+ public int a4334;
+ public int a4335;
+ public int a4336;
+ public int a4337;
+ public int a4338;
+ public int a4339;
+ public int a4340;
+ public int a4341;
+ public int a4342;
+ public int a4343;
+ public int a4344;
+ public int a4345;
+ public int a4346;
+ public int a4347;
+ public int a4348;
+ public int a4349;
+ public int a4350;
+ public int a4351;
+ public int a4352;
+ public int a4353;
+ public int a4354;
+ public int a4355;
+ public int a4356;
+ public int a4357;
+ public int a4358;
+ public int a4359;
+ public int a4360;
+ public int a4361;
+ public int a4362;
+ public int a4363;
+ public int a4364;
+ public int a4365;
+ public int a4366;
+ public int a4367;
+ public int a4368;
+ public int a4369;
+ public int a4370;
+ public int a4371;
+ public int a4372;
+ public int a4373;
+ public int a4374;
+ public int a4375;
+ public int a4376;
+ public int a4377;
+ public int a4378;
+ public int a4379;
+ public int a4380;
+ public int a4381;
+ public int a4382;
+ public int a4383;
+ public int a4384;
+ public int a4385;
+ public int a4386;
+ public int a4387;
+ public int a4388;
+ public int a4389;
+ public int a4390;
+ public int a4391;
+ public int a4392;
+ public int a4393;
+ public int a4394;
+ public int a4395;
+ public int a4396;
+ public int a4397;
+ public int a4398;
+ public int a4399;
+ public int a4400;
+ public int a4401;
+ public int a4402;
+ public int a4403;
+ public int a4404;
+ public int a4405;
+ public int a4406;
+ public int a4407;
+ public int a4408;
+ public int a4409;
+ public int a4410;
+ public int a4411;
+ public int a4412;
+ public int a4413;
+ public int a4414;
+ public int a4415;
+ public int a4416;
+ public int a4417;
+ public int a4418;
+ public int a4419;
+ public int a4420;
+ public int a4421;
+ public int a4422;
+ public int a4423;
+ public int a4424;
+ public int a4425;
+ public int a4426;
+ public int a4427;
+ public int a4428;
+ public int a4429;
+ public int a4430;
+ public int a4431;
+ public int a4432;
+ public int a4433;
+ public int a4434;
+ public int a4435;
+ public int a4436;
+ public int a4437;
+ public int a4438;
+ public int a4439;
+ public int a4440;
+ public int a4441;
+ public int a4442;
+ public int a4443;
+ public int a4444;
+ public int a4445;
+ public int a4446;
+ public int a4447;
+ public int a4448;
+ public int a4449;
+ public int a4450;
+ public int a4451;
+ public int a4452;
+ public int a4453;
+ public int a4454;
+ public int a4455;
+ public int a4456;
+ public int a4457;
+ public int a4458;
+ public int a4459;
+ public int a4460;
+ public int a4461;
+ public int a4462;
+ public int a4463;
+ public int a4464;
+ public int a4465;
+ public int a4466;
+ public int a4467;
+ public int a4468;
+ public int a4469;
+ public int a4470;
+ public int a4471;
+ public int a4472;
+ public int a4473;
+ public int a4474;
+ public int a4475;
+ public int a4476;
+ public int a4477;
+ public int a4478;
+ public int a4479;
+ public int a4480;
+ public int a4481;
+ public int a4482;
+ public int a4483;
+ public int a4484;
+ public int a4485;
+ public int a4486;
+ public int a4487;
+ public int a4488;
+ public int a4489;
+ public int a4490;
+ public int a4491;
+ public int a4492;
+ public int a4493;
+ public int a4494;
+ public int a4495;
+ public int a4496;
+ public int a4497;
+ public int a4498;
+ public int a4499;
+ public int a4500;
+ public int a4501;
+ public int a4502;
+ public int a4503;
+ public int a4504;
+ public int a4505;
+ public int a4506;
+ public int a4507;
+ public int a4508;
+ public int a4509;
+ public int a4510;
+ public int a4511;
+ public int a4512;
+ public int a4513;
+ public int a4514;
+ public int a4515;
+ public int a4516;
+ public int a4517;
+ public int a4518;
+ public int a4519;
+ public int a4520;
+ public int a4521;
+ public int a4522;
+ public int a4523;
+ public int a4524;
+ public int a4525;
+ public int a4526;
+ public int a4527;
+ public int a4528;
+ public int a4529;
+ public int a4530;
+ public int a4531;
+ public int a4532;
+ public int a4533;
+ public int a4534;
+ public int a4535;
+ public int a4536;
+ public int a4537;
+ public int a4538;
+ public int a4539;
+ public int a4540;
+ public int a4541;
+ public int a4542;
+ public int a4543;
+ public int a4544;
+ public int a4545;
+ public int a4546;
+ public int a4547;
+ public int a4548;
+ public int a4549;
+ public int a4550;
+ public int a4551;
+ public int a4552;
+ public int a4553;
+ public int a4554;
+ public int a4555;
+ public int a4556;
+ public int a4557;
+ public int a4558;
+ public int a4559;
+ public int a4560;
+ public int a4561;
+ public int a4562;
+ public int a4563;
+ public int a4564;
+ public int a4565;
+ public int a4566;
+ public int a4567;
+ public int a4568;
+ public int a4569;
+ public int a4570;
+ public int a4571;
+ public int a4572;
+ public int a4573;
+ public int a4574;
+ public int a4575;
+ public int a4576;
+ public int a4577;
+ public int a4578;
+ public int a4579;
+ public int a4580;
+ public int a4581;
+ public int a4582;
+ public int a4583;
+ public int a4584;
+ public int a4585;
+ public int a4586;
+ public int a4587;
+ public int a4588;
+ public int a4589;
+ public int a4590;
+ public int a4591;
+ public int a4592;
+ public int a4593;
+ public int a4594;
+ public int a4595;
+ public int a4596;
+ public int a4597;
+ public int a4598;
+ public int a4599;
+ public int a4600;
+ public int a4601;
+ public int a4602;
+ public int a4603;
+ public int a4604;
+ public int a4605;
+ public int a4606;
+ public int a4607;
+ public int a4608;
+ public int a4609;
+ public int a4610;
+ public int a4611;
+ public int a4612;
+ public int a4613;
+ public int a4614;
+ public int a4615;
+ public int a4616;
+ public int a4617;
+ public int a4618;
+ public int a4619;
+ public int a4620;
+ public int a4621;
+ public int a4622;
+ public int a4623;
+ public int a4624;
+ public int a4625;
+ public int a4626;
+ public int a4627;
+ public int a4628;
+ public int a4629;
+ public int a4630;
+ public int a4631;
+ public int a4632;
+ public int a4633;
+ public int a4634;
+ public int a4635;
+ public int a4636;
+ public int a4637;
+ public int a4638;
+ public int a4639;
+ public int a4640;
+ public int a4641;
+ public int a4642;
+ public int a4643;
+ public int a4644;
+ public int a4645;
+ public int a4646;
+ public int a4647;
+ public int a4648;
+ public int a4649;
+ public int a4650;
+ public int a4651;
+ public int a4652;
+ public int a4653;
+ public int a4654;
+ public int a4655;
+ public int a4656;
+ public int a4657;
+ public int a4658;
+ public int a4659;
+ public int a4660;
+ public int a4661;
+ public int a4662;
+ public int a4663;
+ public int a4664;
+ public int a4665;
+ public int a4666;
+ public int a4667;
+ public int a4668;
+ public int a4669;
+ public int a4670;
+ public int a4671;
+ public int a4672;
+ public int a4673;
+ public int a4674;
+ public int a4675;
+ public int a4676;
+ public int a4677;
+ public int a4678;
+ public int a4679;
+ public int a4680;
+ public int a4681;
+ public int a4682;
+ public int a4683;
+ public int a4684;
+ public int a4685;
+ public int a4686;
+ public int a4687;
+ public int a4688;
+ public int a4689;
+ public int a4690;
+ public int a4691;
+ public int a4692;
+ public int a4693;
+ public int a4694;
+ public int a4695;
+ public int a4696;
+ public int a4697;
+ public int a4698;
+ public int a4699;
+ public int a4700;
+ public int a4701;
+ public int a4702;
+ public int a4703;
+ public int a4704;
+ public int a4705;
+ public int a4706;
+ public int a4707;
+ public int a4708;
+ public int a4709;
+ public int a4710;
+ public int a4711;
+ public int a4712;
+ public int a4713;
+ public int a4714;
+ public int a4715;
+ public int a4716;
+ public int a4717;
+ public int a4718;
+ public int a4719;
+ public int a4720;
+ public int a4721;
+ public int a4722;
+ public int a4723;
+ public int a4724;
+ public int a4725;
+ public int a4726;
+ public int a4727;
+ public int a4728;
+ public int a4729;
+ public int a4730;
+ public int a4731;
+ public int a4732;
+ public int a4733;
+ public int a4734;
+ public int a4735;
+ public int a4736;
+ public int a4737;
+ public int a4738;
+ public int a4739;
+ public int a4740;
+ public int a4741;
+ public int a4742;
+ public int a4743;
+ public int a4744;
+ public int a4745;
+ public int a4746;
+ public int a4747;
+ public int a4748;
+ public int a4749;
+ public int a4750;
+ public int a4751;
+ public int a4752;
+ public int a4753;
+ public int a4754;
+ public int a4755;
+ public int a4756;
+ public int a4757;
+ public int a4758;
+ public int a4759;
+ public int a4760;
+ public int a4761;
+ public int a4762;
+ public int a4763;
+ public int a4764;
+ public int a4765;
+ public int a4766;
+ public int a4767;
+ public int a4768;
+ public int a4769;
+ public int a4770;
+ public int a4771;
+ public int a4772;
+ public int a4773;
+ public int a4774;
+ public int a4775;
+ public int a4776;
+ public int a4777;
+ public int a4778;
+ public int a4779;
+ public int a4780;
+ public int a4781;
+ public int a4782;
+ public int a4783;
+ public int a4784;
+ public int a4785;
+ public int a4786;
+ public int a4787;
+ public int a4788;
+ public int a4789;
+ public int a4790;
+ public int a4791;
+ public int a4792;
+ public int a4793;
+ public int a4794;
+ public int a4795;
+ public int a4796;
+ public int a4797;
+ public int a4798;
+ public int a4799;
+ public int a4800;
+ public int a4801;
+ public int a4802;
+ public int a4803;
+ public int a4804;
+ public int a4805;
+ public int a4806;
+ public int a4807;
+ public int a4808;
+ public int a4809;
+ public int a4810;
+ public int a4811;
+ public int a4812;
+ public int a4813;
+ public int a4814;
+ public int a4815;
+ public int a4816;
+ public int a4817;
+ public int a4818;
+ public int a4819;
+ public int a4820;
+ public int a4821;
+ public int a4822;
+ public int a4823;
+ public int a4824;
+ public int a4825;
+ public int a4826;
+ public int a4827;
+ public int a4828;
+ public int a4829;
+ public int a4830;
+ public int a4831;
+ public int a4832;
+ public int a4833;
+ public int a4834;
+ public int a4835;
+ public int a4836;
+ public int a4837;
+ public int a4838;
+ public int a4839;
+ public int a4840;
+ public int a4841;
+ public int a4842;
+ public int a4843;
+ public int a4844;
+ public int a4845;
+ public int a4846;
+ public int a4847;
+ public int a4848;
+ public int a4849;
+ public int a4850;
+ public int a4851;
+ public int a4852;
+ public int a4853;
+ public int a4854;
+ public int a4855;
+ public int a4856;
+ public int a4857;
+ public int a4858;
+ public int a4859;
+ public int a4860;
+ public int a4861;
+ public int a4862;
+ public int a4863;
+ public int a4864;
+ public int a4865;
+ public int a4866;
+ public int a4867;
+ public int a4868;
+ public int a4869;
+ public int a4870;
+ public int a4871;
+ public int a4872;
+ public int a4873;
+ public int a4874;
+ public int a4875;
+ public int a4876;
+ public int a4877;
+ public int a4878;
+ public int a4879;
+ public int a4880;
+ public int a4881;
+ public int a4882;
+ public int a4883;
+ public int a4884;
+ public int a4885;
+ public int a4886;
+ public int a4887;
+ public int a4888;
+ public int a4889;
+ public int a4890;
+ public int a4891;
+ public int a4892;
+ public int a4893;
+ public int a4894;
+ public int a4895;
+ public int a4896;
+ public int a4897;
+ public int a4898;
+ public int a4899;
+ public int a4900;
+ public int a4901;
+ public int a4902;
+ public int a4903;
+ public int a4904;
+ public int a4905;
+ public int a4906;
+ public int a4907;
+ public int a4908;
+ public int a4909;
+ public int a4910;
+ public int a4911;
+ public int a4912;
+ public int a4913;
+ public int a4914;
+ public int a4915;
+ public int a4916;
+ public int a4917;
+ public int a4918;
+ public int a4919;
+ public int a4920;
+ public int a4921;
+ public int a4922;
+ public int a4923;
+ public int a4924;
+ public int a4925;
+ public int a4926;
+ public int a4927;
+ public int a4928;
+ public int a4929;
+ public int a4930;
+ public int a4931;
+ public int a4932;
+ public int a4933;
+ public int a4934;
+ public int a4935;
+ public int a4936;
+ public int a4937;
+ public int a4938;
+ public int a4939;
+ public int a4940;
+ public int a4941;
+ public int a4942;
+ public int a4943;
+ public int a4944;
+ public int a4945;
+ public int a4946;
+ public int a4947;
+ public int a4948;
+ public int a4949;
+ public int a4950;
+ public int a4951;
+ public int a4952;
+ public int a4953;
+ public int a4954;
+ public int a4955;
+ public int a4956;
+ public int a4957;
+ public int a4958;
+ public int a4959;
+ public int a4960;
+ public int a4961;
+ public int a4962;
+ public int a4963;
+ public int a4964;
+ public int a4965;
+ public int a4966;
+ public int a4967;
+ public int a4968;
+ public int a4969;
+ public int a4970;
+ public int a4971;
+ public int a4972;
+ public int a4973;
+ public int a4974;
+ public int a4975;
+ public int a4976;
+ public int a4977;
+ public int a4978;
+ public int a4979;
+ public int a4980;
+ public int a4981;
+ public int a4982;
+ public int a4983;
+ public int a4984;
+ public int a4985;
+ public int a4986;
+ public int a4987;
+ public int a4988;
+ public int a4989;
+ public int a4990;
+ public int a4991;
+ public int a4992;
+ public int a4993;
+ public int a4994;
+ public int a4995;
+ public int a4996;
+ public int a4997;
+ public int a4998;
+ public int a4999;
+ public int a5000;
+ public int a5001;
+ public int a5002;
+ public int a5003;
+ public int a5004;
+ public int a5005;
+ public int a5006;
+ public int a5007;
+ public int a5008;
+ public int a5009;
+ public int a5010;
+ public int a5011;
+ public int a5012;
+ public int a5013;
+ public int a5014;
+ public int a5015;
+ public int a5016;
+ public int a5017;
+ public int a5018;
+ public int a5019;
+ public int a5020;
+ public int a5021;
+ public int a5022;
+ public int a5023;
+ public int a5024;
+ public int a5025;
+ public int a5026;
+ public int a5027;
+ public int a5028;
+ public int a5029;
+ public int a5030;
+ public int a5031;
+ public int a5032;
+ public int a5033;
+ public int a5034;
+ public int a5035;
+ public int a5036;
+ public int a5037;
+ public int a5038;
+ public int a5039;
+ public int a5040;
+ public int a5041;
+ public int a5042;
+ public int a5043;
+ public int a5044;
+ public int a5045;
+ public int a5046;
+ public int a5047;
+ public int a5048;
+ public int a5049;
+ public int a5050;
+ public int a5051;
+ public int a5052;
+ public int a5053;
+ public int a5054;
+ public int a5055;
+ public int a5056;
+ public int a5057;
+ public int a5058;
+ public int a5059;
+ public int a5060;
+ public int a5061;
+ public int a5062;
+ public int a5063;
+ public int a5064;
+ public int a5065;
+ public int a5066;
+ public int a5067;
+ public int a5068;
+ public int a5069;
+ public int a5070;
+ public int a5071;
+ public int a5072;
+ public int a5073;
+ public int a5074;
+ public int a5075;
+ public int a5076;
+ public int a5077;
+ public int a5078;
+ public int a5079;
+ public int a5080;
+ public int a5081;
+ public int a5082;
+ public int a5083;
+ public int a5084;
+ public int a5085;
+ public int a5086;
+ public int a5087;
+ public int a5088;
+ public int a5089;
+ public int a5090;
+ public int a5091;
+ public int a5092;
+ public int a5093;
+ public int a5094;
+ public int a5095;
+ public int a5096;
+ public int a5097;
+ public int a5098;
+ public int a5099;
+ public int a5100;
+ public int a5101;
+ public int a5102;
+ public int a5103;
+ public int a5104;
+ public int a5105;
+ public int a5106;
+ public int a5107;
+ public int a5108;
+ public int a5109;
+ public int a5110;
+ public int a5111;
+ public int a5112;
+ public int a5113;
+ public int a5114;
+ public int a5115;
+ public int a5116;
+ public int a5117;
+ public int a5118;
+ public int a5119;
+ public int a5120;
+ public int a5121;
+ public int a5122;
+ public int a5123;
+ public int a5124;
+ public int a5125;
+ public int a5126;
+ public int a5127;
+ public int a5128;
+ public int a5129;
+ public int a5130;
+ public int a5131;
+ public int a5132;
+ public int a5133;
+ public int a5134;
+ public int a5135;
+ public int a5136;
+ public int a5137;
+ public int a5138;
+ public int a5139;
+ public int a5140;
+ public int a5141;
+ public int a5142;
+ public int a5143;
+ public int a5144;
+ public int a5145;
+ public int a5146;
+ public int a5147;
+ public int a5148;
+ public int a5149;
+ public int a5150;
+ public int a5151;
+ public int a5152;
+ public int a5153;
+ public int a5154;
+ public int a5155;
+ public int a5156;
+ public int a5157;
+ public int a5158;
+ public int a5159;
+ public int a5160;
+ public int a5161;
+ public int a5162;
+ public int a5163;
+ public int a5164;
+ public int a5165;
+ public int a5166;
+ public int a5167;
+ public int a5168;
+ public int a5169;
+ public int a5170;
+ public int a5171;
+ public int a5172;
+ public int a5173;
+ public int a5174;
+ public int a5175;
+ public int a5176;
+ public int a5177;
+ public int a5178;
+ public int a5179;
+ public int a5180;
+ public int a5181;
+ public int a5182;
+ public int a5183;
+ public int a5184;
+ public int a5185;
+ public int a5186;
+ public int a5187;
+ public int a5188;
+ public int a5189;
+ public int a5190;
+ public int a5191;
+ public int a5192;
+ public int a5193;
+ public int a5194;
+ public int a5195;
+ public int a5196;
+ public int a5197;
+ public int a5198;
+ public int a5199;
+ public int a5200;
+ public int a5201;
+ public int a5202;
+ public int a5203;
+ public int a5204;
+ public int a5205;
+ public int a5206;
+ public int a5207;
+ public int a5208;
+ public int a5209;
+ public int a5210;
+ public int a5211;
+ public int a5212;
+ public int a5213;
+ public int a5214;
+ public int a5215;
+ public int a5216;
+ public int a5217;
+ public int a5218;
+ public int a5219;
+ public int a5220;
+ public int a5221;
+ public int a5222;
+ public int a5223;
+ public int a5224;
+ public int a5225;
+ public int a5226;
+ public int a5227;
+ public int a5228;
+ public int a5229;
+ public int a5230;
+ public int a5231;
+ public int a5232;
+ public int a5233;
+ public int a5234;
+ public int a5235;
+ public int a5236;
+ public int a5237;
+ public int a5238;
+ public int a5239;
+ public int a5240;
+ public int a5241;
+ public int a5242;
+ public int a5243;
+ public int a5244;
+ public int a5245;
+ public int a5246;
+ public int a5247;
+ public int a5248;
+ public int a5249;
+ public int a5250;
+ public int a5251;
+ public int a5252;
+ public int a5253;
+ public int a5254;
+ public int a5255;
+ public int a5256;
+ public int a5257;
+ public int a5258;
+ public int a5259;
+ public int a5260;
+ public int a5261;
+ public int a5262;
+ public int a5263;
+ public int a5264;
+ public int a5265;
+ public int a5266;
+ public int a5267;
+ public int a5268;
+ public int a5269;
+ public int a5270;
+ public int a5271;
+ public int a5272;
+ public int a5273;
+ public int a5274;
+ public int a5275;
+ public int a5276;
+ public int a5277;
+ public int a5278;
+ public int a5279;
+ public int a5280;
+ public int a5281;
+ public int a5282;
+ public int a5283;
+ public int a5284;
+ public int a5285;
+ public int a5286;
+ public int a5287;
+ public int a5288;
+ public int a5289;
+ public int a5290;
+ public int a5291;
+ public int a5292;
+ public int a5293;
+ public int a5294;
+ public int a5295;
+ public int a5296;
+ public int a5297;
+ public int a5298;
+ public int a5299;
+ public int a5300;
+ public int a5301;
+ public int a5302;
+ public int a5303;
+ public int a5304;
+ public int a5305;
+ public int a5306;
+ public int a5307;
+ public int a5308;
+ public int a5309;
+ public int a5310;
+ public int a5311;
+ public int a5312;
+ public int a5313;
+ public int a5314;
+ public int a5315;
+ public int a5316;
+ public int a5317;
+ public int a5318;
+ public int a5319;
+ public int a5320;
+ public int a5321;
+ public int a5322;
+ public int a5323;
+ public int a5324;
+ public int a5325;
+ public int a5326;
+ public int a5327;
+ public int a5328;
+ public int a5329;
+ public int a5330;
+ public int a5331;
+ public int a5332;
+ public int a5333;
+ public int a5334;
+ public int a5335;
+ public int a5336;
+ public int a5337;
+ public int a5338;
+ public int a5339;
+ public int a5340;
+ public int a5341;
+ public int a5342;
+ public int a5343;
+ public int a5344;
+ public int a5345;
+ public int a5346;
+ public int a5347;
+ public int a5348;
+ public int a5349;
+ public int a5350;
+ public int a5351;
+ public int a5352;
+ public int a5353;
+ public int a5354;
+ public int a5355;
+ public int a5356;
+ public int a5357;
+ public int a5358;
+ public int a5359;
+ public int a5360;
+ public int a5361;
+ public int a5362;
+ public int a5363;
+ public int a5364;
+ public int a5365;
+ public int a5366;
+ public int a5367;
+ public int a5368;
+ public int a5369;
+ public int a5370;
+ public int a5371;
+ public int a5372;
+ public int a5373;
+ public int a5374;
+ public int a5375;
+ public int a5376;
+ public int a5377;
+ public int a5378;
+ public int a5379;
+ public int a5380;
+ public int a5381;
+ public int a5382;
+ public int a5383;
+ public int a5384;
+ public int a5385;
+ public int a5386;
+ public int a5387;
+ public int a5388;
+ public int a5389;
+ public int a5390;
+ public int a5391;
+ public int a5392;
+ public int a5393;
+ public int a5394;
+ public int a5395;
+ public int a5396;
+ public int a5397;
+ public int a5398;
+ public int a5399;
+ public int a5400;
+ public int a5401;
+ public int a5402;
+ public int a5403;
+ public int a5404;
+ public int a5405;
+ public int a5406;
+ public int a5407;
+ public int a5408;
+ public int a5409;
+ public int a5410;
+ public int a5411;
+ public int a5412;
+ public int a5413;
+ public int a5414;
+ public int a5415;
+ public int a5416;
+ public int a5417;
+ public int a5418;
+ public int a5419;
+ public int a5420;
+ public int a5421;
+ public int a5422;
+ public int a5423;
+ public int a5424;
+ public int a5425;
+ public int a5426;
+ public int a5427;
+ public int a5428;
+ public int a5429;
+ public int a5430;
+ public int a5431;
+ public int a5432;
+ public int a5433;
+ public int a5434;
+ public int a5435;
+ public int a5436;
+ public int a5437;
+ public int a5438;
+ public int a5439;
+ public int a5440;
+ public int a5441;
+ public int a5442;
+ public int a5443;
+ public int a5444;
+ public int a5445;
+ public int a5446;
+ public int a5447;
+ public int a5448;
+ public int a5449;
+ public int a5450;
+ public int a5451;
+ public int a5452;
+ public int a5453;
+ public int a5454;
+ public int a5455;
+ public int a5456;
+ public int a5457;
+ public int a5458;
+ public int a5459;
+ public int a5460;
+ public int a5461;
+ public int a5462;
+ public int a5463;
+ public int a5464;
+ public int a5465;
+ public int a5466;
+ public int a5467;
+ public int a5468;
+ public int a5469;
+ public int a5470;
+ public int a5471;
+ public int a5472;
+ public int a5473;
+ public int a5474;
+ public int a5475;
+ public int a5476;
+ public int a5477;
+ public int a5478;
+ public int a5479;
+ public int a5480;
+ public int a5481;
+ public int a5482;
+ public int a5483;
+ public int a5484;
+ public int a5485;
+ public int a5486;
+ public int a5487;
+ public int a5488;
+ public int a5489;
+ public int a5490;
+ public int a5491;
+ public int a5492;
+ public int a5493;
+ public int a5494;
+ public int a5495;
+ public int a5496;
+ public int a5497;
+ public int a5498;
+ public int a5499;
+ public int a5500;
+ public int a5501;
+ public int a5502;
+ public int a5503;
+ public int a5504;
+ public int a5505;
+ public int a5506;
+ public int a5507;
+ public int a5508;
+ public int a5509;
+ public int a5510;
+ public int a5511;
+ public int a5512;
+ public int a5513;
+ public int a5514;
+ public int a5515;
+ public int a5516;
+ public int a5517;
+ public int a5518;
+ public int a5519;
+ public int a5520;
+ public int a5521;
+ public int a5522;
+ public int a5523;
+ public int a5524;
+ public int a5525;
+ public int a5526;
+ public int a5527;
+ public int a5528;
+ public int a5529;
+ public int a5530;
+ public int a5531;
+ public int a5532;
+ public int a5533;
+ public int a5534;
+ public int a5535;
+ public int a5536;
+ public int a5537;
+ public int a5538;
+ public int a5539;
+ public int a5540;
+ public int a5541;
+ public int a5542;
+ public int a5543;
+ public int a5544;
+ public int a5545;
+ public int a5546;
+ public int a5547;
+ public int a5548;
+ public int a5549;
+ public int a5550;
+ public int a5551;
+ public int a5552;
+ public int a5553;
+ public int a5554;
+ public int a5555;
+ public int a5556;
+ public int a5557;
+ public int a5558;
+ public int a5559;
+ public int a5560;
+ public int a5561;
+ public int a5562;
+ public int a5563;
+ public int a5564;
+ public int a5565;
+ public int a5566;
+ public int a5567;
+ public int a5568;
+ public int a5569;
+ public int a5570;
+ public int a5571;
+ public int a5572;
+ public int a5573;
+ public int a5574;
+ public int a5575;
+ public int a5576;
+ public int a5577;
+ public int a5578;
+ public int a5579;
+ public int a5580;
+ public int a5581;
+ public int a5582;
+ public int a5583;
+ public int a5584;
+ public int a5585;
+ public int a5586;
+ public int a5587;
+ public int a5588;
+ public int a5589;
+ public int a5590;
+ public int a5591;
+ public int a5592;
+ public int a5593;
+ public int a5594;
+ public int a5595;
+ public int a5596;
+ public int a5597;
+ public int a5598;
+ public int a5599;
+ public int a5600;
+ public int a5601;
+ public int a5602;
+ public int a5603;
+ public int a5604;
+ public int a5605;
+ public int a5606;
+ public int a5607;
+ public int a5608;
+ public int a5609;
+ public int a5610;
+ public int a5611;
+ public int a5612;
+ public int a5613;
+ public int a5614;
+ public int a5615;
+ public int a5616;
+ public int a5617;
+ public int a5618;
+ public int a5619;
+ public int a5620;
+ public int a5621;
+ public int a5622;
+ public int a5623;
+ public int a5624;
+ public int a5625;
+ public int a5626;
+ public int a5627;
+ public int a5628;
+ public int a5629;
+ public int a5630;
+ public int a5631;
+ public int a5632;
+ public int a5633;
+ public int a5634;
+ public int a5635;
+ public int a5636;
+ public int a5637;
+ public int a5638;
+ public int a5639;
+ public int a5640;
+ public int a5641;
+ public int a5642;
+ public int a5643;
+ public int a5644;
+ public int a5645;
+ public int a5646;
+ public int a5647;
+ public int a5648;
+ public int a5649;
+ public int a5650;
+ public int a5651;
+ public int a5652;
+ public int a5653;
+ public int a5654;
+ public int a5655;
+ public int a5656;
+ public int a5657;
+ public int a5658;
+ public int a5659;
+ public int a5660;
+ public int a5661;
+ public int a5662;
+ public int a5663;
+ public int a5664;
+ public int a5665;
+ public int a5666;
+ public int a5667;
+ public int a5668;
+ public int a5669;
+ public int a5670;
+ public int a5671;
+ public int a5672;
+ public int a5673;
+ public int a5674;
+ public int a5675;
+ public int a5676;
+ public int a5677;
+ public int a5678;
+ public int a5679;
+ public int a5680;
+ public int a5681;
+ public int a5682;
+ public int a5683;
+ public int a5684;
+ public int a5685;
+ public int a5686;
+ public int a5687;
+ public int a5688;
+ public int a5689;
+ public int a5690;
+ public int a5691;
+ public int a5692;
+ public int a5693;
+ public int a5694;
+ public int a5695;
+ public int a5696;
+ public int a5697;
+ public int a5698;
+ public int a5699;
+ public int a5700;
+ public int a5701;
+ public int a5702;
+ public int a5703;
+ public int a5704;
+ public int a5705;
+ public int a5706;
+ public int a5707;
+ public int a5708;
+ public int a5709;
+ public int a5710;
+ public int a5711;
+ public int a5712;
+ public int a5713;
+ public int a5714;
+ public int a5715;
+ public int a5716;
+ public int a5717;
+ public int a5718;
+ public int a5719;
+ public int a5720;
+ public int a5721;
+ public int a5722;
+ public int a5723;
+ public int a5724;
+ public int a5725;
+ public int a5726;
+ public int a5727;
+ public int a5728;
+ public int a5729;
+ public int a5730;
+ public int a5731;
+ public int a5732;
+ public int a5733;
+ public int a5734;
+ public int a5735;
+ public int a5736;
+ public int a5737;
+ public int a5738;
+ public int a5739;
+ public int a5740;
+ public int a5741;
+ public int a5742;
+ public int a5743;
+ public int a5744;
+ public int a5745;
+ public int a5746;
+ public int a5747;
+ public int a5748;
+ public int a5749;
+ public int a5750;
+ public int a5751;
+ public int a5752;
+ public int a5753;
+ public int a5754;
+ public int a5755;
+ public int a5756;
+ public int a5757;
+ public int a5758;
+ public int a5759;
+ public int a5760;
+ public int a5761;
+ public int a5762;
+ public int a5763;
+ public int a5764;
+ public int a5765;
+ public int a5766;
+ public int a5767;
+ public int a5768;
+ public int a5769;
+ public int a5770;
+ public int a5771;
+ public int a5772;
+ public int a5773;
+ public int a5774;
+ public int a5775;
+ public int a5776;
+ public int a5777;
+ public int a5778;
+ public int a5779;
+ public int a5780;
+ public int a5781;
+ public int a5782;
+ public int a5783;
+ public int a5784;
+ public int a5785;
+ public int a5786;
+ public int a5787;
+ public int a5788;
+ public int a5789;
+ public int a5790;
+ public int a5791;
+ public int a5792;
+ public int a5793;
+ public int a5794;
+ public int a5795;
+ public int a5796;
+ public int a5797;
+ public int a5798;
+ public int a5799;
+ public int a5800;
+ public int a5801;
+ public int a5802;
+ public int a5803;
+ public int a5804;
+ public int a5805;
+ public int a5806;
+ public int a5807;
+ public int a5808;
+ public int a5809;
+ public int a5810;
+ public int a5811;
+ public int a5812;
+ public int a5813;
+ public int a5814;
+ public int a5815;
+ public int a5816;
+ public int a5817;
+ public int a5818;
+ public int a5819;
+ public int a5820;
+ public int a5821;
+ public int a5822;
+ public int a5823;
+ public int a5824;
+ public int a5825;
+ public int a5826;
+ public int a5827;
+ public int a5828;
+ public int a5829;
+ public int a5830;
+ public int a5831;
+ public int a5832;
+ public int a5833;
+ public int a5834;
+ public int a5835;
+ public int a5836;
+ public int a5837;
+ public int a5838;
+ public int a5839;
+ public int a5840;
+ public int a5841;
+ public int a5842;
+ public int a5843;
+ public int a5844;
+ public int a5845;
+ public int a5846;
+ public int a5847;
+ public int a5848;
+ public int a5849;
+ public int a5850;
+ public int a5851;
+ public int a5852;
+ public int a5853;
+ public int a5854;
+ public int a5855;
+ public int a5856;
+ public int a5857;
+ public int a5858;
+ public int a5859;
+ public int a5860;
+ public int a5861;
+ public int a5862;
+ public int a5863;
+ public int a5864;
+ public int a5865;
+ public int a5866;
+ public int a5867;
+ public int a5868;
+ public int a5869;
+ public int a5870;
+ public int a5871;
+ public int a5872;
+ public int a5873;
+ public int a5874;
+ public int a5875;
+ public int a5876;
+ public int a5877;
+ public int a5878;
+ public int a5879;
+ public int a5880;
+ public int a5881;
+ public int a5882;
+ public int a5883;
+ public int a5884;
+ public int a5885;
+ public int a5886;
+ public int a5887;
+ public int a5888;
+ public int a5889;
+ public int a5890;
+ public int a5891;
+ public int a5892;
+ public int a5893;
+ public int a5894;
+ public int a5895;
+ public int a5896;
+ public int a5897;
+ public int a5898;
+ public int a5899;
+ public int a5900;
+ public int a5901;
+ public int a5902;
+ public int a5903;
+ public int a5904;
+ public int a5905;
+ public int a5906;
+ public int a5907;
+ public int a5908;
+ public int a5909;
+ public int a5910;
+ public int a5911;
+ public int a5912;
+ public int a5913;
+ public int a5914;
+ public int a5915;
+ public int a5916;
+ public int a5917;
+ public int a5918;
+ public int a5919;
+ public int a5920;
+ public int a5921;
+ public int a5922;
+ public int a5923;
+ public int a5924;
+ public int a5925;
+ public int a5926;
+ public int a5927;
+ public int a5928;
+ public int a5929;
+ public int a5930;
+ public int a5931;
+ public int a5932;
+ public int a5933;
+ public int a5934;
+ public int a5935;
+ public int a5936;
+ public int a5937;
+ public int a5938;
+ public int a5939;
+ public int a5940;
+ public int a5941;
+ public int a5942;
+ public int a5943;
+ public int a5944;
+ public int a5945;
+ public int a5946;
+ public int a5947;
+ public int a5948;
+ public int a5949;
+ public int a5950;
+ public int a5951;
+ public int a5952;
+ public int a5953;
+ public int a5954;
+ public int a5955;
+ public int a5956;
+ public int a5957;
+ public int a5958;
+ public int a5959;
+ public int a5960;
+ public int a5961;
+ public int a5962;
+ public int a5963;
+ public int a5964;
+ public int a5965;
+ public int a5966;
+ public int a5967;
+ public int a5968;
+ public int a5969;
+ public int a5970;
+ public int a5971;
+ public int a5972;
+ public int a5973;
+ public int a5974;
+ public int a5975;
+ public int a5976;
+ public int a5977;
+ public int a5978;
+ public int a5979;
+ public int a5980;
+ public int a5981;
+ public int a5982;
+ public int a5983;
+ public int a5984;
+ public int a5985;
+ public int a5986;
+ public int a5987;
+ public int a5988;
+ public int a5989;
+ public int a5990;
+ public int a5991;
+ public int a5992;
+ public int a5993;
+ public int a5994;
+ public int a5995;
+ public int a5996;
+ public int a5997;
+ public int a5998;
+ public int a5999;
+ public int a6000;
+ public int a6001;
+ public int a6002;
+ public int a6003;
+ public int a6004;
+ public int a6005;
+ public int a6006;
+ public int a6007;
+ public int a6008;
+ public int a6009;
+ public int a6010;
+ public int a6011;
+ public int a6012;
+ public int a6013;
+ public int a6014;
+ public int a6015;
+ public int a6016;
+ public int a6017;
+ public int a6018;
+ public int a6019;
+ public int a6020;
+ public int a6021;
+ public int a6022;
+ public int a6023;
+ public int a6024;
+ public int a6025;
+ public int a6026;
+ public int a6027;
+ public int a6028;
+ public int a6029;
+ public int a6030;
+ public int a6031;
+ public int a6032;
+ public int a6033;
+ public int a6034;
+ public int a6035;
+ public int a6036;
+ public int a6037;
+ public int a6038;
+ public int a6039;
+ public int a6040;
+ public int a6041;
+ public int a6042;
+ public int a6043;
+ public int a6044;
+ public int a6045;
+ public int a6046;
+ public int a6047;
+ public int a6048;
+ public int a6049;
+ public int a6050;
+ public int a6051;
+ public int a6052;
+ public int a6053;
+ public int a6054;
+ public int a6055;
+ public int a6056;
+ public int a6057;
+ public int a6058;
+ public int a6059;
+ public int a6060;
+ public int a6061;
+ public int a6062;
+ public int a6063;
+ public int a6064;
+ public int a6065;
+ public int a6066;
+ public int a6067;
+ public int a6068;
+ public int a6069;
+ public int a6070;
+ public int a6071;
+ public int a6072;
+ public int a6073;
+ public int a6074;
+ public int a6075;
+ public int a6076;
+ public int a6077;
+ public int a6078;
+ public int a6079;
+ public int a6080;
+ public int a6081;
+ public int a6082;
+ public int a6083;
+ public int a6084;
+ public int a6085;
+ public int a6086;
+ public int a6087;
+ public int a6088;
+ public int a6089;
+ public int a6090;
+ public int a6091;
+ public int a6092;
+ public int a6093;
+ public int a6094;
+ public int a6095;
+ public int a6096;
+ public int a6097;
+ public int a6098;
+ public int a6099;
+ public int a6100;
+ public int a6101;
+ public int a6102;
+ public int a6103;
+ public int a6104;
+ public int a6105;
+ public int a6106;
+ public int a6107;
+ public int a6108;
+ public int a6109;
+ public int a6110;
+ public int a6111;
+ public int a6112;
+ public int a6113;
+ public int a6114;
+ public int a6115;
+ public int a6116;
+ public int a6117;
+ public int a6118;
+ public int a6119;
+ public int a6120;
+ public int a6121;
+ public int a6122;
+ public int a6123;
+ public int a6124;
+ public int a6125;
+ public int a6126;
+ public int a6127;
+ public int a6128;
+ public int a6129;
+ public int a6130;
+ public int a6131;
+ public int a6132;
+ public int a6133;
+ public int a6134;
+ public int a6135;
+ public int a6136;
+ public int a6137;
+ public int a6138;
+ public int a6139;
+ public int a6140;
+ public int a6141;
+ public int a6142;
+ public int a6143;
+ public int a6144;
+ public int a6145;
+ public int a6146;
+ public int a6147;
+ public int a6148;
+ public int a6149;
+ public int a6150;
+ public int a6151;
+ public int a6152;
+ public int a6153;
+ public int a6154;
+ public int a6155;
+ public int a6156;
+ public int a6157;
+ public int a6158;
+ public int a6159;
+ public int a6160;
+ public int a6161;
+ public int a6162;
+ public int a6163;
+ public int a6164;
+ public int a6165;
+ public int a6166;
+ public int a6167;
+ public int a6168;
+ public int a6169;
+ public int a6170;
+ public int a6171;
+ public int a6172;
+ public int a6173;
+ public int a6174;
+ public int a6175;
+ public int a6176;
+ public int a6177;
+ public int a6178;
+ public int a6179;
+ public int a6180;
+ public int a6181;
+ public int a6182;
+ public int a6183;
+ public int a6184;
+ public int a6185;
+ public int a6186;
+ public int a6187;
+ public int a6188;
+ public int a6189;
+ public int a6190;
+ public int a6191;
+ public int a6192;
+ public int a6193;
+ public int a6194;
+ public int a6195;
+ public int a6196;
+ public int a6197;
+ public int a6198;
+ public int a6199;
+ public int a6200;
+ public int a6201;
+ public int a6202;
+ public int a6203;
+ public int a6204;
+ public int a6205;
+ public int a6206;
+ public int a6207;
+ public int a6208;
+ public int a6209;
+ public int a6210;
+ public int a6211;
+ public int a6212;
+ public int a6213;
+ public int a6214;
+ public int a6215;
+ public int a6216;
+ public int a6217;
+ public int a6218;
+ public int a6219;
+ public int a6220;
+ public int a6221;
+ public int a6222;
+ public int a6223;
+ public int a6224;
+ public int a6225;
+ public int a6226;
+ public int a6227;
+ public int a6228;
+ public int a6229;
+ public int a6230;
+ public int a6231;
+ public int a6232;
+ public int a6233;
+ public int a6234;
+ public int a6235;
+ public int a6236;
+ public int a6237;
+ public int a6238;
+ public int a6239;
+ public int a6240;
+ public int a6241;
+ public int a6242;
+ public int a6243;
+ public int a6244;
+ public int a6245;
+ public int a6246;
+ public int a6247;
+ public int a6248;
+ public int a6249;
+ public int a6250;
+ public int a6251;
+ public int a6252;
+ public int a6253;
+ public int a6254;
+ public int a6255;
+ public int a6256;
+ public int a6257;
+ public int a6258;
+ public int a6259;
+ public int a6260;
+ public int a6261;
+ public int a6262;
+ public int a6263;
+ public int a6264;
+ public int a6265;
+ public int a6266;
+ public int a6267;
+ public int a6268;
+ public int a6269;
+ public int a6270;
+ public int a6271;
+ public int a6272;
+ public int a6273;
+ public int a6274;
+ public int a6275;
+ public int a6276;
+ public int a6277;
+ public int a6278;
+ public int a6279;
+ public int a6280;
+ public int a6281;
+ public int a6282;
+ public int a6283;
+ public int a6284;
+ public int a6285;
+ public int a6286;
+ public int a6287;
+ public int a6288;
+ public int a6289;
+ public int a6290;
+ public int a6291;
+ public int a6292;
+ public int a6293;
+ public int a6294;
+ public int a6295;
+ public int a6296;
+ public int a6297;
+ public int a6298;
+ public int a6299;
+ public int a6300;
+ public int a6301;
+ public int a6302;
+ public int a6303;
+ public int a6304;
+ public int a6305;
+ public int a6306;
+ public int a6307;
+ public int a6308;
+ public int a6309;
+ public int a6310;
+ public int a6311;
+ public int a6312;
+ public int a6313;
+ public int a6314;
+ public int a6315;
+ public int a6316;
+ public int a6317;
+ public int a6318;
+ public int a6319;
+ public int a6320;
+ public int a6321;
+ public int a6322;
+ public int a6323;
+ public int a6324;
+ public int a6325;
+ public int a6326;
+ public int a6327;
+ public int a6328;
+ public int a6329;
+ public int a6330;
+ public int a6331;
+ public int a6332;
+ public int a6333;
+ public int a6334;
+ public int a6335;
+ public int a6336;
+ public int a6337;
+ public int a6338;
+ public int a6339;
+ public int a6340;
+ public int a6341;
+ public int a6342;
+ public int a6343;
+ public int a6344;
+ public int a6345;
+ public int a6346;
+ public int a6347;
+ public int a6348;
+ public int a6349;
+ public int a6350;
+ public int a6351;
+ public int a6352;
+ public int a6353;
+ public int a6354;
+ public int a6355;
+ public int a6356;
+ public int a6357;
+ public int a6358;
+ public int a6359;
+ public int a6360;
+ public int a6361;
+ public int a6362;
+ public int a6363;
+ public int a6364;
+ public int a6365;
+ public int a6366;
+ public int a6367;
+ public int a6368;
+ public int a6369;
+ public int a6370;
+ public int a6371;
+ public int a6372;
+ public int a6373;
+ public int a6374;
+ public int a6375;
+ public int a6376;
+ public int a6377;
+ public int a6378;
+ public int a6379;
+ public int a6380;
+ public int a6381;
+ public int a6382;
+ public int a6383;
+ public int a6384;
+ public int a6385;
+ public int a6386;
+ public int a6387;
+ public int a6388;
+ public int a6389;
+ public int a6390;
+ public int a6391;
+ public int a6392;
+ public int a6393;
+ public int a6394;
+ public int a6395;
+ public int a6396;
+ public int a6397;
+ public int a6398;
+ public int a6399;
+ public int a6400;
+ public int a6401;
+ public int a6402;
+ public int a6403;
+ public int a6404;
+ public int a6405;
+ public int a6406;
+ public int a6407;
+ public int a6408;
+ public int a6409;
+ public int a6410;
+ public int a6411;
+ public int a6412;
+ public int a6413;
+ public int a6414;
+ public int a6415;
+ public int a6416;
+ public int a6417;
+ public int a6418;
+ public int a6419;
+ public int a6420;
+ public int a6421;
+ public int a6422;
+ public int a6423;
+ public int a6424;
+ public int a6425;
+ public int a6426;
+ public int a6427;
+ public int a6428;
+ public int a6429;
+ public int a6430;
+ public int a6431;
+ public int a6432;
+ public int a6433;
+ public int a6434;
+ public int a6435;
+ public int a6436;
+ public int a6437;
+ public int a6438;
+ public int a6439;
+ public int a6440;
+ public int a6441;
+ public int a6442;
+ public int a6443;
+ public int a6444;
+ public int a6445;
+ public int a6446;
+ public int a6447;
+ public int a6448;
+ public int a6449;
+ public int a6450;
+ public int a6451;
+ public int a6452;
+ public int a6453;
+ public int a6454;
+ public int a6455;
+ public int a6456;
+ public int a6457;
+ public int a6458;
+ public int a6459;
+ public int a6460;
+ public int a6461;
+ public int a6462;
+ public int a6463;
+ public int a6464;
+ public int a6465;
+ public int a6466;
+ public int a6467;
+ public int a6468;
+ public int a6469;
+ public int a6470;
+ public int a6471;
+ public int a6472;
+ public int a6473;
+ public int a6474;
+ public int a6475;
+ public int a6476;
+ public int a6477;
+ public int a6478;
+ public int a6479;
+ public int a6480;
+ public int a6481;
+ public int a6482;
+ public int a6483;
+ public int a6484;
+ public int a6485;
+ public int a6486;
+ public int a6487;
+ public int a6488;
+ public int a6489;
+ public int a6490;
+ public int a6491;
+ public int a6492;
+ public int a6493;
+ public int a6494;
+ public int a6495;
+ public int a6496;
+ public int a6497;
+ public int a6498;
+ public int a6499;
+ public int a6500;
+ public int a6501;
+ public int a6502;
+ public int a6503;
+ public int a6504;
+ public int a6505;
+ public int a6506;
+ public int a6507;
+ public int a6508;
+ public int a6509;
+ public int a6510;
+ public int a6511;
+ public int a6512;
+ public int a6513;
+ public int a6514;
+ public int a6515;
+ public int a6516;
+ public int a6517;
+ public int a6518;
+ public int a6519;
+ public int a6520;
+ public int a6521;
+ public int a6522;
+ public int a6523;
+ public int a6524;
+ public int a6525;
+ public int a6526;
+ public int a6527;
+ public int a6528;
+ public int a6529;
+ public int a6530;
+ public int a6531;
+ public int a6532;
+ public int a6533;
+ public int a6534;
+ public int a6535;
+ public int a6536;
+ public int a6537;
+ public int a6538;
+ public int a6539;
+ public int a6540;
+ public int a6541;
+ public int a6542;
+ public int a6543;
+ public int a6544;
+ public int a6545;
+ public int a6546;
+ public int a6547;
+ public int a6548;
+ public int a6549;
+ public int a6550;
+ public int a6551;
+ public int a6552;
+ public int a6553;
+ public int a6554;
+ public int a6555;
+ public int a6556;
+ public int a6557;
+ public int a6558;
+ public int a6559;
+ public int a6560;
+ public int a6561;
+ public int a6562;
+ public int a6563;
+ public int a6564;
+ public int a6565;
+ public int a6566;
+ public int a6567;
+ public int a6568;
+ public int a6569;
+ public int a6570;
+ public int a6571;
+ public int a6572;
+ public int a6573;
+ public int a6574;
+ public int a6575;
+ public int a6576;
+ public int a6577;
+ public int a6578;
+ public int a6579;
+ public int a6580;
+ public int a6581;
+ public int a6582;
+ public int a6583;
+ public int a6584;
+ public int a6585;
+ public int a6586;
+ public int a6587;
+ public int a6588;
+ public int a6589;
+ public int a6590;
+ public int a6591;
+ public int a6592;
+ public int a6593;
+ public int a6594;
+ public int a6595;
+ public int a6596;
+ public int a6597;
+ public int a6598;
+ public int a6599;
+ public int a6600;
+ public int a6601;
+ public int a6602;
+ public int a6603;
+ public int a6604;
+ public int a6605;
+ public int a6606;
+ public int a6607;
+ public int a6608;
+ public int a6609;
+ public int a6610;
+ public int a6611;
+ public int a6612;
+ public int a6613;
+ public int a6614;
+ public int a6615;
+ public int a6616;
+ public int a6617;
+ public int a6618;
+ public int a6619;
+ public int a6620;
+ public int a6621;
+ public int a6622;
+ public int a6623;
+ public int a6624;
+ public int a6625;
+ public int a6626;
+ public int a6627;
+ public int a6628;
+ public int a6629;
+ public int a6630;
+ public int a6631;
+ public int a6632;
+ public int a6633;
+ public int a6634;
+ public int a6635;
+ public int a6636;
+ public int a6637;
+ public int a6638;
+ public int a6639;
+ public int a6640;
+ public int a6641;
+ public int a6642;
+ public int a6643;
+ public int a6644;
+ public int a6645;
+ public int a6646;
+ public int a6647;
+ public int a6648;
+ public int a6649;
+ public int a6650;
+ public int a6651;
+ public int a6652;
+ public int a6653;
+ public int a6654;
+ public int a6655;
+ public int a6656;
+ public int a6657;
+ public int a6658;
+ public int a6659;
+ public int a6660;
+ public int a6661;
+ public int a6662;
+ public int a6663;
+ public int a6664;
+ public int a6665;
+ public int a6666;
+ public int a6667;
+ public int a6668;
+ public int a6669;
+ public int a6670;
+ public int a6671;
+ public int a6672;
+ public int a6673;
+ public int a6674;
+ public int a6675;
+ public int a6676;
+ public int a6677;
+ public int a6678;
+ public int a6679;
+ public int a6680;
+ public int a6681;
+ public int a6682;
+ public int a6683;
+ public int a6684;
+ public int a6685;
+ public int a6686;
+ public int a6687;
+ public int a6688;
+ public int a6689;
+ public int a6690;
+ public int a6691;
+ public int a6692;
+ public int a6693;
+ public int a6694;
+ public int a6695;
+ public int a6696;
+ public int a6697;
+ public int a6698;
+ public int a6699;
+ public int a6700;
+ public int a6701;
+ public int a6702;
+ public int a6703;
+ public int a6704;
+ public int a6705;
+ public int a6706;
+ public int a6707;
+ public int a6708;
+ public int a6709;
+ public int a6710;
+ public int a6711;
+ public int a6712;
+ public int a6713;
+ public int a6714;
+ public int a6715;
+ public int a6716;
+ public int a6717;
+ public int a6718;
+ public int a6719;
+ public int a6720;
+ public int a6721;
+ public int a6722;
+ public int a6723;
+ public int a6724;
+ public int a6725;
+ public int a6726;
+ public int a6727;
+ public int a6728;
+ public int a6729;
+ public int a6730;
+ public int a6731;
+ public int a6732;
+ public int a6733;
+ public int a6734;
+ public int a6735;
+ public int a6736;
+ public int a6737;
+ public int a6738;
+ public int a6739;
+ public int a6740;
+ public int a6741;
+ public int a6742;
+ public int a6743;
+ public int a6744;
+ public int a6745;
+ public int a6746;
+ public int a6747;
+ public int a6748;
+ public int a6749;
+ public int a6750;
+ public int a6751;
+ public int a6752;
+ public int a6753;
+ public int a6754;
+ public int a6755;
+ public int a6756;
+ public int a6757;
+ public int a6758;
+ public int a6759;
+ public int a6760;
+ public int a6761;
+ public int a6762;
+ public int a6763;
+ public int a6764;
+ public int a6765;
+ public int a6766;
+ public int a6767;
+ public int a6768;
+ public int a6769;
+ public int a6770;
+ public int a6771;
+ public int a6772;
+ public int a6773;
+ public int a6774;
+ public int a6775;
+ public int a6776;
+ public int a6777;
+ public int a6778;
+ public int a6779;
+ public int a6780;
+ public int a6781;
+ public int a6782;
+ public int a6783;
+ public int a6784;
+ public int a6785;
+ public int a6786;
+ public int a6787;
+ public int a6788;
+ public int a6789;
+ public int a6790;
+ public int a6791;
+ public int a6792;
+ public int a6793;
+ public int a6794;
+ public int a6795;
+ public int a6796;
+ public int a6797;
+ public int a6798;
+ public int a6799;
+ public int a6800;
+ public int a6801;
+ public int a6802;
+ public int a6803;
+ public int a6804;
+ public int a6805;
+ public int a6806;
+ public int a6807;
+ public int a6808;
+ public int a6809;
+ public int a6810;
+ public int a6811;
+ public int a6812;
+ public int a6813;
+ public int a6814;
+ public int a6815;
+ public int a6816;
+ public int a6817;
+ public int a6818;
+ public int a6819;
+ public int a6820;
+ public int a6821;
+ public int a6822;
+ public int a6823;
+ public int a6824;
+ public int a6825;
+ public int a6826;
+ public int a6827;
+ public int a6828;
+ public int a6829;
+ public int a6830;
+ public int a6831;
+ public int a6832;
+ public int a6833;
+ public int a6834;
+ public int a6835;
+ public int a6836;
+ public int a6837;
+ public int a6838;
+ public int a6839;
+ public int a6840;
+ public int a6841;
+ public int a6842;
+ public int a6843;
+ public int a6844;
+ public int a6845;
+ public int a6846;
+ public int a6847;
+ public int a6848;
+ public int a6849;
+ public int a6850;
+ public int a6851;
+ public int a6852;
+ public int a6853;
+ public int a6854;
+ public int a6855;
+ public int a6856;
+ public int a6857;
+ public int a6858;
+ public int a6859;
+ public int a6860;
+ public int a6861;
+ public int a6862;
+ public int a6863;
+ public int a6864;
+ public int a6865;
+ public int a6866;
+ public int a6867;
+ public int a6868;
+ public int a6869;
+ public int a6870;
+ public int a6871;
+ public int a6872;
+ public int a6873;
+ public int a6874;
+ public int a6875;
+ public int a6876;
+ public int a6877;
+ public int a6878;
+ public int a6879;
+ public int a6880;
+ public int a6881;
+ public int a6882;
+ public int a6883;
+ public int a6884;
+ public int a6885;
+ public int a6886;
+ public int a6887;
+ public int a6888;
+ public int a6889;
+ public int a6890;
+ public int a6891;
+ public int a6892;
+ public int a6893;
+ public int a6894;
+ public int a6895;
+ public int a6896;
+ public int a6897;
+ public int a6898;
+ public int a6899;
+ public int a6900;
+ public int a6901;
+ public int a6902;
+ public int a6903;
+ public int a6904;
+ public int a6905;
+ public int a6906;
+ public int a6907;
+ public int a6908;
+ public int a6909;
+ public int a6910;
+ public int a6911;
+ public int a6912;
+ public int a6913;
+ public int a6914;
+ public int a6915;
+ public int a6916;
+ public int a6917;
+ public int a6918;
+ public int a6919;
+ public int a6920;
+ public int a6921;
+ public int a6922;
+ public int a6923;
+ public int a6924;
+ public int a6925;
+ public int a6926;
+ public int a6927;
+ public int a6928;
+ public int a6929;
+ public int a6930;
+ public int a6931;
+ public int a6932;
+ public int a6933;
+ public int a6934;
+ public int a6935;
+ public int a6936;
+ public int a6937;
+ public int a6938;
+ public int a6939;
+ public int a6940;
+ public int a6941;
+ public int a6942;
+ public int a6943;
+ public int a6944;
+ public int a6945;
+ public int a6946;
+ public int a6947;
+ public int a6948;
+ public int a6949;
+ public int a6950;
+ public int a6951;
+ public int a6952;
+ public int a6953;
+ public int a6954;
+ public int a6955;
+ public int a6956;
+ public int a6957;
+ public int a6958;
+ public int a6959;
+ public int a6960;
+ public int a6961;
+ public int a6962;
+ public int a6963;
+ public int a6964;
+ public int a6965;
+ public int a6966;
+ public int a6967;
+ public int a6968;
+ public int a6969;
+ public int a6970;
+ public int a6971;
+ public int a6972;
+ public int a6973;
+ public int a6974;
+ public int a6975;
+ public int a6976;
+ public int a6977;
+ public int a6978;
+ public int a6979;
+ public int a6980;
+ public int a6981;
+ public int a6982;
+ public int a6983;
+ public int a6984;
+ public int a6985;
+ public int a6986;
+ public int a6987;
+ public int a6988;
+ public int a6989;
+ public int a6990;
+ public int a6991;
+ public int a6992;
+ public int a6993;
+ public int a6994;
+ public int a6995;
+ public int a6996;
+ public int a6997;
+ public int a6998;
+ public int a6999;
+ public int a7000;
+ public int a7001;
+ public int a7002;
+ public int a7003;
+ public int a7004;
+ public int a7005;
+ public int a7006;
+ public int a7007;
+ public int a7008;
+ public int a7009;
+ public int a7010;
+ public int a7011;
+ public int a7012;
+ public int a7013;
+ public int a7014;
+ public int a7015;
+ public int a7016;
+ public int a7017;
+ public int a7018;
+ public int a7019;
+ public int a7020;
+ public int a7021;
+ public int a7022;
+ public int a7023;
+ public int a7024;
+ public int a7025;
+ public int a7026;
+ public int a7027;
+ public int a7028;
+ public int a7029;
+ public int a7030;
+ public int a7031;
+ public int a7032;
+ public int a7033;
+ public int a7034;
+ public int a7035;
+ public int a7036;
+ public int a7037;
+ public int a7038;
+ public int a7039;
+ public int a7040;
+ public int a7041;
+ public int a7042;
+ public int a7043;
+ public int a7044;
+ public int a7045;
+ public int a7046;
+ public int a7047;
+ public int a7048;
+ public int a7049;
+ public int a7050;
+ public int a7051;
+ public int a7052;
+ public int a7053;
+ public int a7054;
+ public int a7055;
+ public int a7056;
+ public int a7057;
+ public int a7058;
+ public int a7059;
+ public int a7060;
+ public int a7061;
+ public int a7062;
+ public int a7063;
+ public int a7064;
+ public int a7065;
+ public int a7066;
+ public int a7067;
+ public int a7068;
+ public int a7069;
+ public int a7070;
+ public int a7071;
+ public int a7072;
+ public int a7073;
+ public int a7074;
+ public int a7075;
+ public int a7076;
+ public int a7077;
+ public int a7078;
+ public int a7079;
+ public int a7080;
+ public int a7081;
+ public int a7082;
+ public int a7083;
+ public int a7084;
+ public int a7085;
+ public int a7086;
+ public int a7087;
+ public int a7088;
+ public int a7089;
+ public int a7090;
+ public int a7091;
+ public int a7092;
+ public int a7093;
+ public int a7094;
+ public int a7095;
+ public int a7096;
+ public int a7097;
+ public int a7098;
+ public int a7099;
+ public int a7100;
+ public int a7101;
+ public int a7102;
+ public int a7103;
+ public int a7104;
+ public int a7105;
+ public int a7106;
+ public int a7107;
+ public int a7108;
+ public int a7109;
+ public int a7110;
+ public int a7111;
+ public int a7112;
+ public int a7113;
+ public int a7114;
+ public int a7115;
+ public int a7116;
+ public int a7117;
+ public int a7118;
+ public int a7119;
+ public int a7120;
+ public int a7121;
+ public int a7122;
+ public int a7123;
+ public int a7124;
+ public int a7125;
+ public int a7126;
+ public int a7127;
+ public int a7128;
+ public int a7129;
+ public int a7130;
+ public int a7131;
+ public int a7132;
+ public int a7133;
+ public int a7134;
+ public int a7135;
+ public int a7136;
+ public int a7137;
+ public int a7138;
+ public int a7139;
+ public int a7140;
+ public int a7141;
+ public int a7142;
+ public int a7143;
+ public int a7144;
+ public int a7145;
+ public int a7146;
+ public int a7147;
+ public int a7148;
+ public int a7149;
+ public int a7150;
+ public int a7151;
+ public int a7152;
+ public int a7153;
+ public int a7154;
+ public int a7155;
+ public int a7156;
+ public int a7157;
+ public int a7158;
+ public int a7159;
+ public int a7160;
+ public int a7161;
+ public int a7162;
+ public int a7163;
+ public int a7164;
+ public int a7165;
+ public int a7166;
+ public int a7167;
+ public int a7168;
+ public int a7169;
+ public int a7170;
+ public int a7171;
+ public int a7172;
+ public int a7173;
+ public int a7174;
+ public int a7175;
+ public int a7176;
+ public int a7177;
+ public int a7178;
+ public int a7179;
+ public int a7180;
+ public int a7181;
+ public int a7182;
+ public int a7183;
+ public int a7184;
+ public int a7185;
+ public int a7186;
+ public int a7187;
+ public int a7188;
+ public int a7189;
+ public int a7190;
+ public int a7191;
+ public int a7192;
+ public int a7193;
+ public int a7194;
+ public int a7195;
+ public int a7196;
+ public int a7197;
+ public int a7198;
+ public int a7199;
+ public int a7200;
+ public int a7201;
+ public int a7202;
+ public int a7203;
+ public int a7204;
+ public int a7205;
+ public int a7206;
+ public int a7207;
+ public int a7208;
+ public int a7209;
+ public int a7210;
+ public int a7211;
+ public int a7212;
+ public int a7213;
+ public int a7214;
+ public int a7215;
+ public int a7216;
+ public int a7217;
+ public int a7218;
+ public int a7219;
+ public int a7220;
+ public int a7221;
+ public int a7222;
+ public int a7223;
+ public int a7224;
+ public int a7225;
+ public int a7226;
+ public int a7227;
+ public int a7228;
+ public int a7229;
+ public int a7230;
+ public int a7231;
+ public int a7232;
+ public int a7233;
+ public int a7234;
+ public int a7235;
+ public int a7236;
+ public int a7237;
+ public int a7238;
+ public int a7239;
+ public int a7240;
+ public int a7241;
+ public int a7242;
+ public int a7243;
+ public int a7244;
+ public int a7245;
+ public int a7246;
+ public int a7247;
+ public int a7248;
+ public int a7249;
+ public int a7250;
+ public int a7251;
+ public int a7252;
+ public int a7253;
+ public int a7254;
+ public int a7255;
+ public int a7256;
+ public int a7257;
+ public int a7258;
+ public int a7259;
+ public int a7260;
+ public int a7261;
+ public int a7262;
+ public int a7263;
+ public int a7264;
+ public int a7265;
+ public int a7266;
+ public int a7267;
+ public int a7268;
+ public int a7269;
+ public int a7270;
+ public int a7271;
+ public int a7272;
+ public int a7273;
+ public int a7274;
+ public int a7275;
+ public int a7276;
+ public int a7277;
+ public int a7278;
+ public int a7279;
+ public int a7280;
+ public int a7281;
+ public int a7282;
+ public int a7283;
+ public int a7284;
+ public int a7285;
+ public int a7286;
+ public int a7287;
+ public int a7288;
+ public int a7289;
+ public int a7290;
+ public int a7291;
+ public int a7292;
+ public int a7293;
+ public int a7294;
+ public int a7295;
+ public int a7296;
+ public int a7297;
+ public int a7298;
+ public int a7299;
+ public int a7300;
+ public int a7301;
+ public int a7302;
+ public int a7303;
+ public int a7304;
+ public int a7305;
+ public int a7306;
+ public int a7307;
+ public int a7308;
+ public int a7309;
+ public int a7310;
+ public int a7311;
+ public int a7312;
+ public int a7313;
+ public int a7314;
+ public int a7315;
+ public int a7316;
+ public int a7317;
+ public int a7318;
+ public int a7319;
+ public int a7320;
+ public int a7321;
+ public int a7322;
+ public int a7323;
+ public int a7324;
+ public int a7325;
+ public int a7326;
+ public int a7327;
+ public int a7328;
+ public int a7329;
+ public int a7330;
+ public int a7331;
+ public int a7332;
+ public int a7333;
+ public int a7334;
+ public int a7335;
+ public int a7336;
+ public int a7337;
+ public int a7338;
+ public int a7339;
+ public int a7340;
+ public int a7341;
+ public int a7342;
+ public int a7343;
+ public int a7344;
+ public int a7345;
+ public int a7346;
+ public int a7347;
+ public int a7348;
+ public int a7349;
+ public int a7350;
+ public int a7351;
+ public int a7352;
+ public int a7353;
+ public int a7354;
+ public int a7355;
+ public int a7356;
+ public int a7357;
+ public int a7358;
+ public int a7359;
+ public int a7360;
+ public int a7361;
+ public int a7362;
+ public int a7363;
+ public int a7364;
+ public int a7365;
+ public int a7366;
+ public int a7367;
+ public int a7368;
+ public int a7369;
+ public int a7370;
+ public int a7371;
+ public int a7372;
+ public int a7373;
+ public int a7374;
+ public int a7375;
+ public int a7376;
+ public int a7377;
+ public int a7378;
+ public int a7379;
+ public int a7380;
+ public int a7381;
+ public int a7382;
+ public int a7383;
+ public int a7384;
+ public int a7385;
+ public int a7386;
+ public int a7387;
+ public int a7388;
+ public int a7389;
+ public int a7390;
+ public int a7391;
+ public int a7392;
+ public int a7393;
+ public int a7394;
+ public int a7395;
+ public int a7396;
+ public int a7397;
+ public int a7398;
+ public int a7399;
+ public int a7400;
+ public int a7401;
+ public int a7402;
+ public int a7403;
+ public int a7404;
+ public int a7405;
+ public int a7406;
+ public int a7407;
+ public int a7408;
+ public int a7409;
+ public int a7410;
+ public int a7411;
+ public int a7412;
+ public int a7413;
+ public int a7414;
+ public int a7415;
+ public int a7416;
+ public int a7417;
+ public int a7418;
+ public int a7419;
+ public int a7420;
+ public int a7421;
+ public int a7422;
+ public int a7423;
+ public int a7424;
+ public int a7425;
+ public int a7426;
+ public int a7427;
+ public int a7428;
+ public int a7429;
+ public int a7430;
+ public int a7431;
+ public int a7432;
+ public int a7433;
+ public int a7434;
+ public int a7435;
+ public int a7436;
+ public int a7437;
+ public int a7438;
+ public int a7439;
+ public int a7440;
+ public int a7441;
+ public int a7442;
+ public int a7443;
+ public int a7444;
+ public int a7445;
+ public int a7446;
+ public int a7447;
+ public int a7448;
+ public int a7449;
+ public int a7450;
+ public int a7451;
+ public int a7452;
+ public int a7453;
+ public int a7454;
+ public int a7455;
+ public int a7456;
+ public int a7457;
+ public int a7458;
+ public int a7459;
+ public int a7460;
+ public int a7461;
+ public int a7462;
+ public int a7463;
+ public int a7464;
+ public int a7465;
+ public int a7466;
+ public int a7467;
+ public int a7468;
+ public int a7469;
+ public int a7470;
+ public int a7471;
+ public int a7472;
+ public int a7473;
+ public int a7474;
+ public int a7475;
+ public int a7476;
+ public int a7477;
+ public int a7478;
+ public int a7479;
+ public int a7480;
+ public int a7481;
+ public int a7482;
+ public int a7483;
+ public int a7484;
+ public int a7485;
+ public int a7486;
+ public int a7487;
+ public int a7488;
+ public int a7489;
+ public int a7490;
+ public int a7491;
+ public int a7492;
+ public int a7493;
+ public int a7494;
+ public int a7495;
+ public int a7496;
+ public int a7497;
+ public int a7498;
+ public int a7499;
+ public int a7500;
+ public int a7501;
+ public int a7502;
+ public int a7503;
+ public int a7504;
+ public int a7505;
+ public int a7506;
+ public int a7507;
+ public int a7508;
+ public int a7509;
+ public int a7510;
+ public int a7511;
+ public int a7512;
+ public int a7513;
+ public int a7514;
+ public int a7515;
+ public int a7516;
+ public int a7517;
+ public int a7518;
+ public int a7519;
+ public int a7520;
+ public int a7521;
+ public int a7522;
+ public int a7523;
+ public int a7524;
+ public int a7525;
+ public int a7526;
+ public int a7527;
+ public int a7528;
+ public int a7529;
+ public int a7530;
+ public int a7531;
+ public int a7532;
+ public int a7533;
+ public int a7534;
+ public int a7535;
+ public int a7536;
+ public int a7537;
+ public int a7538;
+ public int a7539;
+ public int a7540;
+ public int a7541;
+ public int a7542;
+ public int a7543;
+ public int a7544;
+ public int a7545;
+ public int a7546;
+ public int a7547;
+ public int a7548;
+ public int a7549;
+ public int a7550;
+ public int a7551;
+ public int a7552;
+ public int a7553;
+ public int a7554;
+ public int a7555;
+ public int a7556;
+ public int a7557;
+ public int a7558;
+ public int a7559;
+ public int a7560;
+ public int a7561;
+ public int a7562;
+ public int a7563;
+ public int a7564;
+ public int a7565;
+ public int a7566;
+ public int a7567;
+ public int a7568;
+ public int a7569;
+ public int a7570;
+ public int a7571;
+ public int a7572;
+ public int a7573;
+ public int a7574;
+ public int a7575;
+ public int a7576;
+ public int a7577;
+ public int a7578;
+ public int a7579;
+ public int a7580;
+ public int a7581;
+ public int a7582;
+ public int a7583;
+ public int a7584;
+ public int a7585;
+ public int a7586;
+ public int a7587;
+ public int a7588;
+ public int a7589;
+ public int a7590;
+ public int a7591;
+ public int a7592;
+ public int a7593;
+ public int a7594;
+ public int a7595;
+ public int a7596;
+ public int a7597;
+ public int a7598;
+ public int a7599;
+ public int a7600;
+ public int a7601;
+ public int a7602;
+ public int a7603;
+ public int a7604;
+ public int a7605;
+ public int a7606;
+ public int a7607;
+ public int a7608;
+ public int a7609;
+ public int a7610;
+ public int a7611;
+ public int a7612;
+ public int a7613;
+ public int a7614;
+ public int a7615;
+ public int a7616;
+ public int a7617;
+ public int a7618;
+ public int a7619;
+ public int a7620;
+ public int a7621;
+ public int a7622;
+ public int a7623;
+ public int a7624;
+ public int a7625;
+ public int a7626;
+ public int a7627;
+ public int a7628;
+ public int a7629;
+ public int a7630;
+ public int a7631;
+ public int a7632;
+ public int a7633;
+ public int a7634;
+ public int a7635;
+ public int a7636;
+ public int a7637;
+ public int a7638;
+ public int a7639;
+ public int a7640;
+ public int a7641;
+ public int a7642;
+ public int a7643;
+ public int a7644;
+ public int a7645;
+ public int a7646;
+ public int a7647;
+ public int a7648;
+ public int a7649;
+ public int a7650;
+ public int a7651;
+ public int a7652;
+ public int a7653;
+ public int a7654;
+ public int a7655;
+ public int a7656;
+ public int a7657;
+ public int a7658;
+ public int a7659;
+ public int a7660;
+ public int a7661;
+ public int a7662;
+ public int a7663;
+ public int a7664;
+ public int a7665;
+ public int a7666;
+ public int a7667;
+ public int a7668;
+ public int a7669;
+ public int a7670;
+ public int a7671;
+ public int a7672;
+ public int a7673;
+ public int a7674;
+ public int a7675;
+ public int a7676;
+ public int a7677;
+ public int a7678;
+ public int a7679;
+ public int a7680;
+ public int a7681;
+ public int a7682;
+ public int a7683;
+ public int a7684;
+ public int a7685;
+ public int a7686;
+ public int a7687;
+ public int a7688;
+ public int a7689;
+ public int a7690;
+ public int a7691;
+ public int a7692;
+ public int a7693;
+ public int a7694;
+ public int a7695;
+ public int a7696;
+ public int a7697;
+ public int a7698;
+ public int a7699;
+ public int a7700;
+ public int a7701;
+ public int a7702;
+ public int a7703;
+ public int a7704;
+ public int a7705;
+ public int a7706;
+ public int a7707;
+ public int a7708;
+ public int a7709;
+ public int a7710;
+ public int a7711;
+ public int a7712;
+ public int a7713;
+ public int a7714;
+ public int a7715;
+ public int a7716;
+ public int a7717;
+ public int a7718;
+ public int a7719;
+ public int a7720;
+ public int a7721;
+ public int a7722;
+ public int a7723;
+ public int a7724;
+ public int a7725;
+ public int a7726;
+ public int a7727;
+ public int a7728;
+ public int a7729;
+ public int a7730;
+ public int a7731;
+ public int a7732;
+ public int a7733;
+ public int a7734;
+ public int a7735;
+ public int a7736;
+ public int a7737;
+ public int a7738;
+ public int a7739;
+ public int a7740;
+ public int a7741;
+ public int a7742;
+ public int a7743;
+ public int a7744;
+ public int a7745;
+ public int a7746;
+ public int a7747;
+ public int a7748;
+ public int a7749;
+ public int a7750;
+ public int a7751;
+ public int a7752;
+ public int a7753;
+ public int a7754;
+ public int a7755;
+ public int a7756;
+ public int a7757;
+ public int a7758;
+ public int a7759;
+ public int a7760;
+ public int a7761;
+ public int a7762;
+ public int a7763;
+ public int a7764;
+ public int a7765;
+ public int a7766;
+ public int a7767;
+ public int a7768;
+ public int a7769;
+ public int a7770;
+ public int a7771;
+ public int a7772;
+ public int a7773;
+ public int a7774;
+ public int a7775;
+ public int a7776;
+ public int a7777;
+ public int a7778;
+ public int a7779;
+ public int a7780;
+ public int a7781;
+ public int a7782;
+ public int a7783;
+ public int a7784;
+ public int a7785;
+ public int a7786;
+ public int a7787;
+ public int a7788;
+ public int a7789;
+ public int a7790;
+ public int a7791;
+ public int a7792;
+ public int a7793;
+ public int a7794;
+ public int a7795;
+ public int a7796;
+ public int a7797;
+ public int a7798;
+ public int a7799;
+ public int a7800;
+ public int a7801;
+ public int a7802;
+ public int a7803;
+ public int a7804;
+ public int a7805;
+ public int a7806;
+ public int a7807;
+ public int a7808;
+ public int a7809;
+ public int a7810;
+ public int a7811;
+ public int a7812;
+ public int a7813;
+ public int a7814;
+ public int a7815;
+ public int a7816;
+ public int a7817;
+ public int a7818;
+ public int a7819;
+ public int a7820;
+ public int a7821;
+ public int a7822;
+ public int a7823;
+ public int a7824;
+ public int a7825;
+ public int a7826;
+ public int a7827;
+ public int a7828;
+ public int a7829;
+ public int a7830;
+ public int a7831;
+ public int a7832;
+ public int a7833;
+ public int a7834;
+ public int a7835;
+ public int a7836;
+ public int a7837;
+ public int a7838;
+ public int a7839;
+ public int a7840;
+ public int a7841;
+ public int a7842;
+ public int a7843;
+ public int a7844;
+ public int a7845;
+ public int a7846;
+ public int a7847;
+ public int a7848;
+ public int a7849;
+ public int a7850;
+ public int a7851;
+ public int a7852;
+ public int a7853;
+ public int a7854;
+ public int a7855;
+ public int a7856;
+ public int a7857;
+ public int a7858;
+ public int a7859;
+ public int a7860;
+ public int a7861;
+ public int a7862;
+ public int a7863;
+ public int a7864;
+ public int a7865;
+ public int a7866;
+ public int a7867;
+ public int a7868;
+ public int a7869;
+ public int a7870;
+ public int a7871;
+ public int a7872;
+ public int a7873;
+ public int a7874;
+ public int a7875;
+ public int a7876;
+ public int a7877;
+ public int a7878;
+ public int a7879;
+ public int a7880;
+ public int a7881;
+ public int a7882;
+ public int a7883;
+ public int a7884;
+ public int a7885;
+ public int a7886;
+ public int a7887;
+ public int a7888;
+ public int a7889;
+ public int a7890;
+ public int a7891;
+ public int a7892;
+ public int a7893;
+ public int a7894;
+ public int a7895;
+ public int a7896;
+ public int a7897;
+ public int a7898;
+ public int a7899;
+ public int a7900;
+ public int a7901;
+ public int a7902;
+ public int a7903;
+ public int a7904;
+ public int a7905;
+ public int a7906;
+ public int a7907;
+ public int a7908;
+ public int a7909;
+ public int a7910;
+ public int a7911;
+ public int a7912;
+ public int a7913;
+ public int a7914;
+ public int a7915;
+ public int a7916;
+ public int a7917;
+ public int a7918;
+ public int a7919;
+ public int a7920;
+ public int a7921;
+ public int a7922;
+ public int a7923;
+ public int a7924;
+ public int a7925;
+ public int a7926;
+ public int a7927;
+ public int a7928;
+ public int a7929;
+ public int a7930;
+ public int a7931;
+ public int a7932;
+ public int a7933;
+ public int a7934;
+ public int a7935;
+ public int a7936;
+ public int a7937;
+ public int a7938;
+ public int a7939;
+ public int a7940;
+ public int a7941;
+ public int a7942;
+ public int a7943;
+ public int a7944;
+ public int a7945;
+ public int a7946;
+ public int a7947;
+ public int a7948;
+ public int a7949;
+ public int a7950;
+ public int a7951;
+ public int a7952;
+ public int a7953;
+ public int a7954;
+ public int a7955;
+ public int a7956;
+ public int a7957;
+ public int a7958;
+ public int a7959;
+ public int a7960;
+ public int a7961;
+ public int a7962;
+ public int a7963;
+ public int a7964;
+ public int a7965;
+ public int a7966;
+ public int a7967;
+ public int a7968;
+ public int a7969;
+ public int a7970;
+ public int a7971;
+ public int a7972;
+ public int a7973;
+ public int a7974;
+ public int a7975;
+ public int a7976;
+ public int a7977;
+ public int a7978;
+ public int a7979;
+ public int a7980;
+ public int a7981;
+ public int a7982;
+ public int a7983;
+ public int a7984;
+ public int a7985;
+ public int a7986;
+ public int a7987;
+ public int a7988;
+ public int a7989;
+ public int a7990;
+ public int a7991;
+ public int a7992;
+ public int a7993;
+ public int a7994;
+ public int a7995;
+ public int a7996;
+ public int a7997;
+ public int a7998;
+ public int a7999;
+ public int a8000;
+ public int a8001;
+ public int a8002;
+ public int a8003;
+ public int a8004;
+ public int a8005;
+ public int a8006;
+ public int a8007;
+ public int a8008;
+ public int a8009;
+ public int a8010;
+ public int a8011;
+ public int a8012;
+ public int a8013;
+ public int a8014;
+ public int a8015;
+ public int a8016;
+ public int a8017;
+ public int a8018;
+ public int a8019;
+ public int a8020;
+ public int a8021;
+ public int a8022;
+ public int a8023;
+ public int a8024;
+ public int a8025;
+ public int a8026;
+ public int a8027;
+ public int a8028;
+ public int a8029;
+ public int a8030;
+ public int a8031;
+ public int a8032;
+ public int a8033;
+ public int a8034;
+ public int a8035;
+ public int a8036;
+ public int a8037;
+ public int a8038;
+ public int a8039;
+ public int a8040;
+ public int a8041;
+ public int a8042;
+ public int a8043;
+ public int a8044;
+ public int a8045;
+ public int a8046;
+ public int a8047;
+ public int a8048;
+ public int a8049;
+ public int a8050;
+ public int a8051;
+ public int a8052;
+ public int a8053;
+ public int a8054;
+ public int a8055;
+ public int a8056;
+ public int a8057;
+ public int a8058;
+ public int a8059;
+ public int a8060;
+ public int a8061;
+ public int a8062;
+ public int a8063;
+ public int a8064;
+ public int a8065;
+ public int a8066;
+ public int a8067;
+ public int a8068;
+ public int a8069;
+ public int a8070;
+ public int a8071;
+ public int a8072;
+ public int a8073;
+ public int a8074;
+ public int a8075;
+ public int a8076;
+ public int a8077;
+ public int a8078;
+ public int a8079;
+ public int a8080;
+ public int a8081;
+ public int a8082;
+ public int a8083;
+ public int a8084;
+ public int a8085;
+ public int a8086;
+ public int a8087;
+ public int a8088;
+ public int a8089;
+ public int a8090;
+ public int a8091;
+ public int a8092;
+ public int a8093;
+ public int a8094;
+ public int a8095;
+ public int a8096;
+ public int a8097;
+ public int a8098;
+ public int a8099;
+ public int a8100;
+ public int a8101;
+ public int a8102;
+ public int a8103;
+ public int a8104;
+ public int a8105;
+ public int a8106;
+ public int a8107;
+ public int a8108;
+ public int a8109;
+ public int a8110;
+ public int a8111;
+ public int a8112;
+ public int a8113;
+ public int a8114;
+ public int a8115;
+ public int a8116;
+ public int a8117;
+ public int a8118;
+ public int a8119;
+ public int a8120;
+ public int a8121;
+ public int a8122;
+ public int a8123;
+ public int a8124;
+ public int a8125;
+ public int a8126;
+ public int a8127;
+ public int a8128;
+ public int a8129;
+ public int a8130;
+ public int a8131;
+ public int a8132;
+ public int a8133;
+ public int a8134;
+ public int a8135;
+ public int a8136;
+ public int a8137;
+ public int a8138;
+ public int a8139;
+ public int a8140;
+ public int a8141;
+ public int a8142;
+ public int a8143;
+ public int a8144;
+ public int a8145;
+ public int a8146;
+ public int a8147;
+ public int a8148;
+ public int a8149;
+ public int a8150;
+ public int a8151;
+ public int a8152;
+ public int a8153;
+ public int a8154;
+ public int a8155;
+ public int a8156;
+ public int a8157;
+ public int a8158;
+ public int a8159;
+ public int a8160;
+ public int a8161;
+ public int a8162;
+ public int a8163;
+ public int a8164;
+ public int a8165;
+ public int a8166;
+ public int a8167;
+ public int a8168;
+ public int a8169;
+ public int a8170;
+ public int a8171;
+ public int a8172;
+ public int a8173;
+ public int a8174;
+ public int a8175;
+ public int a8176;
+ public int a8177;
+ public int a8178;
+ public int a8179;
+ public int a8180;
+ public int a8181;
+ public int a8182;
+ public int a8183;
+ public int a8184;
+ public int a8185;
+ public int a8186;
+ public int a8187;
+ public int a8188;
+ public int a8189;
+ public int a8190;
+ public int a8191;
+ public int a8192;
+ public int a8193;
+ public int a8194;
+ public int a8195;
+ public int a8196;
+ public int a8197;
+ public int a8198;
+ public int a8199;
+ public int a8200;
+ public int a8201;
+ public int a8202;
+ public int a8203;
+ public int a8204;
+ public int a8205;
+ public int a8206;
+ public int a8207;
+ public int a8208;
+ public int a8209;
+ public int a8210;
+ public int a8211;
+ public int a8212;
+ public int a8213;
+ public int a8214;
+ public int a8215;
+ public int a8216;
+ public int a8217;
+ public int a8218;
+ public int a8219;
+ public int a8220;
+ public int a8221;
+ public int a8222;
+ public int a8223;
+ public int a8224;
+ public int a8225;
+ public int a8226;
+ public int a8227;
+ public int a8228;
+ public int a8229;
+ public int a8230;
+ public int a8231;
+ public int a8232;
+ public int a8233;
+ public int a8234;
+ public int a8235;
+ public int a8236;
+ public int a8237;
+ public int a8238;
+ public int a8239;
+ public int a8240;
+ public int a8241;
+ public int a8242;
+ public int a8243;
+ public int a8244;
+ public int a8245;
+ public int a8246;
+ public int a8247;
+ public int a8248;
+ public int a8249;
+ public int a8250;
+ public int a8251;
+ public int a8252;
+ public int a8253;
+ public int a8254;
+ public int a8255;
+ public int a8256;
+ public int a8257;
+ public int a8258;
+ public int a8259;
+ public int a8260;
+ public int a8261;
+ public int a8262;
+ public int a8263;
+ public int a8264;
+ public int a8265;
+ public int a8266;
+ public int a8267;
+ public int a8268;
+ public int a8269;
+ public int a8270;
+ public int a8271;
+ public int a8272;
+ public int a8273;
+ public int a8274;
+ public int a8275;
+ public int a8276;
+ public int a8277;
+ public int a8278;
+ public int a8279;
+ public int a8280;
+ public int a8281;
+ public int a8282;
+ public int a8283;
+ public int a8284;
+ public int a8285;
+ public int a8286;
+ public int a8287;
+ public int a8288;
+ public int a8289;
+ public int a8290;
+ public int a8291;
+ public int a8292;
+ public int a8293;
+ public int a8294;
+ public int a8295;
+ public int a8296;
+ public int a8297;
+ public int a8298;
+ public int a8299;
+ public int a8300;
+ public int a8301;
+ public int a8302;
+ public int a8303;
+ public int a8304;
+ public int a8305;
+ public int a8306;
+ public int a8307;
+ public int a8308;
+ public int a8309;
+ public int a8310;
+ public int a8311;
+ public int a8312;
+ public int a8313;
+ public int a8314;
+ public int a8315;
+ public int a8316;
+ public int a8317;
+ public int a8318;
+ public int a8319;
+ public int a8320;
+ public int a8321;
+ public int a8322;
+ public int a8323;
+ public int a8324;
+ public int a8325;
+ public int a8326;
+ public int a8327;
+ public int a8328;
+ public int a8329;
+ public int a8330;
+ public int a8331;
+ public int a8332;
+ public int a8333;
+ public int a8334;
+ public int a8335;
+ public int a8336;
+ public int a8337;
+ public int a8338;
+ public int a8339;
+ public int a8340;
+ public int a8341;
+ public int a8342;
+ public int a8343;
+ public int a8344;
+ public int a8345;
+ public int a8346;
+ public int a8347;
+ public int a8348;
+ public int a8349;
+ public int a8350;
+ public int a8351;
+ public int a8352;
+ public int a8353;
+ public int a8354;
+ public int a8355;
+ public int a8356;
+ public int a8357;
+ public int a8358;
+ public int a8359;
+ public int a8360;
+ public int a8361;
+ public int a8362;
+ public int a8363;
+ public int a8364;
+ public int a8365;
+ public int a8366;
+ public int a8367;
+ public int a8368;
+ public int a8369;
+ public int a8370;
+ public int a8371;
+ public int a8372;
+ public int a8373;
+ public int a8374;
+ public int a8375;
+ public int a8376;
+ public int a8377;
+ public int a8378;
+ public int a8379;
+ public int a8380;
+ public int a8381;
+ public int a8382;
+ public int a8383;
+ public int a8384;
+ public int a8385;
+ public int a8386;
+ public int a8387;
+ public int a8388;
+ public int a8389;
+ public int a8390;
+ public int a8391;
+ public int a8392;
+ public int a8393;
+ public int a8394;
+ public int a8395;
+ public int a8396;
+ public int a8397;
+ public int a8398;
+ public int a8399;
+ public int a8400;
+ public int a8401;
+ public int a8402;
+ public int a8403;
+ public int a8404;
+ public int a8405;
+ public int a8406;
+ public int a8407;
+ public int a8408;
+ public int a8409;
+ public int a8410;
+ public int a8411;
+ public int a8412;
+ public int a8413;
+ public int a8414;
+ public int a8415;
+ public int a8416;
+ public int a8417;
+ public int a8418;
+ public int a8419;
+ public int a8420;
+ public int a8421;
+ public int a8422;
+ public int a8423;
+ public int a8424;
+ public int a8425;
+ public int a8426;
+ public int a8427;
+ public int a8428;
+ public int a8429;
+ public int a8430;
+ public int a8431;
+ public int a8432;
+ public int a8433;
+ public int a8434;
+ public int a8435;
+ public int a8436;
+ public int a8437;
+ public int a8438;
+ public int a8439;
+ public int a8440;
+ public int a8441;
+ public int a8442;
+ public int a8443;
+ public int a8444;
+ public int a8445;
+ public int a8446;
+ public int a8447;
+ public int a8448;
+ public int a8449;
+ public int a8450;
+ public int a8451;
+ public int a8452;
+ public int a8453;
+ public int a8454;
+ public int a8455;
+ public int a8456;
+ public int a8457;
+ public int a8458;
+ public int a8459;
+ public int a8460;
+ public int a8461;
+ public int a8462;
+ public int a8463;
+ public int a8464;
+ public int a8465;
+ public int a8466;
+ public int a8467;
+ public int a8468;
+ public int a8469;
+ public int a8470;
+ public int a8471;
+ public int a8472;
+ public int a8473;
+ public int a8474;
+ public int a8475;
+ public int a8476;
+ public int a8477;
+ public int a8478;
+ public int a8479;
+ public int a8480;
+ public int a8481;
+ public int a8482;
+ public int a8483;
+ public int a8484;
+ public int a8485;
+ public int a8486;
+ public int a8487;
+ public int a8488;
+ public int a8489;
+ public int a8490;
+ public int a8491;
+ public int a8492;
+ public int a8493;
+ public int a8494;
+ public int a8495;
+ public int a8496;
+ public int a8497;
+ public int a8498;
+ public int a8499;
+ public int a8500;
+ public int a8501;
+ public int a8502;
+ public int a8503;
+ public int a8504;
+ public int a8505;
+ public int a8506;
+ public int a8507;
+ public int a8508;
+ public int a8509;
+ public int a8510;
+ public int a8511;
+ public int a8512;
+ public int a8513;
+ public int a8514;
+ public int a8515;
+ public int a8516;
+ public int a8517;
+ public int a8518;
+ public int a8519;
+ public int a8520;
+ public int a8521;
+ public int a8522;
+ public int a8523;
+ public int a8524;
+ public int a8525;
+ public int a8526;
+ public int a8527;
+ public int a8528;
+ public int a8529;
+ public int a8530;
+ public int a8531;
+ public int a8532;
+ public int a8533;
+ public int a8534;
+ public int a8535;
+ public int a8536;
+ public int a8537;
+ public int a8538;
+ public int a8539;
+ public int a8540;
+ public int a8541;
+ public int a8542;
+ public int a8543;
+ public int a8544;
+ public int a8545;
+ public int a8546;
+ public int a8547;
+ public int a8548;
+ public int a8549;
+ public int a8550;
+ public int a8551;
+ public int a8552;
+ public int a8553;
+ public int a8554;
+ public int a8555;
+ public int a8556;
+ public int a8557;
+ public int a8558;
+ public int a8559;
+ public int a8560;
+ public int a8561;
+ public int a8562;
+ public int a8563;
+ public int a8564;
+ public int a8565;
+ public int a8566;
+ public int a8567;
+ public int a8568;
+ public int a8569;
+ public int a8570;
+ public int a8571;
+ public int a8572;
+ public int a8573;
+ public int a8574;
+ public int a8575;
+ public int a8576;
+ public int a8577;
+ public int a8578;
+ public int a8579;
+ public int a8580;
+ public int a8581;
+ public int a8582;
+ public int a8583;
+ public int a8584;
+ public int a8585;
+ public int a8586;
+ public int a8587;
+ public int a8588;
+ public int a8589;
+ public int a8590;
+ public int a8591;
+ public int a8592;
+ public int a8593;
+ public int a8594;
+ public int a8595;
+ public int a8596;
+ public int a8597;
+ public int a8598;
+ public int a8599;
+ public int a8600;
+ public int a8601;
+ public int a8602;
+ public int a8603;
+ public int a8604;
+ public int a8605;
+ public int a8606;
+ public int a8607;
+ public int a8608;
+ public int a8609;
+ public int a8610;
+ public int a8611;
+ public int a8612;
+ public int a8613;
+ public int a8614;
+ public int a8615;
+ public int a8616;
+ public int a8617;
+ public int a8618;
+ public int a8619;
+ public int a8620;
+ public int a8621;
+ public int a8622;
+ public int a8623;
+ public int a8624;
+ public int a8625;
+ public int a8626;
+ public int a8627;
+ public int a8628;
+ public int a8629;
+ public int a8630;
+ public int a8631;
+ public int a8632;
+ public int a8633;
+ public int a8634;
+ public int a8635;
+ public int a8636;
+ public int a8637;
+ public int a8638;
+ public int a8639;
+ public int a8640;
+ public int a8641;
+ public int a8642;
+ public int a8643;
+ public int a8644;
+ public int a8645;
+ public int a8646;
+ public int a8647;
+ public int a8648;
+ public int a8649;
+ public int a8650;
+ public int a8651;
+ public int a8652;
+ public int a8653;
+ public int a8654;
+ public int a8655;
+ public int a8656;
+ public int a8657;
+ public int a8658;
+ public int a8659;
+ public int a8660;
+ public int a8661;
+ public int a8662;
+ public int a8663;
+ public int a8664;
+ public int a8665;
+ public int a8666;
+ public int a8667;
+ public int a8668;
+ public int a8669;
+ public int a8670;
+ public int a8671;
+ public int a8672;
+ public int a8673;
+ public int a8674;
+ public int a8675;
+ public int a8676;
+ public int a8677;
+ public int a8678;
+ public int a8679;
+ public int a8680;
+ public int a8681;
+ public int a8682;
+ public int a8683;
+ public int a8684;
+ public int a8685;
+ public int a8686;
+ public int a8687;
+ public int a8688;
+ public int a8689;
+ public int a8690;
+ public int a8691;
+ public int a8692;
+ public int a8693;
+ public int a8694;
+ public int a8695;
+ public int a8696;
+ public int a8697;
+ public int a8698;
+ public int a8699;
+ public int a8700;
+ public int a8701;
+ public int a8702;
+ public int a8703;
+ public int a8704;
+ public int a8705;
+ public int a8706;
+ public int a8707;
+ public int a8708;
+ public int a8709;
+ public int a8710;
+ public int a8711;
+ public int a8712;
+ public int a8713;
+ public int a8714;
+ public int a8715;
+ public int a8716;
+ public int a8717;
+ public int a8718;
+ public int a8719;
+ public int a8720;
+ public int a8721;
+ public int a8722;
+ public int a8723;
+ public int a8724;
+ public int a8725;
+ public int a8726;
+ public int a8727;
+ public int a8728;
+ public int a8729;
+ public int a8730;
+ public int a8731;
+ public int a8732;
+ public int a8733;
+ public int a8734;
+ public int a8735;
+ public int a8736;
+ public int a8737;
+ public int a8738;
+ public int a8739;
+ public int a8740;
+ public int a8741;
+ public int a8742;
+ public int a8743;
+ public int a8744;
+ public int a8745;
+ public int a8746;
+ public int a8747;
+ public int a8748;
+ public int a8749;
+ public int a8750;
+ public int a8751;
+ public int a8752;
+ public int a8753;
+ public int a8754;
+ public int a8755;
+ public int a8756;
+ public int a8757;
+ public int a8758;
+ public int a8759;
+ public int a8760;
+ public int a8761;
+ public int a8762;
+ public int a8763;
+ public int a8764;
+ public int a8765;
+ public int a8766;
+ public int a8767;
+ public int a8768;
+ public int a8769;
+ public int a8770;
+ public int a8771;
+ public int a8772;
+ public int a8773;
+ public int a8774;
+ public int a8775;
+ public int a8776;
+ public int a8777;
+ public int a8778;
+ public int a8779;
+ public int a8780;
+ public int a8781;
+ public int a8782;
+ public int a8783;
+ public int a8784;
+ public int a8785;
+ public int a8786;
+ public int a8787;
+ public int a8788;
+ public int a8789;
+ public int a8790;
+ public int a8791;
+ public int a8792;
+ public int a8793;
+ public int a8794;
+ public int a8795;
+ public int a8796;
+ public int a8797;
+ public int a8798;
+ public int a8799;
+ public int a8800;
+ public int a8801;
+ public int a8802;
+ public int a8803;
+ public int a8804;
+ public int a8805;
+ public int a8806;
+ public int a8807;
+ public int a8808;
+ public int a8809;
+ public int a8810;
+ public int a8811;
+ public int a8812;
+ public int a8813;
+ public int a8814;
+ public int a8815;
+ public int a8816;
+ public int a8817;
+ public int a8818;
+ public int a8819;
+ public int a8820;
+ public int a8821;
+ public int a8822;
+ public int a8823;
+ public int a8824;
+ public int a8825;
+ public int a8826;
+ public int a8827;
+ public int a8828;
+ public int a8829;
+ public int a8830;
+ public int a8831;
+ public int a8832;
+ public int a8833;
+ public int a8834;
+ public int a8835;
+ public int a8836;
+ public int a8837;
+ public int a8838;
+ public int a8839;
+ public int a8840;
+ public int a8841;
+ public int a8842;
+ public int a8843;
+ public int a8844;
+ public int a8845;
+ public int a8846;
+ public int a8847;
+ public int a8848;
+ public int a8849;
+ public int a8850;
+ public int a8851;
+ public int a8852;
+ public int a8853;
+ public int a8854;
+ public int a8855;
+ public int a8856;
+ public int a8857;
+ public int a8858;
+ public int a8859;
+ public int a8860;
+ public int a8861;
+ public int a8862;
+ public int a8863;
+ public int a8864;
+ public int a8865;
+ public int a8866;
+ public int a8867;
+ public int a8868;
+ public int a8869;
+ public int a8870;
+ public int a8871;
+ public int a8872;
+ public int a8873;
+ public int a8874;
+ public int a8875;
+ public int a8876;
+ public int a8877;
+ public int a8878;
+ public int a8879;
+ public int a8880;
+ public int a8881;
+ public int a8882;
+ public int a8883;
+ public int a8884;
+ public int a8885;
+ public int a8886;
+ public int a8887;
+ public int a8888;
+ public int a8889;
+ public int a8890;
+ public int a8891;
+ public int a8892;
+ public int a8893;
+ public int a8894;
+ public int a8895;
+ public int a8896;
+ public int a8897;
+ public int a8898;
+ public int a8899;
+ public int a8900;
+ public int a8901;
+ public int a8902;
+ public int a8903;
+ public int a8904;
+ public int a8905;
+ public int a8906;
+ public int a8907;
+ public int a8908;
+ public int a8909;
+ public int a8910;
+ public int a8911;
+ public int a8912;
+ public int a8913;
+ public int a8914;
+ public int a8915;
+ public int a8916;
+ public int a8917;
+ public int a8918;
+ public int a8919;
+ public int a8920;
+ public int a8921;
+ public int a8922;
+ public int a8923;
+ public int a8924;
+ public int a8925;
+ public int a8926;
+ public int a8927;
+ public int a8928;
+ public int a8929;
+ public int a8930;
+ public int a8931;
+ public int a8932;
+ public int a8933;
+ public int a8934;
+ public int a8935;
+ public int a8936;
+ public int a8937;
+ public int a8938;
+ public int a8939;
+ public int a8940;
+ public int a8941;
+ public int a8942;
+ public int a8943;
+ public int a8944;
+ public int a8945;
+ public int a8946;
+ public int a8947;
+ public int a8948;
+ public int a8949;
+ public int a8950;
+ public int a8951;
+ public int a8952;
+ public int a8953;
+ public int a8954;
+ public int a8955;
+ public int a8956;
+ public int a8957;
+ public int a8958;
+ public int a8959;
+ public int a8960;
+ public int a8961;
+ public int a8962;
+ public int a8963;
+ public int a8964;
+ public int a8965;
+ public int a8966;
+ public int a8967;
+ public int a8968;
+ public int a8969;
+ public int a8970;
+ public int a8971;
+ public int a8972;
+ public int a8973;
+ public int a8974;
+ public int a8975;
+ public int a8976;
+ public int a8977;
+ public int a8978;
+ public int a8979;
+ public int a8980;
+ public int a8981;
+ public int a8982;
+ public int a8983;
+ public int a8984;
+ public int a8985;
+ public int a8986;
+ public int a8987;
+ public int a8988;
+ public int a8989;
+ public int a8990;
+ public int a8991;
+ public int a8992;
+ public int a8993;
+ public int a8994;
+ public int a8995;
+ public int a8996;
+ public int a8997;
+ public int a8998;
+ public int a8999;
+ public int a9000;
+ public int a9001;
+ public int a9002;
+ public int a9003;
+ public int a9004;
+ public int a9005;
+ public int a9006;
+ public int a9007;
+ public int a9008;
+ public int a9009;
+ public int a9010;
+ public int a9011;
+ public int a9012;
+ public int a9013;
+ public int a9014;
+ public int a9015;
+ public int a9016;
+ public int a9017;
+ public int a9018;
+ public int a9019;
+ public int a9020;
+ public int a9021;
+ public int a9022;
+ public int a9023;
+ public int a9024;
+ public int a9025;
+ public int a9026;
+ public int a9027;
+ public int a9028;
+ public int a9029;
+ public int a9030;
+ public int a9031;
+ public int a9032;
+ public int a9033;
+ public int a9034;
+ public int a9035;
+ public int a9036;
+ public int a9037;
+ public int a9038;
+ public int a9039;
+ public int a9040;
+ public int a9041;
+ public int a9042;
+ public int a9043;
+ public int a9044;
+ public int a9045;
+ public int a9046;
+ public int a9047;
+ public int a9048;
+ public int a9049;
+ public int a9050;
+ public int a9051;
+ public int a9052;
+ public int a9053;
+ public int a9054;
+ public int a9055;
+ public int a9056;
+ public int a9057;
+ public int a9058;
+ public int a9059;
+ public int a9060;
+ public int a9061;
+ public int a9062;
+ public int a9063;
+ public int a9064;
+ public int a9065;
+ public int a9066;
+ public int a9067;
+ public int a9068;
+ public int a9069;
+ public int a9070;
+ public int a9071;
+ public int a9072;
+ public int a9073;
+ public int a9074;
+ public int a9075;
+ public int a9076;
+ public int a9077;
+ public int a9078;
+ public int a9079;
+ public int a9080;
+ public int a9081;
+ public int a9082;
+ public int a9083;
+ public int a9084;
+ public int a9085;
+ public int a9086;
+ public int a9087;
+ public int a9088;
+ public int a9089;
+ public int a9090;
+ public int a9091;
+ public int a9092;
+ public int a9093;
+ public int a9094;
+ public int a9095;
+ public int a9096;
+ public int a9097;
+ public int a9098;
+ public int a9099;
+ public int a9100;
+ public int a9101;
+ public int a9102;
+ public int a9103;
+ public int a9104;
+ public int a9105;
+ public int a9106;
+ public int a9107;
+ public int a9108;
+ public int a9109;
+ public int a9110;
+ public int a9111;
+ public int a9112;
+ public int a9113;
+ public int a9114;
+ public int a9115;
+ public int a9116;
+ public int a9117;
+ public int a9118;
+ public int a9119;
+ public int a9120;
+ public int a9121;
+ public int a9122;
+ public int a9123;
+ public int a9124;
+ public int a9125;
+ public int a9126;
+ public int a9127;
+ public int a9128;
+ public int a9129;
+ public int a9130;
+ public int a9131;
+ public int a9132;
+ public int a9133;
+ public int a9134;
+ public int a9135;
+ public int a9136;
+ public int a9137;
+ public int a9138;
+ public int a9139;
+ public int a9140;
+ public int a9141;
+ public int a9142;
+ public int a9143;
+ public int a9144;
+ public int a9145;
+ public int a9146;
+ public int a9147;
+ public int a9148;
+ public int a9149;
+ public int a9150;
+ public int a9151;
+ public int a9152;
+ public int a9153;
+ public int a9154;
+ public int a9155;
+ public int a9156;
+ public int a9157;
+ public int a9158;
+ public int a9159;
+ public int a9160;
+ public int a9161;
+ public int a9162;
+ public int a9163;
+ public int a9164;
+ public int a9165;
+ public int a9166;
+ public int a9167;
+ public int a9168;
+ public int a9169;
+ public int a9170;
+ public int a9171;
+ public int a9172;
+ public int a9173;
+ public int a9174;
+ public int a9175;
+ public int a9176;
+ public int a9177;
+ public int a9178;
+ public int a9179;
+ public int a9180;
+ public int a9181;
+ public int a9182;
+ public int a9183;
+ public int a9184;
+ public int a9185;
+ public int a9186;
+ public int a9187;
+ public int a9188;
+ public int a9189;
+ public int a9190;
+ public int a9191;
+ public int a9192;
+ public int a9193;
+ public int a9194;
+ public int a9195;
+ public int a9196;
+ public int a9197;
+ public int a9198;
+ public int a9199;
+ public int a9200;
+ public int a9201;
+ public int a9202;
+ public int a9203;
+ public int a9204;
+ public int a9205;
+ public int a9206;
+ public int a9207;
+ public int a9208;
+ public int a9209;
+ public int a9210;
+ public int a9211;
+ public int a9212;
+ public int a9213;
+ public int a9214;
+ public int a9215;
+ public int a9216;
+ public int a9217;
+ public int a9218;
+ public int a9219;
+ public int a9220;
+ public int a9221;
+ public int a9222;
+ public int a9223;
+ public int a9224;
+ public int a9225;
+ public int a9226;
+ public int a9227;
+ public int a9228;
+ public int a9229;
+ public int a9230;
+ public int a9231;
+ public int a9232;
+ public int a9233;
+ public int a9234;
+ public int a9235;
+ public int a9236;
+ public int a9237;
+ public int a9238;
+ public int a9239;
+ public int a9240;
+ public int a9241;
+ public int a9242;
+ public int a9243;
+ public int a9244;
+ public int a9245;
+ public int a9246;
+ public int a9247;
+ public int a9248;
+ public int a9249;
+ public int a9250;
+ public int a9251;
+ public int a9252;
+ public int a9253;
+ public int a9254;
+ public int a9255;
+ public int a9256;
+ public int a9257;
+ public int a9258;
+ public int a9259;
+ public int a9260;
+ public int a9261;
+ public int a9262;
+ public int a9263;
+ public int a9264;
+ public int a9265;
+ public int a9266;
+ public int a9267;
+ public int a9268;
+ public int a9269;
+ public int a9270;
+ public int a9271;
+ public int a9272;
+ public int a9273;
+ public int a9274;
+ public int a9275;
+ public int a9276;
+ public int a9277;
+ public int a9278;
+ public int a9279;
+ public int a9280;
+ public int a9281;
+ public int a9282;
+ public int a9283;
+ public int a9284;
+ public int a9285;
+ public int a9286;
+ public int a9287;
+ public int a9288;
+ public int a9289;
+ public int a9290;
+ public int a9291;
+ public int a9292;
+ public int a9293;
+ public int a9294;
+ public int a9295;
+ public int a9296;
+ public int a9297;
+ public int a9298;
+ public int a9299;
+ public int a9300;
+ public int a9301;
+ public int a9302;
+ public int a9303;
+ public int a9304;
+ public int a9305;
+ public int a9306;
+ public int a9307;
+ public int a9308;
+ public int a9309;
+ public int a9310;
+ public int a9311;
+ public int a9312;
+ public int a9313;
+ public int a9314;
+ public int a9315;
+ public int a9316;
+ public int a9317;
+ public int a9318;
+ public int a9319;
+ public int a9320;
+ public int a9321;
+ public int a9322;
+ public int a9323;
+ public int a9324;
+ public int a9325;
+ public int a9326;
+ public int a9327;
+ public int a9328;
+ public int a9329;
+ public int a9330;
+ public int a9331;
+ public int a9332;
+ public int a9333;
+ public int a9334;
+ public int a9335;
+ public int a9336;
+ public int a9337;
+ public int a9338;
+ public int a9339;
+ public int a9340;
+ public int a9341;
+ public int a9342;
+ public int a9343;
+ public int a9344;
+ public int a9345;
+ public int a9346;
+ public int a9347;
+ public int a9348;
+ public int a9349;
+ public int a9350;
+ public int a9351;
+ public int a9352;
+ public int a9353;
+ public int a9354;
+ public int a9355;
+ public int a9356;
+ public int a9357;
+ public int a9358;
+ public int a9359;
+ public int a9360;
+ public int a9361;
+ public int a9362;
+ public int a9363;
+ public int a9364;
+ public int a9365;
+ public int a9366;
+ public int a9367;
+ public int a9368;
+ public int a9369;
+ public int a9370;
+ public int a9371;
+ public int a9372;
+ public int a9373;
+ public int a9374;
+ public int a9375;
+ public int a9376;
+ public int a9377;
+ public int a9378;
+ public int a9379;
+ public int a9380;
+ public int a9381;
+ public int a9382;
+ public int a9383;
+ public int a9384;
+ public int a9385;
+ public int a9386;
+ public int a9387;
+ public int a9388;
+ public int a9389;
+ public int a9390;
+ public int a9391;
+ public int a9392;
+ public int a9393;
+ public int a9394;
+ public int a9395;
+ public int a9396;
+ public int a9397;
+ public int a9398;
+ public int a9399;
+ public int a9400;
+ public int a9401;
+ public int a9402;
+ public int a9403;
+ public int a9404;
+ public int a9405;
+ public int a9406;
+ public int a9407;
+ public int a9408;
+ public int a9409;
+ public int a9410;
+ public int a9411;
+ public int a9412;
+ public int a9413;
+ public int a9414;
+ public int a9415;
+ public int a9416;
+ public int a9417;
+ public int a9418;
+ public int a9419;
+ public int a9420;
+ public int a9421;
+ public int a9422;
+ public int a9423;
+ public int a9424;
+ public int a9425;
+ public int a9426;
+ public int a9427;
+ public int a9428;
+ public int a9429;
+ public int a9430;
+ public int a9431;
+ public int a9432;
+ public int a9433;
+ public int a9434;
+ public int a9435;
+ public int a9436;
+ public int a9437;
+ public int a9438;
+ public int a9439;
+ public int a9440;
+ public int a9441;
+ public int a9442;
+ public int a9443;
+ public int a9444;
+ public int a9445;
+ public int a9446;
+ public int a9447;
+ public int a9448;
+ public int a9449;
+ public int a9450;
+ public int a9451;
+ public int a9452;
+ public int a9453;
+ public int a9454;
+ public int a9455;
+ public int a9456;
+ public int a9457;
+ public int a9458;
+ public int a9459;
+ public int a9460;
+ public int a9461;
+ public int a9462;
+ public int a9463;
+ public int a9464;
+ public int a9465;
+ public int a9466;
+ public int a9467;
+ public int a9468;
+ public int a9469;
+ public int a9470;
+ public int a9471;
+ public int a9472;
+ public int a9473;
+ public int a9474;
+ public int a9475;
+ public int a9476;
+ public int a9477;
+ public int a9478;
+ public int a9479;
+ public int a9480;
+ public int a9481;
+ public int a9482;
+ public int a9483;
+ public int a9484;
+ public int a9485;
+ public int a9486;
+ public int a9487;
+ public int a9488;
+ public int a9489;
+ public int a9490;
+ public int a9491;
+ public int a9492;
+ public int a9493;
+ public int a9494;
+ public int a9495;
+ public int a9496;
+ public int a9497;
+ public int a9498;
+ public int a9499;
+ public int a9500;
+ public int a9501;
+ public int a9502;
+ public int a9503;
+ public int a9504;
+ public int a9505;
+ public int a9506;
+ public int a9507;
+ public int a9508;
+ public int a9509;
+ public int a9510;
+ public int a9511;
+ public int a9512;
+ public int a9513;
+ public int a9514;
+ public int a9515;
+ public int a9516;
+ public int a9517;
+ public int a9518;
+ public int a9519;
+ public int a9520;
+ public int a9521;
+ public int a9522;
+ public int a9523;
+ public int a9524;
+ public int a9525;
+ public int a9526;
+ public int a9527;
+ public int a9528;
+ public int a9529;
+ public int a9530;
+ public int a9531;
+ public int a9532;
+ public int a9533;
+ public int a9534;
+ public int a9535;
+ public int a9536;
+ public int a9537;
+ public int a9538;
+ public int a9539;
+ public int a9540;
+ public int a9541;
+ public int a9542;
+ public int a9543;
+ public int a9544;
+ public int a9545;
+ public int a9546;
+ public int a9547;
+ public int a9548;
+ public int a9549;
+ public int a9550;
+ public int a9551;
+ public int a9552;
+ public int a9553;
+ public int a9554;
+ public int a9555;
+ public int a9556;
+ public int a9557;
+ public int a9558;
+ public int a9559;
+ public int a9560;
+ public int a9561;
+ public int a9562;
+ public int a9563;
+ public int a9564;
+ public int a9565;
+ public int a9566;
+ public int a9567;
+ public int a9568;
+ public int a9569;
+ public int a9570;
+ public int a9571;
+ public int a9572;
+ public int a9573;
+ public int a9574;
+ public int a9575;
+ public int a9576;
+ public int a9577;
+ public int a9578;
+ public int a9579;
+ public int a9580;
+ public int a9581;
+ public int a9582;
+ public int a9583;
+ public int a9584;
+ public int a9585;
+ public int a9586;
+ public int a9587;
+ public int a9588;
+ public int a9589;
+ public int a9590;
+ public int a9591;
+ public int a9592;
+ public int a9593;
+ public int a9594;
+ public int a9595;
+ public int a9596;
+ public int a9597;
+ public int a9598;
+ public int a9599;
+ public int a9600;
+ public int a9601;
+ public int a9602;
+ public int a9603;
+ public int a9604;
+ public int a9605;
+ public int a9606;
+ public int a9607;
+ public int a9608;
+ public int a9609;
+ public int a9610;
+ public int a9611;
+ public int a9612;
+ public int a9613;
+ public int a9614;
+ public int a9615;
+ public int a9616;
+ public int a9617;
+ public int a9618;
+ public int a9619;
+ public int a9620;
+ public int a9621;
+ public int a9622;
+ public int a9623;
+ public int a9624;
+ public int a9625;
+ public int a9626;
+ public int a9627;
+ public int a9628;
+ public int a9629;
+ public int a9630;
+ public int a9631;
+ public int a9632;
+ public int a9633;
+ public int a9634;
+ public int a9635;
+ public int a9636;
+ public int a9637;
+ public int a9638;
+ public int a9639;
+ public int a9640;
+ public int a9641;
+ public int a9642;
+ public int a9643;
+ public int a9644;
+ public int a9645;
+ public int a9646;
+ public int a9647;
+ public int a9648;
+ public int a9649;
+ public int a9650;
+ public int a9651;
+ public int a9652;
+ public int a9653;
+ public int a9654;
+ public int a9655;
+ public int a9656;
+ public int a9657;
+ public int a9658;
+ public int a9659;
+ public int a9660;
+ public int a9661;
+ public int a9662;
+ public int a9663;
+ public int a9664;
+ public int a9665;
+ public int a9666;
+ public int a9667;
+ public int a9668;
+ public int a9669;
+ public int a9670;
+ public int a9671;
+ public int a9672;
+ public int a9673;
+ public int a9674;
+ public int a9675;
+ public int a9676;
+ public int a9677;
+ public int a9678;
+ public int a9679;
+ public int a9680;
+ public int a9681;
+ public int a9682;
+ public int a9683;
+ public int a9684;
+ public int a9685;
+ public int a9686;
+ public int a9687;
+ public int a9688;
+ public int a9689;
+ public int a9690;
+ public int a9691;
+ public int a9692;
+ public int a9693;
+ public int a9694;
+ public int a9695;
+ public int a9696;
+ public int a9697;
+ public int a9698;
+ public int a9699;
+ public int a9700;
+ public int a9701;
+ public int a9702;
+ public int a9703;
+ public int a9704;
+ public int a9705;
+ public int a9706;
+ public int a9707;
+ public int a9708;
+ public int a9709;
+ public int a9710;
+ public int a9711;
+ public int a9712;
+ public int a9713;
+ public int a9714;
+ public int a9715;
+ public int a9716;
+ public int a9717;
+ public int a9718;
+ public int a9719;
+ public int a9720;
+ public int a9721;
+ public int a9722;
+ public int a9723;
+ public int a9724;
+ public int a9725;
+ public int a9726;
+ public int a9727;
+ public int a9728;
+ public int a9729;
+ public int a9730;
+ public int a9731;
+ public int a9732;
+ public int a9733;
+ public int a9734;
+ public int a9735;
+ public int a9736;
+ public int a9737;
+ public int a9738;
+ public int a9739;
+ public int a9740;
+ public int a9741;
+ public int a9742;
+ public int a9743;
+ public int a9744;
+ public int a9745;
+ public int a9746;
+ public int a9747;
+ public int a9748;
+ public int a9749;
+ public int a9750;
+ public int a9751;
+ public int a9752;
+ public int a9753;
+ public int a9754;
+ public int a9755;
+ public int a9756;
+ public int a9757;
+ public int a9758;
+ public int a9759;
+ public int a9760;
+ public int a9761;
+ public int a9762;
+ public int a9763;
+ public int a9764;
+ public int a9765;
+ public int a9766;
+ public int a9767;
+ public int a9768;
+ public int a9769;
+ public int a9770;
+ public int a9771;
+ public int a9772;
+ public int a9773;
+ public int a9774;
+ public int a9775;
+ public int a9776;
+ public int a9777;
+ public int a9778;
+ public int a9779;
+ public int a9780;
+ public int a9781;
+ public int a9782;
+ public int a9783;
+ public int a9784;
+ public int a9785;
+ public int a9786;
+ public int a9787;
+ public int a9788;
+ public int a9789;
+ public int a9790;
+ public int a9791;
+ public int a9792;
+ public int a9793;
+ public int a9794;
+ public int a9795;
+ public int a9796;
+ public int a9797;
+ public int a9798;
+ public int a9799;
+ public int a9800;
+ public int a9801;
+ public int a9802;
+ public int a9803;
+ public int a9804;
+ public int a9805;
+ public int a9806;
+ public int a9807;
+ public int a9808;
+ public int a9809;
+ public int a9810;
+ public int a9811;
+ public int a9812;
+ public int a9813;
+ public int a9814;
+ public int a9815;
+ public int a9816;
+ public int a9817;
+ public int a9818;
+ public int a9819;
+ public int a9820;
+ public int a9821;
+ public int a9822;
+ public int a9823;
+ public int a9824;
+ public int a9825;
+ public int a9826;
+ public int a9827;
+ public int a9828;
+ public int a9829;
+ public int a9830;
+ public int a9831;
+ public int a9832;
+ public int a9833;
+ public int a9834;
+ public int a9835;
+ public int a9836;
+ public int a9837;
+ public int a9838;
+ public int a9839;
+ public int a9840;
+ public int a9841;
+ public int a9842;
+ public int a9843;
+ public int a9844;
+ public int a9845;
+ public int a9846;
+ public int a9847;
+ public int a9848;
+ public int a9849;
+ public int a9850;
+ public int a9851;
+ public int a9852;
+ public int a9853;
+ public int a9854;
+ public int a9855;
+ public int a9856;
+ public int a9857;
+ public int a9858;
+ public int a9859;
+ public int a9860;
+ public int a9861;
+ public int a9862;
+ public int a9863;
+ public int a9864;
+ public int a9865;
+ public int a9866;
+ public int a9867;
+ public int a9868;
+ public int a9869;
+ public int a9870;
+ public int a9871;
+ public int a9872;
+ public int a9873;
+ public int a9874;
+ public int a9875;
+ public int a9876;
+ public int a9877;
+ public int a9878;
+ public int a9879;
+ public int a9880;
+ public int a9881;
+ public int a9882;
+ public int a9883;
+ public int a9884;
+ public int a9885;
+ public int a9886;
+ public int a9887;
+ public int a9888;
+ public int a9889;
+ public int a9890;
+ public int a9891;
+ public int a9892;
+ public int a9893;
+ public int a9894;
+ public int a9895;
+ public int a9896;
+ public int a9897;
+ public int a9898;
+ public int a9899;
+ public int a9900;
+ public int a9901;
+ public int a9902;
+ public int a9903;
+ public int a9904;
+ public int a9905;
+ public int a9906;
+ public int a9907;
+ public int a9908;
+ public int a9909;
+ public int a9910;
+ public int a9911;
+ public int a9912;
+ public int a9913;
+ public int a9914;
+ public int a9915;
+ public int a9916;
+ public int a9917;
+ public int a9918;
+ public int a9919;
+ public int a9920;
+ public int a9921;
+ public int a9922;
+ public int a9923;
+ public int a9924;
+ public int a9925;
+ public int a9926;
+ public int a9927;
+ public int a9928;
+ public int a9929;
+ public int a9930;
+ public int a9931;
+ public int a9932;
+ public int a9933;
+ public int a9934;
+ public int a9935;
+ public int a9936;
+ public int a9937;
+ public int a9938;
+ public int a9939;
+ public int a9940;
+ public int a9941;
+ public int a9942;
+ public int a9943;
+ public int a9944;
+ public int a9945;
+ public int a9946;
+ public int a9947;
+ public int a9948;
+ public int a9949;
+ public int a9950;
+ public int a9951;
+ public int a9952;
+ public int a9953;
+ public int a9954;
+ public int a9955;
+ public int a9956;
+ public int a9957;
+ public int a9958;
+ public int a9959;
+ public int a9960;
+ public int a9961;
+ public int a9962;
+ public int a9963;
+ public int a9964;
+ public int a9965;
+ public int a9966;
+ public int a9967;
+ public int a9968;
+ public int a9969;
+ public int a9970;
+ public int a9971;
+ public int a9972;
+ public int a9973;
+ public int a9974;
+ public int a9975;
+ public int a9976;
+ public int a9977;
+ public int a9978;
+ public int a9979;
+ public int a9980;
+ public int a9981;
+ public int a9982;
+ public int a9983;
+ public int a9984;
+ public int a9985;
+ public int a9986;
+ public int a9987;
+ public int a9988;
+ public int a9989;
+ public int a9990;
+ public int a9991;
+ public int a9992;
+ public int a9993;
+ public int a9994;
+ public int a9995;
+ public int a9996;
+ public int a9997;
+ public int a9998;
+ public int a9999;
+ public int a10000;
+ public int a10001;
+ public int a10002;
+ public int a10003;
+ public int a10004;
+ public int a10005;
+ public int a10006;
+ public int a10007;
+ public int a10008;
+ public int a10009;
+ public int a10010;
+ public int a10011;
+ public int a10012;
+ public int a10013;
+ public int a10014;
+ public int a10015;
+ public int a10016;
+ public int a10017;
+ public int a10018;
+ public int a10019;
+ public int a10020;
+ public int a10021;
+ public int a10022;
+ public int a10023;
+ public int a10024;
+ public int a10025;
+ public int a10026;
+ public int a10027;
+ public int a10028;
+ public int a10029;
+ public int a10030;
+ public int a10031;
+ public int a10032;
+ public int a10033;
+ public int a10034;
+ public int a10035;
+ public int a10036;
+ public int a10037;
+ public int a10038;
+ public int a10039;
+ public int a10040;
+ public int a10041;
+ public int a10042;
+ public int a10043;
+ public int a10044;
+ public int a10045;
+ public int a10046;
+ public int a10047;
+ public int a10048;
+ public int a10049;
+ public int a10050;
+ public int a10051;
+ public int a10052;
+ public int a10053;
+ public int a10054;
+ public int a10055;
+ public int a10056;
+ public int a10057;
+ public int a10058;
+ public int a10059;
+ public int a10060;
+ public int a10061;
+ public int a10062;
+ public int a10063;
+ public int a10064;
+ public int a10065;
+ public int a10066;
+ public int a10067;
+ public int a10068;
+ public int a10069;
+ public int a10070;
+ public int a10071;
+ public int a10072;
+ public int a10073;
+ public int a10074;
+ public int a10075;
+ public int a10076;
+ public int a10077;
+ public int a10078;
+ public int a10079;
+ public int a10080;
+ public int a10081;
+ public int a10082;
+ public int a10083;
+ public int a10084;
+ public int a10085;
+ public int a10086;
+ public int a10087;
+ public int a10088;
+ public int a10089;
+ public int a10090;
+ public int a10091;
+ public int a10092;
+ public int a10093;
+ public int a10094;
+ public int a10095;
+ public int a10096;
+ public int a10097;
+ public int a10098;
+ public int a10099;
+ public int a10100;
+ public int a10101;
+ public int a10102;
+ public int a10103;
+ public int a10104;
+ public int a10105;
+ public int a10106;
+ public int a10107;
+ public int a10108;
+ public int a10109;
+ public int a10110;
+ public int a10111;
+ public int a10112;
+ public int a10113;
+ public int a10114;
+ public int a10115;
+ public int a10116;
+ public int a10117;
+ public int a10118;
+ public int a10119;
+ public int a10120;
+ public int a10121;
+ public int a10122;
+ public int a10123;
+ public int a10124;
+ public int a10125;
+ public int a10126;
+ public int a10127;
+ public int a10128;
+ public int a10129;
+ public int a10130;
+ public int a10131;
+ public int a10132;
+ public int a10133;
+ public int a10134;
+ public int a10135;
+ public int a10136;
+ public int a10137;
+ public int a10138;
+ public int a10139;
+ public int a10140;
+ public int a10141;
+ public int a10142;
+ public int a10143;
+ public int a10144;
+ public int a10145;
+ public int a10146;
+ public int a10147;
+ public int a10148;
+ public int a10149;
+ public int a10150;
+ public int a10151;
+ public int a10152;
+ public int a10153;
+ public int a10154;
+ public int a10155;
+ public int a10156;
+ public int a10157;
+ public int a10158;
+ public int a10159;
+ public int a10160;
+ public int a10161;
+ public int a10162;
+ public int a10163;
+ public int a10164;
+ public int a10165;
+ public int a10166;
+ public int a10167;
+ public int a10168;
+ public int a10169;
+ public int a10170;
+ public int a10171;
+ public int a10172;
+ public int a10173;
+ public int a10174;
+ public int a10175;
+ public int a10176;
+ public int a10177;
+ public int a10178;
+ public int a10179;
+ public int a10180;
+ public int a10181;
+ public int a10182;
+ public int a10183;
+ public int a10184;
+ public int a10185;
+ public int a10186;
+ public int a10187;
+ public int a10188;
+ public int a10189;
+ public int a10190;
+ public int a10191;
+ public int a10192;
+ public int a10193;
+ public int a10194;
+ public int a10195;
+ public int a10196;
+ public int a10197;
+ public int a10198;
+ public int a10199;
+ public int a10200;
+ public int a10201;
+ public int a10202;
+ public int a10203;
+ public int a10204;
+ public int a10205;
+ public int a10206;
+ public int a10207;
+ public int a10208;
+ public int a10209;
+ public int a10210;
+ public int a10211;
+ public int a10212;
+ public int a10213;
+ public int a10214;
+ public int a10215;
+ public int a10216;
+ public int a10217;
+ public int a10218;
+ public int a10219;
+ public int a10220;
+ public int a10221;
+ public int a10222;
+ public int a10223;
+ public int a10224;
+ public int a10225;
+ public int a10226;
+ public int a10227;
+ public int a10228;
+ public int a10229;
+ public int a10230;
+ public int a10231;
+ public int a10232;
+ public int a10233;
+ public int a10234;
+ public int a10235;
+ public int a10236;
+ public int a10237;
+ public int a10238;
+ public int a10239;
+ public int a10240;
+ public int a10241;
+ public int a10242;
+ public int a10243;
+ public int a10244;
+ public int a10245;
+ public int a10246;
+ public int a10247;
+ public int a10248;
+ public int a10249;
+ public int a10250;
+ public int a10251;
+ public int a10252;
+ public int a10253;
+ public int a10254;
+ public int a10255;
+ public int a10256;
+ public int a10257;
+ public int a10258;
+ public int a10259;
+ public int a10260;
+ public int a10261;
+ public int a10262;
+ public int a10263;
+ public int a10264;
+ public int a10265;
+ public int a10266;
+ public int a10267;
+ public int a10268;
+ public int a10269;
+ public int a10270;
+ public int a10271;
+ public int a10272;
+ public int a10273;
+ public int a10274;
+ public int a10275;
+ public int a10276;
+ public int a10277;
+ public int a10278;
+ public int a10279;
+ public int a10280;
+ public int a10281;
+ public int a10282;
+ public int a10283;
+ public int a10284;
+ public int a10285;
+ public int a10286;
+ public int a10287;
+ public int a10288;
+ public int a10289;
+ public int a10290;
+ public int a10291;
+ public int a10292;
+ public int a10293;
+ public int a10294;
+ public int a10295;
+ public int a10296;
+ public int a10297;
+ public int a10298;
+ public int a10299;
+ public int a10300;
+ public int a10301;
+ public int a10302;
+ public int a10303;
+ public int a10304;
+ public int a10305;
+ public int a10306;
+ public int a10307;
+ public int a10308;
+ public int a10309;
+ public int a10310;
+ public int a10311;
+ public int a10312;
+ public int a10313;
+ public int a10314;
+ public int a10315;
+ public int a10316;
+ public int a10317;
+ public int a10318;
+ public int a10319;
+ public int a10320;
+ public int a10321;
+ public int a10322;
+ public int a10323;
+ public int a10324;
+ public int a10325;
+ public int a10326;
+ public int a10327;
+ public int a10328;
+ public int a10329;
+ public int a10330;
+ public int a10331;
+ public int a10332;
+ public int a10333;
+ public int a10334;
+ public int a10335;
+ public int a10336;
+ public int a10337;
+ public int a10338;
+ public int a10339;
+ public int a10340;
+ public int a10341;
+ public int a10342;
+ public int a10343;
+ public int a10344;
+ public int a10345;
+ public int a10346;
+ public int a10347;
+ public int a10348;
+ public int a10349;
+ public int a10350;
+ public int a10351;
+ public int a10352;
+ public int a10353;
+ public int a10354;
+ public int a10355;
+ public int a10356;
+ public int a10357;
+ public int a10358;
+ public int a10359;
+ public int a10360;
+ public int a10361;
+ public int a10362;
+ public int a10363;
+ public int a10364;
+ public int a10365;
+ public int a10366;
+ public int a10367;
+ public int a10368;
+ public int a10369;
+ public int a10370;
+ public int a10371;
+ public int a10372;
+ public int a10373;
+ public int a10374;
+ public int a10375;
+ public int a10376;
+ public int a10377;
+ public int a10378;
+ public int a10379;
+ public int a10380;
+ public int a10381;
+ public int a10382;
+ public int a10383;
+ public int a10384;
+ public int a10385;
+ public int a10386;
+ public int a10387;
+ public int a10388;
+ public int a10389;
+ public int a10390;
+ public int a10391;
+ public int a10392;
+ public int a10393;
+ public int a10394;
+ public int a10395;
+ public int a10396;
+ public int a10397;
+ public int a10398;
+ public int a10399;
+ public int a10400;
+ public int a10401;
+ public int a10402;
+ public int a10403;
+ public int a10404;
+ public int a10405;
+ public int a10406;
+ public int a10407;
+ public int a10408;
+ public int a10409;
+ public int a10410;
+ public int a10411;
+ public int a10412;
+ public int a10413;
+ public int a10414;
+ public int a10415;
+ public int a10416;
+ public int a10417;
+ public int a10418;
+ public int a10419;
+ public int a10420;
+ public int a10421;
+ public int a10422;
+ public int a10423;
+ public int a10424;
+ public int a10425;
+ public int a10426;
+ public int a10427;
+ public int a10428;
+ public int a10429;
+ public int a10430;
+ public int a10431;
+ public int a10432;
+ public int a10433;
+ public int a10434;
+ public int a10435;
+ public int a10436;
+ public int a10437;
+ public int a10438;
+ public int a10439;
+ public int a10440;
+ public int a10441;
+ public int a10442;
+ public int a10443;
+ public int a10444;
+ public int a10445;
+ public int a10446;
+ public int a10447;
+ public int a10448;
+ public int a10449;
+ public int a10450;
+ public int a10451;
+ public int a10452;
+ public int a10453;
+ public int a10454;
+ public int a10455;
+ public int a10456;
+ public int a10457;
+ public int a10458;
+ public int a10459;
+ public int a10460;
+ public int a10461;
+ public int a10462;
+ public int a10463;
+ public int a10464;
+ public int a10465;
+ public int a10466;
+ public int a10467;
+ public int a10468;
+ public int a10469;
+ public int a10470;
+ public int a10471;
+ public int a10472;
+ public int a10473;
+ public int a10474;
+ public int a10475;
+ public int a10476;
+ public int a10477;
+ public int a10478;
+ public int a10479;
+ public int a10480;
+ public int a10481;
+ public int a10482;
+ public int a10483;
+ public int a10484;
+ public int a10485;
+ public int a10486;
+ public int a10487;
+ public int a10488;
+ public int a10489;
+ public int a10490;
+ public int a10491;
+ public int a10492;
+ public int a10493;
+ public int a10494;
+ public int a10495;
+ public int a10496;
+ public int a10497;
+ public int a10498;
+ public int a10499;
+ public int a10500;
+ public int a10501;
+ public int a10502;
+ public int a10503;
+ public int a10504;
+ public int a10505;
+ public int a10506;
+ public int a10507;
+ public int a10508;
+ public int a10509;
+ public int a10510;
+ public int a10511;
+ public int a10512;
+ public int a10513;
+ public int a10514;
+ public int a10515;
+ public int a10516;
+ public int a10517;
+ public int a10518;
+ public int a10519;
+ public int a10520;
+ public int a10521;
+ public int a10522;
+ public int a10523;
+ public int a10524;
+ public int a10525;
+ public int a10526;
+ public int a10527;
+ public int a10528;
+ public int a10529;
+ public int a10530;
+ public int a10531;
+ public int a10532;
+ public int a10533;
+ public int a10534;
+ public int a10535;
+ public int a10536;
+ public int a10537;
+ public int a10538;
+ public int a10539;
+ public int a10540;
+ public int a10541;
+ public int a10542;
+ public int a10543;
+ public int a10544;
+ public int a10545;
+ public int a10546;
+ public int a10547;
+ public int a10548;
+ public int a10549;
+ public int a10550;
+ public int a10551;
+ public int a10552;
+ public int a10553;
+ public int a10554;
+ public int a10555;
+ public int a10556;
+ public int a10557;
+ public int a10558;
+ public int a10559;
+ public int a10560;
+ public int a10561;
+ public int a10562;
+ public int a10563;
+ public int a10564;
+ public int a10565;
+ public int a10566;
+ public int a10567;
+ public int a10568;
+ public int a10569;
+ public int a10570;
+ public int a10571;
+ public int a10572;
+ public int a10573;
+ public int a10574;
+ public int a10575;
+ public int a10576;
+ public int a10577;
+ public int a10578;
+ public int a10579;
+ public int a10580;
+ public int a10581;
+ public int a10582;
+ public int a10583;
+ public int a10584;
+ public int a10585;
+ public int a10586;
+ public int a10587;
+ public int a10588;
+ public int a10589;
+ public int a10590;
+ public int a10591;
+ public int a10592;
+ public int a10593;
+ public int a10594;
+ public int a10595;
+ public int a10596;
+ public int a10597;
+ public int a10598;
+ public int a10599;
+ public int a10600;
+ public int a10601;
+ public int a10602;
+ public int a10603;
+ public int a10604;
+ public int a10605;
+ public int a10606;
+ public int a10607;
+ public int a10608;
+ public int a10609;
+ public int a10610;
+ public int a10611;
+ public int a10612;
+ public int a10613;
+ public int a10614;
+ public int a10615;
+ public int a10616;
+ public int a10617;
+ public int a10618;
+ public int a10619;
+ public int a10620;
+ public int a10621;
+ public int a10622;
+ public int a10623;
+ public int a10624;
+ public int a10625;
+ public int a10626;
+ public int a10627;
+ public int a10628;
+ public int a10629;
+ public int a10630;
+ public int a10631;
+ public int a10632;
+ public int a10633;
+ public int a10634;
+ public int a10635;
+ public int a10636;
+ public int a10637;
+ public int a10638;
+ public int a10639;
+ public int a10640;
+ public int a10641;
+ public int a10642;
+ public int a10643;
+ public int a10644;
+ public int a10645;
+ public int a10646;
+ public int a10647;
+ public int a10648;
+ public int a10649;
+ public int a10650;
+ public int a10651;
+ public int a10652;
+ public int a10653;
+ public int a10654;
+ public int a10655;
+ public int a10656;
+ public int a10657;
+ public int a10658;
+ public int a10659;
+ public int a10660;
+ public int a10661;
+ public int a10662;
+ public int a10663;
+ public int a10664;
+ public int a10665;
+ public int a10666;
+ public int a10667;
+ public int a10668;
+ public int a10669;
+ public int a10670;
+ public int a10671;
+ public int a10672;
+ public int a10673;
+ public int a10674;
+ public int a10675;
+ public int a10676;
+ public int a10677;
+ public int a10678;
+ public int a10679;
+ public int a10680;
+ public int a10681;
+ public int a10682;
+ public int a10683;
+ public int a10684;
+ public int a10685;
+ public int a10686;
+ public int a10687;
+ public int a10688;
+ public int a10689;
+ public int a10690;
+ public int a10691;
+ public int a10692;
+ public int a10693;
+ public int a10694;
+ public int a10695;
+ public int a10696;
+ public int a10697;
+ public int a10698;
+ public int a10699;
+ public int a10700;
+ public int a10701;
+ public int a10702;
+ public int a10703;
+ public int a10704;
+ public int a10705;
+ public int a10706;
+ public int a10707;
+ public int a10708;
+ public int a10709;
+ public int a10710;
+ public int a10711;
+ public int a10712;
+ public int a10713;
+ public int a10714;
+ public int a10715;
+ public int a10716;
+ public int a10717;
+ public int a10718;
+ public int a10719;
+ public int a10720;
+ public int a10721;
+ public int a10722;
+ public int a10723;
+ public int a10724;
+ public int a10725;
+ public int a10726;
+ public int a10727;
+ public int a10728;
+ public int a10729;
+ public int a10730;
+ public int a10731;
+ public int a10732;
+ public int a10733;
+ public int a10734;
+ public int a10735;
+ public int a10736;
+ public int a10737;
+ public int a10738;
+ public int a10739;
+ public int a10740;
+ public int a10741;
+ public int a10742;
+ public int a10743;
+ public int a10744;
+ public int a10745;
+ public int a10746;
+ public int a10747;
+ public int a10748;
+ public int a10749;
+ public int a10750;
+ public int a10751;
+ public int a10752;
+ public int a10753;
+ public int a10754;
+ public int a10755;
+ public int a10756;
+ public int a10757;
+ public int a10758;
+ public int a10759;
+ public int a10760;
+ public int a10761;
+ public int a10762;
+ public int a10763;
+ public int a10764;
+ public int a10765;
+ public int a10766;
+ public int a10767;
+ public int a10768;
+ public int a10769;
+ public int a10770;
+ public int a10771;
+ public int a10772;
+ public int a10773;
+ public int a10774;
+ public int a10775;
+ public int a10776;
+ public int a10777;
+ public int a10778;
+ public int a10779;
+ public int a10780;
+ public int a10781;
+ public int a10782;
+ public int a10783;
+ public int a10784;
+ public int a10785;
+ public int a10786;
+ public int a10787;
+ public int a10788;
+ public int a10789;
+ public int a10790;
+ public int a10791;
+ public int a10792;
+ public int a10793;
+ public int a10794;
+ public int a10795;
+ public int a10796;
+ public int a10797;
+ public int a10798;
+ public int a10799;
+ public int a10800;
+ public int a10801;
+ public int a10802;
+ public int a10803;
+ public int a10804;
+ public int a10805;
+ public int a10806;
+ public int a10807;
+ public int a10808;
+ public int a10809;
+ public int a10810;
+ public int a10811;
+ public int a10812;
+ public int a10813;
+ public int a10814;
+ public int a10815;
+ public int a10816;
+ public int a10817;
+ public int a10818;
+ public int a10819;
+ public int a10820;
+ public int a10821;
+ public int a10822;
+ public int a10823;
+ public int a10824;
+ public int a10825;
+ public int a10826;
+ public int a10827;
+ public int a10828;
+ public int a10829;
+ public int a10830;
+ public int a10831;
+ public int a10832;
+ public int a10833;
+ public int a10834;
+ public int a10835;
+ public int a10836;
+ public int a10837;
+ public int a10838;
+ public int a10839;
+ public int a10840;
+ public int a10841;
+ public int a10842;
+ public int a10843;
+ public int a10844;
+ public int a10845;
+ public int a10846;
+ public int a10847;
+ public int a10848;
+ public int a10849;
+ public int a10850;
+ public int a10851;
+ public int a10852;
+ public int a10853;
+ public int a10854;
+ public int a10855;
+ public int a10856;
+ public int a10857;
+ public int a10858;
+ public int a10859;
+ public int a10860;
+ public int a10861;
+ public int a10862;
+ public int a10863;
+ public int a10864;
+ public int a10865;
+ public int a10866;
+ public int a10867;
+ public int a10868;
+ public int a10869;
+ public int a10870;
+ public int a10871;
+ public int a10872;
+ public int a10873;
+ public int a10874;
+ public int a10875;
+ public int a10876;
+ public int a10877;
+ public int a10878;
+ public int a10879;
+ public int a10880;
+ public int a10881;
+ public int a10882;
+ public int a10883;
+ public int a10884;
+ public int a10885;
+ public int a10886;
+ public int a10887;
+ public int a10888;
+ public int a10889;
+ public int a10890;
+ public int a10891;
+ public int a10892;
+ public int a10893;
+ public int a10894;
+ public int a10895;
+ public int a10896;
+ public int a10897;
+ public int a10898;
+ public int a10899;
+ public int a10900;
+ public int a10901;
+ public int a10902;
+ public int a10903;
+ public int a10904;
+ public int a10905;
+ public int a10906;
+ public int a10907;
+ public int a10908;
+ public int a10909;
+ public int a10910;
+ public int a10911;
+ public int a10912;
+ public int a10913;
+ public int a10914;
+ public int a10915;
+ public int a10916;
+ public int a10917;
+ public int a10918;
+ public int a10919;
+ public int a10920;
+ public int a10921;
+ public int a10922;
+ public int a10923;
+ public int a10924;
+ public int a10925;
+ public int a10926;
+ public int a10927;
+ public int a10928;
+ public int a10929;
+ public int a10930;
+ public int a10931;
+ public int a10932;
+ public int a10933;
+ public int a10934;
+ public int a10935;
+ public int a10936;
+ public int a10937;
+ public int a10938;
+ public int a10939;
+ public int a10940;
+ public int a10941;
+ public int a10942;
+ public int a10943;
+ public int a10944;
+ public int a10945;
+ public int a10946;
+ public int a10947;
+ public int a10948;
+ public int a10949;
+ public int a10950;
+ public int a10951;
+ public int a10952;
+ public int a10953;
+ public int a10954;
+ public int a10955;
+ public int a10956;
+ public int a10957;
+ public int a10958;
+ public int a10959;
+ public int a10960;
+ public int a10961;
+ public int a10962;
+ public int a10963;
+ public int a10964;
+ public int a10965;
+ public int a10966;
+ public int a10967;
+ public int a10968;
+ public int a10969;
+ public int a10970;
+ public int a10971;
+ public int a10972;
+ public int a10973;
+ public int a10974;
+ public int a10975;
+ public int a10976;
+ public int a10977;
+ public int a10978;
+ public int a10979;
+ public int a10980;
+ public int a10981;
+ public int a10982;
+ public int a10983;
+ public int a10984;
+ public int a10985;
+ public int a10986;
+ public int a10987;
+ public int a10988;
+ public int a10989;
+ public int a10990;
+ public int a10991;
+ public int a10992;
+ public int a10993;
+ public int a10994;
+ public int a10995;
+ public int a10996;
+ public int a10997;
+ public int a10998;
+ public int a10999;
+ public int a11000;
+ public int a11001;
+ public int a11002;
+ public int a11003;
+ public int a11004;
+ public int a11005;
+ public int a11006;
+ public int a11007;
+ public int a11008;
+ public int a11009;
+ public int a11010;
+ public int a11011;
+ public int a11012;
+ public int a11013;
+ public int a11014;
+ public int a11015;
+ public int a11016;
+ public int a11017;
+ public int a11018;
+ public int a11019;
+ public int a11020;
+ public int a11021;
+ public int a11022;
+ public int a11023;
+ public int a11024;
+ public int a11025;
+ public int a11026;
+ public int a11027;
+ public int a11028;
+ public int a11029;
+ public int a11030;
+ public int a11031;
+ public int a11032;
+ public int a11033;
+ public int a11034;
+ public int a11035;
+ public int a11036;
+ public int a11037;
+ public int a11038;
+ public int a11039;
+ public int a11040;
+ public int a11041;
+ public int a11042;
+ public int a11043;
+ public int a11044;
+ public int a11045;
+ public int a11046;
+ public int a11047;
+ public int a11048;
+ public int a11049;
+ public int a11050;
+ public int a11051;
+ public int a11052;
+ public int a11053;
+ public int a11054;
+ public int a11055;
+ public int a11056;
+ public int a11057;
+ public int a11058;
+ public int a11059;
+ public int a11060;
+ public int a11061;
+ public int a11062;
+ public int a11063;
+ public int a11064;
+ public int a11065;
+ public int a11066;
+ public int a11067;
+ public int a11068;
+ public int a11069;
+ public int a11070;
+ public int a11071;
+ public int a11072;
+ public int a11073;
+ public int a11074;
+ public int a11075;
+ public int a11076;
+ public int a11077;
+ public int a11078;
+ public int a11079;
+ public int a11080;
+ public int a11081;
+ public int a11082;
+ public int a11083;
+ public int a11084;
+ public int a11085;
+ public int a11086;
+ public int a11087;
+ public int a11088;
+ public int a11089;
+ public int a11090;
+ public int a11091;
+ public int a11092;
+ public int a11093;
+ public int a11094;
+ public int a11095;
+ public int a11096;
+ public int a11097;
+ public int a11098;
+ public int a11099;
+ public int a11100;
+ public int a11101;
+ public int a11102;
+ public int a11103;
+ public int a11104;
+ public int a11105;
+ public int a11106;
+ public int a11107;
+ public int a11108;
+ public int a11109;
+ public int a11110;
+ public int a11111;
+ public int a11112;
+ public int a11113;
+ public int a11114;
+ public int a11115;
+ public int a11116;
+ public int a11117;
+ public int a11118;
+ public int a11119;
+ public int a11120;
+ public int a11121;
+ public int a11122;
+ public int a11123;
+ public int a11124;
+ public int a11125;
+ public int a11126;
+ public int a11127;
+ public int a11128;
+ public int a11129;
+ public int a11130;
+ public int a11131;
+ public int a11132;
+ public int a11133;
+ public int a11134;
+ public int a11135;
+ public int a11136;
+ public int a11137;
+ public int a11138;
+ public int a11139;
+ public int a11140;
+ public int a11141;
+ public int a11142;
+ public int a11143;
+ public int a11144;
+ public int a11145;
+ public int a11146;
+ public int a11147;
+ public int a11148;
+ public int a11149;
+ public int a11150;
+ public int a11151;
+ public int a11152;
+ public int a11153;
+ public int a11154;
+ public int a11155;
+ public int a11156;
+ public int a11157;
+ public int a11158;
+ public int a11159;
+ public int a11160;
+ public int a11161;
+ public int a11162;
+ public int a11163;
+ public int a11164;
+ public int a11165;
+ public int a11166;
+ public int a11167;
+ public int a11168;
+ public int a11169;
+ public int a11170;
+ public int a11171;
+ public int a11172;
+ public int a11173;
+ public int a11174;
+ public int a11175;
+ public int a11176;
+ public int a11177;
+ public int a11178;
+ public int a11179;
+ public int a11180;
+ public int a11181;
+ public int a11182;
+ public int a11183;
+ public int a11184;
+ public int a11185;
+ public int a11186;
+ public int a11187;
+ public int a11188;
+ public int a11189;
+ public int a11190;
+ public int a11191;
+ public int a11192;
+ public int a11193;
+ public int a11194;
+ public int a11195;
+ public int a11196;
+ public int a11197;
+ public int a11198;
+ public int a11199;
+ public int a11200;
+ public int a11201;
+ public int a11202;
+ public int a11203;
+ public int a11204;
+ public int a11205;
+ public int a11206;
+ public int a11207;
+ public int a11208;
+ public int a11209;
+ public int a11210;
+ public int a11211;
+ public int a11212;
+ public int a11213;
+ public int a11214;
+ public int a11215;
+ public int a11216;
+ public int a11217;
+ public int a11218;
+ public int a11219;
+ public int a11220;
+ public int a11221;
+ public int a11222;
+ public int a11223;
+ public int a11224;
+ public int a11225;
+ public int a11226;
+ public int a11227;
+ public int a11228;
+ public int a11229;
+ public int a11230;
+ public int a11231;
+ public int a11232;
+ public int a11233;
+ public int a11234;
+ public int a11235;
+ public int a11236;
+ public int a11237;
+ public int a11238;
+ public int a11239;
+ public int a11240;
+ public int a11241;
+ public int a11242;
+ public int a11243;
+ public int a11244;
+ public int a11245;
+ public int a11246;
+ public int a11247;
+ public int a11248;
+ public int a11249;
+ public int a11250;
+ public int a11251;
+ public int a11252;
+ public int a11253;
+ public int a11254;
+ public int a11255;
+ public int a11256;
+ public int a11257;
+ public int a11258;
+ public int a11259;
+ public int a11260;
+ public int a11261;
+ public int a11262;
+ public int a11263;
+ public int a11264;
+ public int a11265;
+ public int a11266;
+ public int a11267;
+ public int a11268;
+ public int a11269;
+ public int a11270;
+ public int a11271;
+ public int a11272;
+ public int a11273;
+ public int a11274;
+ public int a11275;
+ public int a11276;
+ public int a11277;
+ public int a11278;
+ public int a11279;
+ public int a11280;
+ public int a11281;
+ public int a11282;
+ public int a11283;
+ public int a11284;
+ public int a11285;
+ public int a11286;
+ public int a11287;
+ public int a11288;
+ public int a11289;
+ public int a11290;
+ public int a11291;
+ public int a11292;
+ public int a11293;
+ public int a11294;
+ public int a11295;
+ public int a11296;
+ public int a11297;
+ public int a11298;
+ public int a11299;
+ public int a11300;
+ public int a11301;
+ public int a11302;
+ public int a11303;
+ public int a11304;
+ public int a11305;
+ public int a11306;
+ public int a11307;
+ public int a11308;
+ public int a11309;
+ public int a11310;
+ public int a11311;
+ public int a11312;
+ public int a11313;
+ public int a11314;
+ public int a11315;
+ public int a11316;
+ public int a11317;
+ public int a11318;
+ public int a11319;
+ public int a11320;
+ public int a11321;
+ public int a11322;
+ public int a11323;
+ public int a11324;
+ public int a11325;
+ public int a11326;
+ public int a11327;
+ public int a11328;
+ public int a11329;
+ public int a11330;
+ public int a11331;
+ public int a11332;
+ public int a11333;
+ public int a11334;
+ public int a11335;
+ public int a11336;
+ public int a11337;
+ public int a11338;
+ public int a11339;
+ public int a11340;
+ public int a11341;
+ public int a11342;
+ public int a11343;
+ public int a11344;
+ public int a11345;
+ public int a11346;
+ public int a11347;
+ public int a11348;
+ public int a11349;
+ public int a11350;
+ public int a11351;
+ public int a11352;
+ public int a11353;
+ public int a11354;
+ public int a11355;
+ public int a11356;
+ public int a11357;
+ public int a11358;
+ public int a11359;
+ public int a11360;
+ public int a11361;
+ public int a11362;
+ public int a11363;
+ public int a11364;
+ public int a11365;
+ public int a11366;
+ public int a11367;
+ public int a11368;
+ public int a11369;
+ public int a11370;
+ public int a11371;
+ public int a11372;
+ public int a11373;
+ public int a11374;
+ public int a11375;
+ public int a11376;
+ public int a11377;
+ public int a11378;
+ public int a11379;
+ public int a11380;
+ public int a11381;
+ public int a11382;
+ public int a11383;
+ public int a11384;
+ public int a11385;
+ public int a11386;
+ public int a11387;
+ public int a11388;
+ public int a11389;
+ public int a11390;
+ public int a11391;
+ public int a11392;
+ public int a11393;
+ public int a11394;
+ public int a11395;
+ public int a11396;
+ public int a11397;
+ public int a11398;
+ public int a11399;
+ public int a11400;
+ public int a11401;
+ public int a11402;
+ public int a11403;
+ public int a11404;
+ public int a11405;
+ public int a11406;
+ public int a11407;
+ public int a11408;
+ public int a11409;
+ public int a11410;
+ public int a11411;
+ public int a11412;
+ public int a11413;
+ public int a11414;
+ public int a11415;
+ public int a11416;
+ public int a11417;
+ public int a11418;
+ public int a11419;
+ public int a11420;
+ public int a11421;
+ public int a11422;
+ public int a11423;
+ public int a11424;
+ public int a11425;
+ public int a11426;
+ public int a11427;
+ public int a11428;
+ public int a11429;
+ public int a11430;
+ public int a11431;
+ public int a11432;
+ public int a11433;
+ public int a11434;
+ public int a11435;
+ public int a11436;
+ public int a11437;
+ public int a11438;
+ public int a11439;
+ public int a11440;
+ public int a11441;
+ public int a11442;
+ public int a11443;
+ public int a11444;
+ public int a11445;
+ public int a11446;
+ public int a11447;
+ public int a11448;
+ public int a11449;
+ public int a11450;
+ public int a11451;
+ public int a11452;
+ public int a11453;
+ public int a11454;
+ public int a11455;
+ public int a11456;
+ public int a11457;
+ public int a11458;
+ public int a11459;
+ public int a11460;
+ public int a11461;
+ public int a11462;
+ public int a11463;
+ public int a11464;
+ public int a11465;
+ public int a11466;
+ public int a11467;
+ public int a11468;
+ public int a11469;
+ public int a11470;
+ public int a11471;
+ public int a11472;
+ public int a11473;
+ public int a11474;
+ public int a11475;
+ public int a11476;
+ public int a11477;
+ public int a11478;
+ public int a11479;
+ public int a11480;
+ public int a11481;
+ public int a11482;
+ public int a11483;
+ public int a11484;
+ public int a11485;
+ public int a11486;
+ public int a11487;
+ public int a11488;
+ public int a11489;
+ public int a11490;
+ public int a11491;
+ public int a11492;
+ public int a11493;
+ public int a11494;
+ public int a11495;
+ public int a11496;
+ public int a11497;
+ public int a11498;
+ public int a11499;
+ public int a11500;
+ public int a11501;
+ public int a11502;
+ public int a11503;
+ public int a11504;
+ public int a11505;
+ public int a11506;
+ public int a11507;
+ public int a11508;
+ public int a11509;
+ public int a11510;
+ public int a11511;
+ public int a11512;
+ public int a11513;
+ public int a11514;
+ public int a11515;
+ public int a11516;
+ public int a11517;
+ public int a11518;
+ public int a11519;
+ public int a11520;
+ public int a11521;
+ public int a11522;
+ public int a11523;
+ public int a11524;
+ public int a11525;
+ public int a11526;
+ public int a11527;
+ public int a11528;
+ public int a11529;
+ public int a11530;
+ public int a11531;
+ public int a11532;
+ public int a11533;
+ public int a11534;
+ public int a11535;
+ public int a11536;
+ public int a11537;
+ public int a11538;
+ public int a11539;
+ public int a11540;
+ public int a11541;
+ public int a11542;
+ public int a11543;
+ public int a11544;
+ public int a11545;
+ public int a11546;
+ public int a11547;
+ public int a11548;
+ public int a11549;
+ public int a11550;
+ public int a11551;
+ public int a11552;
+ public int a11553;
+ public int a11554;
+ public int a11555;
+ public int a11556;
+ public int a11557;
+ public int a11558;
+ public int a11559;
+ public int a11560;
+ public int a11561;
+ public int a11562;
+ public int a11563;
+ public int a11564;
+ public int a11565;
+ public int a11566;
+ public int a11567;
+ public int a11568;
+ public int a11569;
+ public int a11570;
+ public int a11571;
+ public int a11572;
+ public int a11573;
+ public int a11574;
+ public int a11575;
+ public int a11576;
+ public int a11577;
+ public int a11578;
+ public int a11579;
+ public int a11580;
+ public int a11581;
+ public int a11582;
+ public int a11583;
+ public int a11584;
+ public int a11585;
+ public int a11586;
+ public int a11587;
+ public int a11588;
+ public int a11589;
+ public int a11590;
+ public int a11591;
+ public int a11592;
+ public int a11593;
+ public int a11594;
+ public int a11595;
+ public int a11596;
+ public int a11597;
+ public int a11598;
+ public int a11599;
+ public int a11600;
+ public int a11601;
+ public int a11602;
+ public int a11603;
+ public int a11604;
+ public int a11605;
+ public int a11606;
+ public int a11607;
+ public int a11608;
+ public int a11609;
+ public int a11610;
+ public int a11611;
+ public int a11612;
+ public int a11613;
+ public int a11614;
+ public int a11615;
+ public int a11616;
+ public int a11617;
+ public int a11618;
+ public int a11619;
+ public int a11620;
+ public int a11621;
+ public int a11622;
+ public int a11623;
+ public int a11624;
+ public int a11625;
+ public int a11626;
+ public int a11627;
+ public int a11628;
+ public int a11629;
+ public int a11630;
+ public int a11631;
+ public int a11632;
+ public int a11633;
+ public int a11634;
+ public int a11635;
+ public int a11636;
+ public int a11637;
+ public int a11638;
+ public int a11639;
+ public int a11640;
+ public int a11641;
+ public int a11642;
+ public int a11643;
+ public int a11644;
+ public int a11645;
+ public int a11646;
+ public int a11647;
+ public int a11648;
+ public int a11649;
+ public int a11650;
+ public int a11651;
+ public int a11652;
+ public int a11653;
+ public int a11654;
+ public int a11655;
+ public int a11656;
+ public int a11657;
+ public int a11658;
+ public int a11659;
+ public int a11660;
+ public int a11661;
+ public int a11662;
+ public int a11663;
+ public int a11664;
+ public int a11665;
+ public int a11666;
+ public int a11667;
+ public int a11668;
+ public int a11669;
+ public int a11670;
+ public int a11671;
+ public int a11672;
+ public int a11673;
+ public int a11674;
+ public int a11675;
+ public int a11676;
+ public int a11677;
+ public int a11678;
+ public int a11679;
+ public int a11680;
+ public int a11681;
+ public int a11682;
+ public int a11683;
+ public int a11684;
+ public int a11685;
+ public int a11686;
+ public int a11687;
+ public int a11688;
+ public int a11689;
+ public int a11690;
+ public int a11691;
+ public int a11692;
+ public int a11693;
+ public int a11694;
+ public int a11695;
+ public int a11696;
+ public int a11697;
+ public int a11698;
+ public int a11699;
+ public int a11700;
+ public int a11701;
+ public int a11702;
+ public int a11703;
+ public int a11704;
+ public int a11705;
+ public int a11706;
+ public int a11707;
+ public int a11708;
+ public int a11709;
+ public int a11710;
+ public int a11711;
+ public int a11712;
+ public int a11713;
+ public int a11714;
+ public int a11715;
+ public int a11716;
+ public int a11717;
+ public int a11718;
+ public int a11719;
+ public int a11720;
+ public int a11721;
+ public int a11722;
+ public int a11723;
+ public int a11724;
+ public int a11725;
+ public int a11726;
+ public int a11727;
+ public int a11728;
+ public int a11729;
+ public int a11730;
+ public int a11731;
+ public int a11732;
+ public int a11733;
+ public int a11734;
+ public int a11735;
+ public int a11736;
+ public int a11737;
+ public int a11738;
+ public int a11739;
+ public int a11740;
+ public int a11741;
+ public int a11742;
+ public int a11743;
+ public int a11744;
+ public int a11745;
+ public int a11746;
+ public int a11747;
+ public int a11748;
+ public int a11749;
+ public int a11750;
+ public int a11751;
+ public int a11752;
+ public int a11753;
+ public int a11754;
+ public int a11755;
+ public int a11756;
+ public int a11757;
+ public int a11758;
+ public int a11759;
+ public int a11760;
+ public int a11761;
+ public int a11762;
+ public int a11763;
+ public int a11764;
+ public int a11765;
+ public int a11766;
+ public int a11767;
+ public int a11768;
+ public int a11769;
+ public int a11770;
+ public int a11771;
+ public int a11772;
+ public int a11773;
+ public int a11774;
+ public int a11775;
+ public int a11776;
+ public int a11777;
+ public int a11778;
+ public int a11779;
+ public int a11780;
+ public int a11781;
+ public int a11782;
+ public int a11783;
+ public int a11784;
+ public int a11785;
+ public int a11786;
+ public int a11787;
+ public int a11788;
+ public int a11789;
+ public int a11790;
+ public int a11791;
+ public int a11792;
+ public int a11793;
+ public int a11794;
+ public int a11795;
+ public int a11796;
+ public int a11797;
+ public int a11798;
+ public int a11799;
+ public int a11800;
+ public int a11801;
+ public int a11802;
+ public int a11803;
+ public int a11804;
+ public int a11805;
+ public int a11806;
+ public int a11807;
+ public int a11808;
+ public int a11809;
+ public int a11810;
+ public int a11811;
+ public int a11812;
+ public int a11813;
+ public int a11814;
+ public int a11815;
+ public int a11816;
+ public int a11817;
+ public int a11818;
+ public int a11819;
+ public int a11820;
+ public int a11821;
+ public int a11822;
+ public int a11823;
+ public int a11824;
+ public int a11825;
+ public int a11826;
+ public int a11827;
+ public int a11828;
+ public int a11829;
+ public int a11830;
+ public int a11831;
+ public int a11832;
+ public int a11833;
+ public int a11834;
+ public int a11835;
+ public int a11836;
+ public int a11837;
+ public int a11838;
+ public int a11839;
+ public int a11840;
+ public int a11841;
+ public int a11842;
+ public int a11843;
+ public int a11844;
+ public int a11845;
+ public int a11846;
+ public int a11847;
+ public int a11848;
+ public int a11849;
+ public int a11850;
+ public int a11851;
+ public int a11852;
+ public int a11853;
+ public int a11854;
+ public int a11855;
+ public int a11856;
+ public int a11857;
+ public int a11858;
+ public int a11859;
+ public int a11860;
+ public int a11861;
+ public int a11862;
+ public int a11863;
+ public int a11864;
+ public int a11865;
+ public int a11866;
+ public int a11867;
+ public int a11868;
+ public int a11869;
+ public int a11870;
+ public int a11871;
+ public int a11872;
+ public int a11873;
+ public int a11874;
+ public int a11875;
+ public int a11876;
+ public int a11877;
+ public int a11878;
+ public int a11879;
+ public int a11880;
+ public int a11881;
+ public int a11882;
+ public int a11883;
+ public int a11884;
+ public int a11885;
+ public int a11886;
+ public int a11887;
+ public int a11888;
+ public int a11889;
+ public int a11890;
+ public int a11891;
+ public int a11892;
+ public int a11893;
+ public int a11894;
+ public int a11895;
+ public int a11896;
+ public int a11897;
+ public int a11898;
+ public int a11899;
+ public int a11900;
+ public int a11901;
+ public int a11902;
+ public int a11903;
+ public int a11904;
+ public int a11905;
+ public int a11906;
+ public int a11907;
+ public int a11908;
+ public int a11909;
+ public int a11910;
+ public int a11911;
+ public int a11912;
+ public int a11913;
+ public int a11914;
+ public int a11915;
+ public int a11916;
+ public int a11917;
+ public int a11918;
+ public int a11919;
+ public int a11920;
+ public int a11921;
+ public int a11922;
+ public int a11923;
+ public int a11924;
+ public int a11925;
+ public int a11926;
+ public int a11927;
+ public int a11928;
+ public int a11929;
+ public int a11930;
+ public int a11931;
+ public int a11932;
+ public int a11933;
+ public int a11934;
+ public int a11935;
+ public int a11936;
+ public int a11937;
+ public int a11938;
+ public int a11939;
+ public int a11940;
+ public int a11941;
+ public int a11942;
+ public int a11943;
+ public int a11944;
+ public int a11945;
+ public int a11946;
+ public int a11947;
+ public int a11948;
+ public int a11949;
+ public int a11950;
+ public int a11951;
+ public int a11952;
+ public int a11953;
+ public int a11954;
+ public int a11955;
+ public int a11956;
+ public int a11957;
+ public int a11958;
+ public int a11959;
+ public int a11960;
+ public int a11961;
+ public int a11962;
+ public int a11963;
+ public int a11964;
+ public int a11965;
+ public int a11966;
+ public int a11967;
+ public int a11968;
+ public int a11969;
+ public int a11970;
+ public int a11971;
+ public int a11972;
+ public int a11973;
+ public int a11974;
+ public int a11975;
+ public int a11976;
+ public int a11977;
+ public int a11978;
+ public int a11979;
+ public int a11980;
+ public int a11981;
+ public int a11982;
+ public int a11983;
+ public int a11984;
+ public int a11985;
+ public int a11986;
+ public int a11987;
+ public int a11988;
+ public int a11989;
+ public int a11990;
+ public int a11991;
+ public int a11992;
+ public int a11993;
+ public int a11994;
+ public int a11995;
+ public int a11996;
+ public int a11997;
+ public int a11998;
+ public int a11999;
+ public int a12000;
+ public int a12001;
+ public int a12002;
+ public int a12003;
+ public int a12004;
+ public int a12005;
+ public int a12006;
+ public int a12007;
+ public int a12008;
+ public int a12009;
+ public int a12010;
+ public int a12011;
+ public int a12012;
+ public int a12013;
+ public int a12014;
+ public int a12015;
+ public int a12016;
+ public int a12017;
+ public int a12018;
+ public int a12019;
+ public int a12020;
+ public int a12021;
+ public int a12022;
+ public int a12023;
+ public int a12024;
+ public int a12025;
+ public int a12026;
+ public int a12027;
+ public int a12028;
+ public int a12029;
+ public int a12030;
+ public int a12031;
+ public int a12032;
+ public int a12033;
+ public int a12034;
+ public int a12035;
+ public int a12036;
+ public int a12037;
+ public int a12038;
+ public int a12039;
+ public int a12040;
+ public int a12041;
+ public int a12042;
+ public int a12043;
+ public int a12044;
+ public int a12045;
+ public int a12046;
+ public int a12047;
+ public int a12048;
+ public int a12049;
+ public int a12050;
+ public int a12051;
+ public int a12052;
+ public int a12053;
+ public int a12054;
+ public int a12055;
+ public int a12056;
+ public int a12057;
+ public int a12058;
+ public int a12059;
+ public int a12060;
+ public int a12061;
+ public int a12062;
+ public int a12063;
+ public int a12064;
+ public int a12065;
+ public int a12066;
+ public int a12067;
+ public int a12068;
+ public int a12069;
+ public int a12070;
+ public int a12071;
+ public int a12072;
+ public int a12073;
+ public int a12074;
+ public int a12075;
+ public int a12076;
+ public int a12077;
+ public int a12078;
+ public int a12079;
+ public int a12080;
+ public int a12081;
+ public int a12082;
+ public int a12083;
+ public int a12084;
+ public int a12085;
+ public int a12086;
+ public int a12087;
+ public int a12088;
+ public int a12089;
+ public int a12090;
+ public int a12091;
+ public int a12092;
+ public int a12093;
+ public int a12094;
+ public int a12095;
+ public int a12096;
+ public int a12097;
+ public int a12098;
+ public int a12099;
+ public int a12100;
+ public int a12101;
+ public int a12102;
+ public int a12103;
+ public int a12104;
+ public int a12105;
+ public int a12106;
+ public int a12107;
+ public int a12108;
+ public int a12109;
+ public int a12110;
+ public int a12111;
+ public int a12112;
+ public int a12113;
+ public int a12114;
+ public int a12115;
+ public int a12116;
+ public int a12117;
+ public int a12118;
+ public int a12119;
+ public int a12120;
+ public int a12121;
+ public int a12122;
+ public int a12123;
+ public int a12124;
+ public int a12125;
+ public int a12126;
+ public int a12127;
+ public int a12128;
+ public int a12129;
+ public int a12130;
+ public int a12131;
+ public int a12132;
+ public int a12133;
+ public int a12134;
+ public int a12135;
+ public int a12136;
+ public int a12137;
+ public int a12138;
+ public int a12139;
+ public int a12140;
+ public int a12141;
+ public int a12142;
+ public int a12143;
+ public int a12144;
+ public int a12145;
+ public int a12146;
+ public int a12147;
+ public int a12148;
+ public int a12149;
+ public int a12150;
+ public int a12151;
+ public int a12152;
+ public int a12153;
+ public int a12154;
+ public int a12155;
+ public int a12156;
+ public int a12157;
+ public int a12158;
+ public int a12159;
+ public int a12160;
+ public int a12161;
+ public int a12162;
+ public int a12163;
+ public int a12164;
+ public int a12165;
+ public int a12166;
+ public int a12167;
+ public int a12168;
+ public int a12169;
+ public int a12170;
+ public int a12171;
+ public int a12172;
+ public int a12173;
+ public int a12174;
+ public int a12175;
+ public int a12176;
+ public int a12177;
+ public int a12178;
+ public int a12179;
+ public int a12180;
+ public int a12181;
+ public int a12182;
+ public int a12183;
+ public int a12184;
+ public int a12185;
+ public int a12186;
+ public int a12187;
+ public int a12188;
+ public int a12189;
+ public int a12190;
+ public int a12191;
+ public int a12192;
+ public int a12193;
+ public int a12194;
+ public int a12195;
+ public int a12196;
+ public int a12197;
+ public int a12198;
+ public int a12199;
+ public int a12200;
+ public int a12201;
+ public int a12202;
+ public int a12203;
+ public int a12204;
+ public int a12205;
+ public int a12206;
+ public int a12207;
+ public int a12208;
+ public int a12209;
+ public int a12210;
+ public int a12211;
+ public int a12212;
+ public int a12213;
+ public int a12214;
+ public int a12215;
+ public int a12216;
+ public int a12217;
+ public int a12218;
+ public int a12219;
+ public int a12220;
+ public int a12221;
+ public int a12222;
+ public int a12223;
+ public int a12224;
+ public int a12225;
+ public int a12226;
+ public int a12227;
+ public int a12228;
+ public int a12229;
+ public int a12230;
+ public int a12231;
+ public int a12232;
+ public int a12233;
+ public int a12234;
+ public int a12235;
+ public int a12236;
+ public int a12237;
+ public int a12238;
+ public int a12239;
+ public int a12240;
+ public int a12241;
+ public int a12242;
+ public int a12243;
+ public int a12244;
+ public int a12245;
+ public int a12246;
+ public int a12247;
+ public int a12248;
+ public int a12249;
+ public int a12250;
+ public int a12251;
+ public int a12252;
+ public int a12253;
+ public int a12254;
+ public int a12255;
+ public int a12256;
+ public int a12257;
+ public int a12258;
+ public int a12259;
+ public int a12260;
+ public int a12261;
+ public int a12262;
+ public int a12263;
+ public int a12264;
+ public int a12265;
+ public int a12266;
+ public int a12267;
+ public int a12268;
+ public int a12269;
+ public int a12270;
+ public int a12271;
+ public int a12272;
+ public int a12273;
+ public int a12274;
+ public int a12275;
+ public int a12276;
+ public int a12277;
+ public int a12278;
+ public int a12279;
+ public int a12280;
+ public int a12281;
+ public int a12282;
+ public int a12283;
+ public int a12284;
+ public int a12285;
+ public int a12286;
+ public int a12287;
+ public int a12288;
+ public int a12289;
+ public int a12290;
+ public int a12291;
+ public int a12292;
+ public int a12293;
+ public int a12294;
+ public int a12295;
+ public int a12296;
+ public int a12297;
+ public int a12298;
+ public int a12299;
+ public int a12300;
+ public int a12301;
+ public int a12302;
+ public int a12303;
+ public int a12304;
+ public int a12305;
+ public int a12306;
+ public int a12307;
+ public int a12308;
+ public int a12309;
+ public int a12310;
+ public int a12311;
+ public int a12312;
+ public int a12313;
+ public int a12314;
+ public int a12315;
+ public int a12316;
+ public int a12317;
+ public int a12318;
+ public int a12319;
+ public int a12320;
+ public int a12321;
+ public int a12322;
+ public int a12323;
+ public int a12324;
+ public int a12325;
+ public int a12326;
+ public int a12327;
+ public int a12328;
+ public int a12329;
+ public int a12330;
+ public int a12331;
+ public int a12332;
+ public int a12333;
+ public int a12334;
+ public int a12335;
+ public int a12336;
+ public int a12337;
+ public int a12338;
+ public int a12339;
+ public int a12340;
+ public int a12341;
+ public int a12342;
+ public int a12343;
+ public int a12344;
+ public int a12345;
+ public int a12346;
+ public int a12347;
+ public int a12348;
+ public int a12349;
+ public int a12350;
+ public int a12351;
+ public int a12352;
+ public int a12353;
+ public int a12354;
+ public int a12355;
+ public int a12356;
+ public int a12357;
+ public int a12358;
+ public int a12359;
+ public int a12360;
+ public int a12361;
+ public int a12362;
+ public int a12363;
+ public int a12364;
+ public int a12365;
+ public int a12366;
+ public int a12367;
+ public int a12368;
+ public int a12369;
+ public int a12370;
+ public int a12371;
+ public int a12372;
+ public int a12373;
+ public int a12374;
+ public int a12375;
+ public int a12376;
+ public int a12377;
+ public int a12378;
+ public int a12379;
+ public int a12380;
+ public int a12381;
+ public int a12382;
+ public int a12383;
+ public int a12384;
+ public int a12385;
+ public int a12386;
+ public int a12387;
+ public int a12388;
+ public int a12389;
+ public int a12390;
+ public int a12391;
+ public int a12392;
+ public int a12393;
+ public int a12394;
+ public int a12395;
+ public int a12396;
+ public int a12397;
+ public int a12398;
+ public int a12399;
+ public int a12400;
+ public int a12401;
+ public int a12402;
+ public int a12403;
+ public int a12404;
+ public int a12405;
+ public int a12406;
+ public int a12407;
+ public int a12408;
+ public int a12409;
+ public int a12410;
+ public int a12411;
+ public int a12412;
+ public int a12413;
+ public int a12414;
+ public int a12415;
+ public int a12416;
+ public int a12417;
+ public int a12418;
+ public int a12419;
+ public int a12420;
+ public int a12421;
+ public int a12422;
+ public int a12423;
+ public int a12424;
+ public int a12425;
+ public int a12426;
+ public int a12427;
+ public int a12428;
+ public int a12429;
+ public int a12430;
+ public int a12431;
+ public int a12432;
+ public int a12433;
+ public int a12434;
+ public int a12435;
+ public int a12436;
+ public int a12437;
+ public int a12438;
+ public int a12439;
+ public int a12440;
+ public int a12441;
+ public int a12442;
+ public int a12443;
+ public int a12444;
+ public int a12445;
+ public int a12446;
+ public int a12447;
+ public int a12448;
+ public int a12449;
+ public int a12450;
+ public int a12451;
+ public int a12452;
+ public int a12453;
+ public int a12454;
+ public int a12455;
+ public int a12456;
+ public int a12457;
+ public int a12458;
+ public int a12459;
+ public int a12460;
+ public int a12461;
+ public int a12462;
+ public int a12463;
+ public int a12464;
+ public int a12465;
+ public int a12466;
+ public int a12467;
+ public int a12468;
+ public int a12469;
+ public int a12470;
+ public int a12471;
+ public int a12472;
+ public int a12473;
+ public int a12474;
+ public int a12475;
+ public int a12476;
+ public int a12477;
+ public int a12478;
+ public int a12479;
+ public int a12480;
+ public int a12481;
+ public int a12482;
+ public int a12483;
+ public int a12484;
+ public int a12485;
+ public int a12486;
+ public int a12487;
+ public int a12488;
+ public int a12489;
+ public int a12490;
+ public int a12491;
+ public int a12492;
+ public int a12493;
+ public int a12494;
+ public int a12495;
+ public int a12496;
+ public int a12497;
+ public int a12498;
+ public int a12499;
+ public int a12500;
+ public int a12501;
+ public int a12502;
+ public int a12503;
+ public int a12504;
+ public int a12505;
+ public int a12506;
+ public int a12507;
+ public int a12508;
+ public int a12509;
+ public int a12510;
+ public int a12511;
+ public int a12512;
+ public int a12513;
+ public int a12514;
+ public int a12515;
+ public int a12516;
+ public int a12517;
+ public int a12518;
+ public int a12519;
+ public int a12520;
+ public int a12521;
+ public int a12522;
+ public int a12523;
+ public int a12524;
+ public int a12525;
+ public int a12526;
+ public int a12527;
+ public int a12528;
+ public int a12529;
+ public int a12530;
+ public int a12531;
+ public int a12532;
+ public int a12533;
+ public int a12534;
+ public int a12535;
+ public int a12536;
+ public int a12537;
+ public int a12538;
+ public int a12539;
+ public int a12540;
+ public int a12541;
+ public int a12542;
+ public int a12543;
+ public int a12544;
+ public int a12545;
+ public int a12546;
+ public int a12547;
+ public int a12548;
+ public int a12549;
+ public int a12550;
+ public int a12551;
+ public int a12552;
+ public int a12553;
+ public int a12554;
+ public int a12555;
+ public int a12556;
+ public int a12557;
+ public int a12558;
+ public int a12559;
+ public int a12560;
+ public int a12561;
+ public int a12562;
+ public int a12563;
+ public int a12564;
+ public int a12565;
+ public int a12566;
+ public int a12567;
+ public int a12568;
+ public int a12569;
+ public int a12570;
+ public int a12571;
+ public int a12572;
+ public int a12573;
+ public int a12574;
+ public int a12575;
+ public int a12576;
+ public int a12577;
+ public int a12578;
+ public int a12579;
+ public int a12580;
+ public int a12581;
+ public int a12582;
+ public int a12583;
+ public int a12584;
+ public int a12585;
+ public int a12586;
+ public int a12587;
+ public int a12588;
+ public int a12589;
+ public int a12590;
+ public int a12591;
+ public int a12592;
+ public int a12593;
+ public int a12594;
+ public int a12595;
+ public int a12596;
+ public int a12597;
+ public int a12598;
+ public int a12599;
+ public int a12600;
+ public int a12601;
+ public int a12602;
+ public int a12603;
+ public int a12604;
+ public int a12605;
+ public int a12606;
+ public int a12607;
+ public int a12608;
+ public int a12609;
+ public int a12610;
+ public int a12611;
+ public int a12612;
+ public int a12613;
+ public int a12614;
+ public int a12615;
+ public int a12616;
+ public int a12617;
+ public int a12618;
+ public int a12619;
+ public int a12620;
+ public int a12621;
+ public int a12622;
+ public int a12623;
+ public int a12624;
+ public int a12625;
+ public int a12626;
+ public int a12627;
+ public int a12628;
+ public int a12629;
+ public int a12630;
+ public int a12631;
+ public int a12632;
+ public int a12633;
+ public int a12634;
+ public int a12635;
+ public int a12636;
+ public int a12637;
+ public int a12638;
+ public int a12639;
+ public int a12640;
+ public int a12641;
+ public int a12642;
+ public int a12643;
+ public int a12644;
+ public int a12645;
+ public int a12646;
+ public int a12647;
+ public int a12648;
+ public int a12649;
+ public int a12650;
+ public int a12651;
+ public int a12652;
+ public int a12653;
+ public int a12654;
+ public int a12655;
+ public int a12656;
+ public int a12657;
+ public int a12658;
+ public int a12659;
+ public int a12660;
+ public int a12661;
+ public int a12662;
+ public int a12663;
+ public int a12664;
+ public int a12665;
+ public int a12666;
+ public int a12667;
+ public int a12668;
+ public int a12669;
+ public int a12670;
+ public int a12671;
+ public int a12672;
+ public int a12673;
+ public int a12674;
+ public int a12675;
+ public int a12676;
+ public int a12677;
+ public int a12678;
+ public int a12679;
+ public int a12680;
+ public int a12681;
+ public int a12682;
+ public int a12683;
+ public int a12684;
+ public int a12685;
+ public int a12686;
+ public int a12687;
+ public int a12688;
+ public int a12689;
+ public int a12690;
+ public int a12691;
+ public int a12692;
+ public int a12693;
+ public int a12694;
+ public int a12695;
+ public int a12696;
+ public int a12697;
+ public int a12698;
+ public int a12699;
+ public int a12700;
+ public int a12701;
+ public int a12702;
+ public int a12703;
+ public int a12704;
+ public int a12705;
+ public int a12706;
+ public int a12707;
+ public int a12708;
+ public int a12709;
+ public int a12710;
+ public int a12711;
+ public int a12712;
+ public int a12713;
+ public int a12714;
+ public int a12715;
+ public int a12716;
+ public int a12717;
+ public int a12718;
+ public int a12719;
+ public int a12720;
+ public int a12721;
+ public int a12722;
+ public int a12723;
+ public int a12724;
+ public int a12725;
+ public int a12726;
+ public int a12727;
+ public int a12728;
+ public int a12729;
+ public int a12730;
+ public int a12731;
+ public int a12732;
+ public int a12733;
+ public int a12734;
+ public int a12735;
+ public int a12736;
+ public int a12737;
+ public int a12738;
+ public int a12739;
+ public int a12740;
+ public int a12741;
+ public int a12742;
+ public int a12743;
+ public int a12744;
+ public int a12745;
+ public int a12746;
+ public int a12747;
+ public int a12748;
+ public int a12749;
+ public int a12750;
+ public int a12751;
+ public int a12752;
+ public int a12753;
+ public int a12754;
+ public int a12755;
+ public int a12756;
+ public int a12757;
+ public int a12758;
+ public int a12759;
+ public int a12760;
+ public int a12761;
+ public int a12762;
+ public int a12763;
+ public int a12764;
+ public int a12765;
+ public int a12766;
+ public int a12767;
+ public int a12768;
+ public int a12769;
+ public int a12770;
+ public int a12771;
+ public int a12772;
+ public int a12773;
+ public int a12774;
+ public int a12775;
+ public int a12776;
+ public int a12777;
+ public int a12778;
+ public int a12779;
+ public int a12780;
+ public int a12781;
+ public int a12782;
+ public int a12783;
+ public int a12784;
+ public int a12785;
+ public int a12786;
+ public int a12787;
+ public int a12788;
+ public int a12789;
+ public int a12790;
+ public int a12791;
+ public int a12792;
+ public int a12793;
+ public int a12794;
+ public int a12795;
+ public int a12796;
+ public int a12797;
+ public int a12798;
+ public int a12799;
+ public int a12800;
+ public int a12801;
+ public int a12802;
+ public int a12803;
+ public int a12804;
+ public int a12805;
+ public int a12806;
+ public int a12807;
+ public int a12808;
+ public int a12809;
+ public int a12810;
+ public int a12811;
+ public int a12812;
+ public int a12813;
+ public int a12814;
+ public int a12815;
+ public int a12816;
+ public int a12817;
+ public int a12818;
+ public int a12819;
+ public int a12820;
+ public int a12821;
+ public int a12822;
+ public int a12823;
+ public int a12824;
+ public int a12825;
+ public int a12826;
+ public int a12827;
+ public int a12828;
+ public int a12829;
+ public int a12830;
+ public int a12831;
+ public int a12832;
+ public int a12833;
+ public int a12834;
+ public int a12835;
+ public int a12836;
+ public int a12837;
+ public int a12838;
+ public int a12839;
+ public int a12840;
+ public int a12841;
+ public int a12842;
+ public int a12843;
+ public int a12844;
+ public int a12845;
+ public int a12846;
+ public int a12847;
+ public int a12848;
+ public int a12849;
+ public int a12850;
+ public int a12851;
+ public int a12852;
+ public int a12853;
+ public int a12854;
+ public int a12855;
+ public int a12856;
+ public int a12857;
+ public int a12858;
+ public int a12859;
+ public int a12860;
+ public int a12861;
+ public int a12862;
+ public int a12863;
+ public int a12864;
+ public int a12865;
+ public int a12866;
+ public int a12867;
+ public int a12868;
+ public int a12869;
+ public int a12870;
+ public int a12871;
+ public int a12872;
+ public int a12873;
+ public int a12874;
+ public int a12875;
+ public int a12876;
+ public int a12877;
+ public int a12878;
+ public int a12879;
+ public int a12880;
+ public int a12881;
+ public int a12882;
+ public int a12883;
+ public int a12884;
+ public int a12885;
+ public int a12886;
+ public int a12887;
+ public int a12888;
+ public int a12889;
+ public int a12890;
+ public int a12891;
+ public int a12892;
+ public int a12893;
+ public int a12894;
+ public int a12895;
+ public int a12896;
+ public int a12897;
+ public int a12898;
+ public int a12899;
+ public int a12900;
+ public int a12901;
+ public int a12902;
+ public int a12903;
+ public int a12904;
+ public int a12905;
+ public int a12906;
+ public int a12907;
+ public int a12908;
+ public int a12909;
+ public int a12910;
+ public int a12911;
+ public int a12912;
+ public int a12913;
+ public int a12914;
+ public int a12915;
+ public int a12916;
+ public int a12917;
+ public int a12918;
+ public int a12919;
+ public int a12920;
+ public int a12921;
+ public int a12922;
+ public int a12923;
+ public int a12924;
+ public int a12925;
+ public int a12926;
+ public int a12927;
+ public int a12928;
+ public int a12929;
+ public int a12930;
+ public int a12931;
+ public int a12932;
+ public int a12933;
+ public int a12934;
+ public int a12935;
+ public int a12936;
+ public int a12937;
+ public int a12938;
+ public int a12939;
+ public int a12940;
+ public int a12941;
+ public int a12942;
+ public int a12943;
+ public int a12944;
+ public int a12945;
+ public int a12946;
+ public int a12947;
+ public int a12948;
+ public int a12949;
+ public int a12950;
+ public int a12951;
+ public int a12952;
+ public int a12953;
+ public int a12954;
+ public int a12955;
+ public int a12956;
+ public int a12957;
+ public int a12958;
+ public int a12959;
+ public int a12960;
+ public int a12961;
+ public int a12962;
+ public int a12963;
+ public int a12964;
+ public int a12965;
+ public int a12966;
+ public int a12967;
+ public int a12968;
+ public int a12969;
+ public int a12970;
+ public int a12971;
+ public int a12972;
+ public int a12973;
+ public int a12974;
+ public int a12975;
+ public int a12976;
+ public int a12977;
+ public int a12978;
+ public int a12979;
+ public int a12980;
+ public int a12981;
+ public int a12982;
+ public int a12983;
+ public int a12984;
+ public int a12985;
+ public int a12986;
+ public int a12987;
+ public int a12988;
+ public int a12989;
+ public int a12990;
+ public int a12991;
+ public int a12992;
+ public int a12993;
+ public int a12994;
+ public int a12995;
+ public int a12996;
+ public int a12997;
+ public int a12998;
+ public int a12999;
+ public int a13000;
+ public int a13001;
+ public int a13002;
+ public int a13003;
+ public int a13004;
+ public int a13005;
+ public int a13006;
+ public int a13007;
+ public int a13008;
+ public int a13009;
+ public int a13010;
+ public int a13011;
+ public int a13012;
+ public int a13013;
+ public int a13014;
+ public int a13015;
+ public int a13016;
+ public int a13017;
+ public int a13018;
+ public int a13019;
+ public int a13020;
+ public int a13021;
+ public int a13022;
+ public int a13023;
+ public int a13024;
+ public int a13025;
+ public int a13026;
+ public int a13027;
+ public int a13028;
+ public int a13029;
+ public int a13030;
+ public int a13031;
+ public int a13032;
+ public int a13033;
+ public int a13034;
+ public int a13035;
+ public int a13036;
+ public int a13037;
+ public int a13038;
+ public int a13039;
+ public int a13040;
+ public int a13041;
+ public int a13042;
+ public int a13043;
+ public int a13044;
+ public int a13045;
+ public int a13046;
+ public int a13047;
+ public int a13048;
+ public int a13049;
+ public int a13050;
+ public int a13051;
+ public int a13052;
+ public int a13053;
+ public int a13054;
+ public int a13055;
+ public int a13056;
+ public int a13057;
+ public int a13058;
+ public int a13059;
+ public int a13060;
+ public int a13061;
+ public int a13062;
+ public int a13063;
+ public int a13064;
+ public int a13065;
+ public int a13066;
+ public int a13067;
+ public int a13068;
+ public int a13069;
+ public int a13070;
+ public int a13071;
+ public int a13072;
+ public int a13073;
+ public int a13074;
+ public int a13075;
+ public int a13076;
+ public int a13077;
+ public int a13078;
+ public int a13079;
+ public int a13080;
+ public int a13081;
+ public int a13082;
+ public int a13083;
+ public int a13084;
+ public int a13085;
+ public int a13086;
+ public int a13087;
+ public int a13088;
+ public int a13089;
+ public int a13090;
+ public int a13091;
+ public int a13092;
+ public int a13093;
+ public int a13094;
+ public int a13095;
+ public int a13096;
+ public int a13097;
+ public int a13098;
+ public int a13099;
+ public int a13100;
+ public int a13101;
+ public int a13102;
+ public int a13103;
+ public int a13104;
+ public int a13105;
+ public int a13106;
+ public int a13107;
+ public int a13108;
+ public int a13109;
+ public int a13110;
+ public int a13111;
+ public int a13112;
+ public int a13113;
+ public int a13114;
+ public int a13115;
+ public int a13116;
+ public int a13117;
+ public int a13118;
+ public int a13119;
+ public int a13120;
+ public int a13121;
+ public int a13122;
+ public int a13123;
+ public int a13124;
+ public int a13125;
+ public int a13126;
+ public int a13127;
+ public int a13128;
+ public int a13129;
+ public int a13130;
+ public int a13131;
+ public int a13132;
+ public int a13133;
+ public int a13134;
+ public int a13135;
+ public int a13136;
+ public int a13137;
+ public int a13138;
+ public int a13139;
+ public int a13140;
+ public int a13141;
+ public int a13142;
+ public int a13143;
+ public int a13144;
+ public int a13145;
+ public int a13146;
+ public int a13147;
+ public int a13148;
+ public int a13149;
+ public int a13150;
+ public int a13151;
+ public int a13152;
+ public int a13153;
+ public int a13154;
+ public int a13155;
+ public int a13156;
+ public int a13157;
+ public int a13158;
+ public int a13159;
+ public int a13160;
+ public int a13161;
+ public int a13162;
+ public int a13163;
+ public int a13164;
+ public int a13165;
+ public int a13166;
+ public int a13167;
+ public int a13168;
+ public int a13169;
+ public int a13170;
+ public int a13171;
+ public int a13172;
+ public int a13173;
+ public int a13174;
+ public int a13175;
+ public int a13176;
+ public int a13177;
+ public int a13178;
+ public int a13179;
+ public int a13180;
+ public int a13181;
+ public int a13182;
+ public int a13183;
+ public int a13184;
+ public int a13185;
+ public int a13186;
+ public int a13187;
+ public int a13188;
+ public int a13189;
+ public int a13190;
+ public int a13191;
+ public int a13192;
+ public int a13193;
+ public int a13194;
+ public int a13195;
+ public int a13196;
+ public int a13197;
+ public int a13198;
+ public int a13199;
+ public int a13200;
+ public int a13201;
+ public int a13202;
+ public int a13203;
+ public int a13204;
+ public int a13205;
+ public int a13206;
+ public int a13207;
+ public int a13208;
+ public int a13209;
+ public int a13210;
+ public int a13211;
+ public int a13212;
+ public int a13213;
+ public int a13214;
+ public int a13215;
+ public int a13216;
+ public int a13217;
+ public int a13218;
+ public int a13219;
+ public int a13220;
+ public int a13221;
+ public int a13222;
+ public int a13223;
+ public int a13224;
+ public int a13225;
+ public int a13226;
+ public int a13227;
+ public int a13228;
+ public int a13229;
+ public int a13230;
+ public int a13231;
+ public int a13232;
+ public int a13233;
+ public int a13234;
+ public int a13235;
+ public int a13236;
+ public int a13237;
+ public int a13238;
+ public int a13239;
+ public int a13240;
+ public int a13241;
+ public int a13242;
+ public int a13243;
+ public int a13244;
+ public int a13245;
+ public int a13246;
+ public int a13247;
+ public int a13248;
+ public int a13249;
+ public int a13250;
+ public int a13251;
+ public int a13252;
+ public int a13253;
+ public int a13254;
+ public int a13255;
+ public int a13256;
+ public int a13257;
+ public int a13258;
+ public int a13259;
+ public int a13260;
+ public int a13261;
+ public int a13262;
+ public int a13263;
+ public int a13264;
+ public int a13265;
+ public int a13266;
+ public int a13267;
+ public int a13268;
+ public int a13269;
+ public int a13270;
+ public int a13271;
+ public int a13272;
+ public int a13273;
+ public int a13274;
+ public int a13275;
+ public int a13276;
+ public int a13277;
+ public int a13278;
+ public int a13279;
+ public int a13280;
+ public int a13281;
+ public int a13282;
+ public int a13283;
+ public int a13284;
+ public int a13285;
+ public int a13286;
+ public int a13287;
+ public int a13288;
+ public int a13289;
+ public int a13290;
+ public int a13291;
+ public int a13292;
+ public int a13293;
+ public int a13294;
+ public int a13295;
+ public int a13296;
+ public int a13297;
+ public int a13298;
+ public int a13299;
+ public int a13300;
+ public int a13301;
+ public int a13302;
+ public int a13303;
+ public int a13304;
+ public int a13305;
+ public int a13306;
+ public int a13307;
+ public int a13308;
+ public int a13309;
+ public int a13310;
+ public int a13311;
+ public int a13312;
+ public int a13313;
+ public int a13314;
+ public int a13315;
+ public int a13316;
+ public int a13317;
+ public int a13318;
+ public int a13319;
+ public int a13320;
+ public int a13321;
+ public int a13322;
+ public int a13323;
+ public int a13324;
+ public int a13325;
+ public int a13326;
+ public int a13327;
+ public int a13328;
+ public int a13329;
+ public int a13330;
+ public int a13331;
+ public int a13332;
+ public int a13333;
+ public int a13334;
+ public int a13335;
+ public int a13336;
+ public int a13337;
+ public int a13338;
+ public int a13339;
+ public int a13340;
+ public int a13341;
+ public int a13342;
+ public int a13343;
+ public int a13344;
+ public int a13345;
+ public int a13346;
+ public int a13347;
+ public int a13348;
+ public int a13349;
+ public int a13350;
+ public int a13351;
+ public int a13352;
+ public int a13353;
+ public int a13354;
+ public int a13355;
+ public int a13356;
+ public int a13357;
+ public int a13358;
+ public int a13359;
+ public int a13360;
+ public int a13361;
+ public int a13362;
+ public int a13363;
+ public int a13364;
+ public int a13365;
+ public int a13366;
+ public int a13367;
+ public int a13368;
+ public int a13369;
+ public int a13370;
+ public int a13371;
+ public int a13372;
+ public int a13373;
+ public int a13374;
+ public int a13375;
+ public int a13376;
+ public int a13377;
+ public int a13378;
+ public int a13379;
+ public int a13380;
+ public int a13381;
+ public int a13382;
+ public int a13383;
+ public int a13384;
+ public int a13385;
+ public int a13386;
+ public int a13387;
+ public int a13388;
+ public int a13389;
+ public int a13390;
+ public int a13391;
+ public int a13392;
+ public int a13393;
+ public int a13394;
+ public int a13395;
+ public int a13396;
+ public int a13397;
+ public int a13398;
+ public int a13399;
+ public int a13400;
+ public int a13401;
+ public int a13402;
+ public int a13403;
+ public int a13404;
+ public int a13405;
+ public int a13406;
+ public int a13407;
+ public int a13408;
+ public int a13409;
+ public int a13410;
+ public int a13411;
+ public int a13412;
+ public int a13413;
+ public int a13414;
+ public int a13415;
+ public int a13416;
+ public int a13417;
+ public int a13418;
+ public int a13419;
+ public int a13420;
+ public int a13421;
+ public int a13422;
+ public int a13423;
+ public int a13424;
+ public int a13425;
+ public int a13426;
+ public int a13427;
+ public int a13428;
+ public int a13429;
+ public int a13430;
+ public int a13431;
+ public int a13432;
+ public int a13433;
+ public int a13434;
+ public int a13435;
+ public int a13436;
+ public int a13437;
+ public int a13438;
+ public int a13439;
+ public int a13440;
+ public int a13441;
+ public int a13442;
+ public int a13443;
+ public int a13444;
+ public int a13445;
+ public int a13446;
+ public int a13447;
+ public int a13448;
+ public int a13449;
+ public int a13450;
+ public int a13451;
+ public int a13452;
+ public int a13453;
+ public int a13454;
+ public int a13455;
+ public int a13456;
+ public int a13457;
+ public int a13458;
+ public int a13459;
+ public int a13460;
+ public int a13461;
+ public int a13462;
+ public int a13463;
+ public int a13464;
+ public int a13465;
+ public int a13466;
+ public int a13467;
+ public int a13468;
+ public int a13469;
+ public int a13470;
+ public int a13471;
+ public int a13472;
+ public int a13473;
+ public int a13474;
+ public int a13475;
+ public int a13476;
+ public int a13477;
+ public int a13478;
+ public int a13479;
+ public int a13480;
+ public int a13481;
+ public int a13482;
+ public int a13483;
+ public int a13484;
+ public int a13485;
+ public int a13486;
+ public int a13487;
+ public int a13488;
+ public int a13489;
+ public int a13490;
+ public int a13491;
+ public int a13492;
+ public int a13493;
+ public int a13494;
+ public int a13495;
+ public int a13496;
+ public int a13497;
+ public int a13498;
+ public int a13499;
+ public int a13500;
+ public int a13501;
+ public int a13502;
+ public int a13503;
+ public int a13504;
+ public int a13505;
+ public int a13506;
+ public int a13507;
+ public int a13508;
+ public int a13509;
+ public int a13510;
+ public int a13511;
+ public int a13512;
+ public int a13513;
+ public int a13514;
+ public int a13515;
+ public int a13516;
+ public int a13517;
+ public int a13518;
+ public int a13519;
+ public int a13520;
+ public int a13521;
+ public int a13522;
+ public int a13523;
+ public int a13524;
+ public int a13525;
+ public int a13526;
+ public int a13527;
+ public int a13528;
+ public int a13529;
+ public int a13530;
+ public int a13531;
+ public int a13532;
+ public int a13533;
+ public int a13534;
+ public int a13535;
+ public int a13536;
+ public int a13537;
+ public int a13538;
+ public int a13539;
+ public int a13540;
+ public int a13541;
+ public int a13542;
+ public int a13543;
+ public int a13544;
+ public int a13545;
+ public int a13546;
+ public int a13547;
+ public int a13548;
+ public int a13549;
+ public int a13550;
+ public int a13551;
+ public int a13552;
+ public int a13553;
+ public int a13554;
+ public int a13555;
+ public int a13556;
+ public int a13557;
+ public int a13558;
+ public int a13559;
+ public int a13560;
+ public int a13561;
+ public int a13562;
+ public int a13563;
+ public int a13564;
+ public int a13565;
+ public int a13566;
+ public int a13567;
+ public int a13568;
+ public int a13569;
+ public int a13570;
+ public int a13571;
+ public int a13572;
+ public int a13573;
+ public int a13574;
+ public int a13575;
+ public int a13576;
+ public int a13577;
+ public int a13578;
+ public int a13579;
+ public int a13580;
+ public int a13581;
+ public int a13582;
+ public int a13583;
+ public int a13584;
+ public int a13585;
+ public int a13586;
+ public int a13587;
+ public int a13588;
+ public int a13589;
+ public int a13590;
+ public int a13591;
+ public int a13592;
+ public int a13593;
+ public int a13594;
+ public int a13595;
+ public int a13596;
+ public int a13597;
+ public int a13598;
+ public int a13599;
+ public int a13600;
+ public int a13601;
+ public int a13602;
+ public int a13603;
+ public int a13604;
+ public int a13605;
+ public int a13606;
+ public int a13607;
+ public int a13608;
+ public int a13609;
+ public int a13610;
+ public int a13611;
+ public int a13612;
+ public int a13613;
+ public int a13614;
+ public int a13615;
+ public int a13616;
+ public int a13617;
+ public int a13618;
+ public int a13619;
+ public int a13620;
+ public int a13621;
+ public int a13622;
+ public int a13623;
+ public int a13624;
+ public int a13625;
+ public int a13626;
+ public int a13627;
+ public int a13628;
+ public int a13629;
+ public int a13630;
+ public int a13631;
+ public int a13632;
+ public int a13633;
+ public int a13634;
+ public int a13635;
+ public int a13636;
+ public int a13637;
+ public int a13638;
+ public int a13639;
+ public int a13640;
+ public int a13641;
+ public int a13642;
+ public int a13643;
+ public int a13644;
+ public int a13645;
+ public int a13646;
+ public int a13647;
+ public int a13648;
+ public int a13649;
+ public int a13650;
+ public int a13651;
+ public int a13652;
+ public int a13653;
+ public int a13654;
+ public int a13655;
+ public int a13656;
+ public int a13657;
+ public int a13658;
+ public int a13659;
+ public int a13660;
+ public int a13661;
+ public int a13662;
+ public int a13663;
+ public int a13664;
+ public int a13665;
+ public int a13666;
+ public int a13667;
+ public int a13668;
+ public int a13669;
+ public int a13670;
+ public int a13671;
+ public int a13672;
+ public int a13673;
+ public int a13674;
+ public int a13675;
+ public int a13676;
+ public int a13677;
+ public int a13678;
+ public int a13679;
+ public int a13680;
+ public int a13681;
+ public int a13682;
+ public int a13683;
+ public int a13684;
+ public int a13685;
+ public int a13686;
+ public int a13687;
+ public int a13688;
+ public int a13689;
+ public int a13690;
+ public int a13691;
+ public int a13692;
+ public int a13693;
+ public int a13694;
+ public int a13695;
+ public int a13696;
+ public int a13697;
+ public int a13698;
+ public int a13699;
+ public int a13700;
+ public int a13701;
+ public int a13702;
+ public int a13703;
+ public int a13704;
+ public int a13705;
+ public int a13706;
+ public int a13707;
+ public int a13708;
+ public int a13709;
+ public int a13710;
+ public int a13711;
+ public int a13712;
+ public int a13713;
+ public int a13714;
+ public int a13715;
+ public int a13716;
+ public int a13717;
+ public int a13718;
+ public int a13719;
+ public int a13720;
+ public int a13721;
+ public int a13722;
+ public int a13723;
+ public int a13724;
+ public int a13725;
+ public int a13726;
+ public int a13727;
+ public int a13728;
+ public int a13729;
+ public int a13730;
+ public int a13731;
+ public int a13732;
+ public int a13733;
+ public int a13734;
+ public int a13735;
+ public int a13736;
+ public int a13737;
+ public int a13738;
+ public int a13739;
+ public int a13740;
+ public int a13741;
+ public int a13742;
+ public int a13743;
+ public int a13744;
+ public int a13745;
+ public int a13746;
+ public int a13747;
+ public int a13748;
+ public int a13749;
+ public int a13750;
+ public int a13751;
+ public int a13752;
+ public int a13753;
+ public int a13754;
+ public int a13755;
+ public int a13756;
+ public int a13757;
+ public int a13758;
+ public int a13759;
+ public int a13760;
+ public int a13761;
+ public int a13762;
+ public int a13763;
+ public int a13764;
+ public int a13765;
+ public int a13766;
+ public int a13767;
+ public int a13768;
+ public int a13769;
+ public int a13770;
+ public int a13771;
+ public int a13772;
+ public int a13773;
+ public int a13774;
+ public int a13775;
+ public int a13776;
+ public int a13777;
+ public int a13778;
+ public int a13779;
+ public int a13780;
+ public int a13781;
+ public int a13782;
+ public int a13783;
+ public int a13784;
+ public int a13785;
+ public int a13786;
+ public int a13787;
+ public int a13788;
+ public int a13789;
+ public int a13790;
+ public int a13791;
+ public int a13792;
+ public int a13793;
+ public int a13794;
+ public int a13795;
+ public int a13796;
+ public int a13797;
+ public int a13798;
+ public int a13799;
+ public int a13800;
+ public int a13801;
+ public int a13802;
+ public int a13803;
+ public int a13804;
+ public int a13805;
+ public int a13806;
+ public int a13807;
+ public int a13808;
+ public int a13809;
+ public int a13810;
+ public int a13811;
+ public int a13812;
+ public int a13813;
+ public int a13814;
+ public int a13815;
+ public int a13816;
+ public int a13817;
+ public int a13818;
+ public int a13819;
+ public int a13820;
+ public int a13821;
+ public int a13822;
+ public int a13823;
+ public int a13824;
+ public int a13825;
+ public int a13826;
+ public int a13827;
+ public int a13828;
+ public int a13829;
+ public int a13830;
+ public int a13831;
+ public int a13832;
+ public int a13833;
+ public int a13834;
+ public int a13835;
+ public int a13836;
+ public int a13837;
+ public int a13838;
+ public int a13839;
+ public int a13840;
+ public int a13841;
+ public int a13842;
+ public int a13843;
+ public int a13844;
+ public int a13845;
+ public int a13846;
+ public int a13847;
+ public int a13848;
+ public int a13849;
+ public int a13850;
+ public int a13851;
+ public int a13852;
+ public int a13853;
+ public int a13854;
+ public int a13855;
+ public int a13856;
+ public int a13857;
+ public int a13858;
+ public int a13859;
+ public int a13860;
+ public int a13861;
+ public int a13862;
+ public int a13863;
+ public int a13864;
+ public int a13865;
+ public int a13866;
+ public int a13867;
+ public int a13868;
+ public int a13869;
+ public int a13870;
+ public int a13871;
+ public int a13872;
+ public int a13873;
+ public int a13874;
+ public int a13875;
+ public int a13876;
+ public int a13877;
+ public int a13878;
+ public int a13879;
+ public int a13880;
+ public int a13881;
+ public int a13882;
+ public int a13883;
+ public int a13884;
+ public int a13885;
+ public int a13886;
+ public int a13887;
+ public int a13888;
+ public int a13889;
+ public int a13890;
+ public int a13891;
+ public int a13892;
+ public int a13893;
+ public int a13894;
+ public int a13895;
+ public int a13896;
+ public int a13897;
+ public int a13898;
+ public int a13899;
+ public int a13900;
+ public int a13901;
+ public int a13902;
+ public int a13903;
+ public int a13904;
+ public int a13905;
+ public int a13906;
+ public int a13907;
+ public int a13908;
+ public int a13909;
+ public int a13910;
+ public int a13911;
+ public int a13912;
+ public int a13913;
+ public int a13914;
+ public int a13915;
+ public int a13916;
+ public int a13917;
+ public int a13918;
+ public int a13919;
+ public int a13920;
+ public int a13921;
+ public int a13922;
+ public int a13923;
+ public int a13924;
+ public int a13925;
+ public int a13926;
+ public int a13927;
+ public int a13928;
+ public int a13929;
+ public int a13930;
+ public int a13931;
+ public int a13932;
+ public int a13933;
+ public int a13934;
+ public int a13935;
+ public int a13936;
+ public int a13937;
+ public int a13938;
+ public int a13939;
+ public int a13940;
+ public int a13941;
+ public int a13942;
+ public int a13943;
+ public int a13944;
+ public int a13945;
+ public int a13946;
+ public int a13947;
+ public int a13948;
+ public int a13949;
+ public int a13950;
+ public int a13951;
+ public int a13952;
+ public int a13953;
+ public int a13954;
+ public int a13955;
+ public int a13956;
+ public int a13957;
+ public int a13958;
+ public int a13959;
+ public int a13960;
+ public int a13961;
+ public int a13962;
+ public int a13963;
+ public int a13964;
+ public int a13965;
+ public int a13966;
+ public int a13967;
+ public int a13968;
+ public int a13969;
+ public int a13970;
+ public int a13971;
+ public int a13972;
+ public int a13973;
+ public int a13974;
+ public int a13975;
+ public int a13976;
+ public int a13977;
+ public int a13978;
+ public int a13979;
+ public int a13980;
+ public int a13981;
+ public int a13982;
+ public int a13983;
+ public int a13984;
+ public int a13985;
+ public int a13986;
+ public int a13987;
+ public int a13988;
+ public int a13989;
+ public int a13990;
+ public int a13991;
+ public int a13992;
+ public int a13993;
+ public int a13994;
+ public int a13995;
+ public int a13996;
+ public int a13997;
+ public int a13998;
+ public int a13999;
+ public int a14000;
+ public int a14001;
+ public int a14002;
+ public int a14003;
+ public int a14004;
+ public int a14005;
+ public int a14006;
+ public int a14007;
+ public int a14008;
+ public int a14009;
+ public int a14010;
+ public int a14011;
+ public int a14012;
+ public int a14013;
+ public int a14014;
+ public int a14015;
+ public int a14016;
+ public int a14017;
+ public int a14018;
+ public int a14019;
+ public int a14020;
+ public int a14021;
+ public int a14022;
+ public int a14023;
+ public int a14024;
+ public int a14025;
+ public int a14026;
+ public int a14027;
+ public int a14028;
+ public int a14029;
+ public int a14030;
+ public int a14031;
+ public int a14032;
+ public int a14033;
+ public int a14034;
+ public int a14035;
+ public int a14036;
+ public int a14037;
+ public int a14038;
+ public int a14039;
+ public int a14040;
+ public int a14041;
+ public int a14042;
+ public int a14043;
+ public int a14044;
+ public int a14045;
+ public int a14046;
+ public int a14047;
+ public int a14048;
+ public int a14049;
+ public int a14050;
+ public int a14051;
+ public int a14052;
+ public int a14053;
+ public int a14054;
+ public int a14055;
+ public int a14056;
+ public int a14057;
+ public int a14058;
+ public int a14059;
+ public int a14060;
+ public int a14061;
+ public int a14062;
+ public int a14063;
+ public int a14064;
+ public int a14065;
+ public int a14066;
+ public int a14067;
+ public int a14068;
+ public int a14069;
+ public int a14070;
+ public int a14071;
+ public int a14072;
+ public int a14073;
+ public int a14074;
+ public int a14075;
+ public int a14076;
+ public int a14077;
+ public int a14078;
+ public int a14079;
+ public int a14080;
+ public int a14081;
+ public int a14082;
+ public int a14083;
+ public int a14084;
+ public int a14085;
+ public int a14086;
+ public int a14087;
+ public int a14088;
+ public int a14089;
+ public int a14090;
+ public int a14091;
+ public int a14092;
+ public int a14093;
+ public int a14094;
+ public int a14095;
+ public int a14096;
+ public int a14097;
+ public int a14098;
+ public int a14099;
+ public int a14100;
+ public int a14101;
+ public int a14102;
+ public int a14103;
+ public int a14104;
+ public int a14105;
+ public int a14106;
+ public int a14107;
+ public int a14108;
+ public int a14109;
+ public int a14110;
+ public int a14111;
+ public int a14112;
+ public int a14113;
+ public int a14114;
+ public int a14115;
+ public int a14116;
+ public int a14117;
+ public int a14118;
+ public int a14119;
+ public int a14120;
+ public int a14121;
+ public int a14122;
+ public int a14123;
+ public int a14124;
+ public int a14125;
+ public int a14126;
+ public int a14127;
+ public int a14128;
+ public int a14129;
+ public int a14130;
+ public int a14131;
+ public int a14132;
+ public int a14133;
+ public int a14134;
+ public int a14135;
+ public int a14136;
+ public int a14137;
+ public int a14138;
+ public int a14139;
+ public int a14140;
+ public int a14141;
+ public int a14142;
+ public int a14143;
+ public int a14144;
+ public int a14145;
+ public int a14146;
+ public int a14147;
+ public int a14148;
+ public int a14149;
+ public int a14150;
+ public int a14151;
+ public int a14152;
+ public int a14153;
+ public int a14154;
+ public int a14155;
+ public int a14156;
+ public int a14157;
+ public int a14158;
+ public int a14159;
+ public int a14160;
+ public int a14161;
+ public int a14162;
+ public int a14163;
+ public int a14164;
+ public int a14165;
+ public int a14166;
+ public int a14167;
+ public int a14168;
+ public int a14169;
+ public int a14170;
+ public int a14171;
+ public int a14172;
+ public int a14173;
+ public int a14174;
+ public int a14175;
+ public int a14176;
+ public int a14177;
+ public int a14178;
+ public int a14179;
+ public int a14180;
+ public int a14181;
+ public int a14182;
+ public int a14183;
+ public int a14184;
+ public int a14185;
+ public int a14186;
+ public int a14187;
+ public int a14188;
+ public int a14189;
+ public int a14190;
+ public int a14191;
+ public int a14192;
+ public int a14193;
+ public int a14194;
+ public int a14195;
+ public int a14196;
+ public int a14197;
+ public int a14198;
+ public int a14199;
+ public int a14200;
+ public int a14201;
+ public int a14202;
+ public int a14203;
+ public int a14204;
+ public int a14205;
+ public int a14206;
+ public int a14207;
+ public int a14208;
+ public int a14209;
+ public int a14210;
+ public int a14211;
+ public int a14212;
+ public int a14213;
+ public int a14214;
+ public int a14215;
+ public int a14216;
+ public int a14217;
+ public int a14218;
+ public int a14219;
+ public int a14220;
+ public int a14221;
+ public int a14222;
+ public int a14223;
+ public int a14224;
+ public int a14225;
+ public int a14226;
+ public int a14227;
+ public int a14228;
+ public int a14229;
+ public int a14230;
+ public int a14231;
+ public int a14232;
+ public int a14233;
+ public int a14234;
+ public int a14235;
+ public int a14236;
+ public int a14237;
+ public int a14238;
+ public int a14239;
+ public int a14240;
+ public int a14241;
+ public int a14242;
+ public int a14243;
+ public int a14244;
+ public int a14245;
+ public int a14246;
+ public int a14247;
+ public int a14248;
+ public int a14249;
+ public int a14250;
+ public int a14251;
+ public int a14252;
+ public int a14253;
+ public int a14254;
+ public int a14255;
+ public int a14256;
+ public int a14257;
+ public int a14258;
+ public int a14259;
+ public int a14260;
+ public int a14261;
+ public int a14262;
+ public int a14263;
+ public int a14264;
+ public int a14265;
+ public int a14266;
+ public int a14267;
+ public int a14268;
+ public int a14269;
+ public int a14270;
+ public int a14271;
+ public int a14272;
+ public int a14273;
+ public int a14274;
+ public int a14275;
+ public int a14276;
+ public int a14277;
+ public int a14278;
+ public int a14279;
+ public int a14280;
+ public int a14281;
+ public int a14282;
+ public int a14283;
+ public int a14284;
+ public int a14285;
+ public int a14286;
+ public int a14287;
+ public int a14288;
+ public int a14289;
+ public int a14290;
+ public int a14291;
+ public int a14292;
+ public int a14293;
+ public int a14294;
+ public int a14295;
+ public int a14296;
+ public int a14297;
+ public int a14298;
+ public int a14299;
+ public int a14300;
+ public int a14301;
+ public int a14302;
+ public int a14303;
+ public int a14304;
+ public int a14305;
+ public int a14306;
+ public int a14307;
+ public int a14308;
+ public int a14309;
+ public int a14310;
+ public int a14311;
+ public int a14312;
+ public int a14313;
+ public int a14314;
+ public int a14315;
+ public int a14316;
+ public int a14317;
+ public int a14318;
+ public int a14319;
+ public int a14320;
+ public int a14321;
+ public int a14322;
+ public int a14323;
+ public int a14324;
+ public int a14325;
+ public int a14326;
+ public int a14327;
+ public int a14328;
+ public int a14329;
+ public int a14330;
+ public int a14331;
+ public int a14332;
+ public int a14333;
+ public int a14334;
+ public int a14335;
+ public int a14336;
+ public int a14337;
+ public int a14338;
+ public int a14339;
+ public int a14340;
+ public int a14341;
+ public int a14342;
+ public int a14343;
+ public int a14344;
+ public int a14345;
+ public int a14346;
+ public int a14347;
+ public int a14348;
+ public int a14349;
+ public int a14350;
+ public int a14351;
+ public int a14352;
+ public int a14353;
+ public int a14354;
+ public int a14355;
+ public int a14356;
+ public int a14357;
+ public int a14358;
+ public int a14359;
+ public int a14360;
+ public int a14361;
+ public int a14362;
+ public int a14363;
+ public int a14364;
+ public int a14365;
+ public int a14366;
+ public int a14367;
+ public int a14368;
+ public int a14369;
+ public int a14370;
+ public int a14371;
+ public int a14372;
+ public int a14373;
+ public int a14374;
+ public int a14375;
+ public int a14376;
+ public int a14377;
+ public int a14378;
+ public int a14379;
+ public int a14380;
+ public int a14381;
+ public int a14382;
+ public int a14383;
+ public int a14384;
+ public int a14385;
+ public int a14386;
+ public int a14387;
+ public int a14388;
+ public int a14389;
+ public int a14390;
+ public int a14391;
+ public int a14392;
+ public int a14393;
+ public int a14394;
+ public int a14395;
+ public int a14396;
+ public int a14397;
+ public int a14398;
+ public int a14399;
+ public int a14400;
+ public int a14401;
+ public int a14402;
+ public int a14403;
+ public int a14404;
+ public int a14405;
+ public int a14406;
+ public int a14407;
+ public int a14408;
+ public int a14409;
+ public int a14410;
+ public int a14411;
+ public int a14412;
+ public int a14413;
+ public int a14414;
+ public int a14415;
+ public int a14416;
+ public int a14417;
+ public int a14418;
+ public int a14419;
+ public int a14420;
+ public int a14421;
+ public int a14422;
+ public int a14423;
+ public int a14424;
+ public int a14425;
+ public int a14426;
+ public int a14427;
+ public int a14428;
+ public int a14429;
+ public int a14430;
+ public int a14431;
+ public int a14432;
+ public int a14433;
+ public int a14434;
+ public int a14435;
+ public int a14436;
+ public int a14437;
+ public int a14438;
+ public int a14439;
+ public int a14440;
+ public int a14441;
+ public int a14442;
+ public int a14443;
+ public int a14444;
+ public int a14445;
+ public int a14446;
+ public int a14447;
+ public int a14448;
+ public int a14449;
+ public int a14450;
+ public int a14451;
+ public int a14452;
+ public int a14453;
+ public int a14454;
+ public int a14455;
+ public int a14456;
+ public int a14457;
+ public int a14458;
+ public int a14459;
+ public int a14460;
+ public int a14461;
+ public int a14462;
+ public int a14463;
+ public int a14464;
+ public int a14465;
+ public int a14466;
+ public int a14467;
+ public int a14468;
+ public int a14469;
+ public int a14470;
+ public int a14471;
+ public int a14472;
+ public int a14473;
+ public int a14474;
+ public int a14475;
+ public int a14476;
+ public int a14477;
+ public int a14478;
+ public int a14479;
+ public int a14480;
+ public int a14481;
+ public int a14482;
+ public int a14483;
+ public int a14484;
+ public int a14485;
+ public int a14486;
+ public int a14487;
+ public int a14488;
+ public int a14489;
+ public int a14490;
+ public int a14491;
+ public int a14492;
+ public int a14493;
+ public int a14494;
+ public int a14495;
+ public int a14496;
+ public int a14497;
+ public int a14498;
+ public int a14499;
+ public int a14500;
+ public int a14501;
+ public int a14502;
+ public int a14503;
+ public int a14504;
+ public int a14505;
+ public int a14506;
+ public int a14507;
+ public int a14508;
+ public int a14509;
+ public int a14510;
+ public int a14511;
+ public int a14512;
+ public int a14513;
+ public int a14514;
+ public int a14515;
+ public int a14516;
+ public int a14517;
+ public int a14518;
+ public int a14519;
+ public int a14520;
+ public int a14521;
+ public int a14522;
+ public int a14523;
+ public int a14524;
+ public int a14525;
+ public int a14526;
+ public int a14527;
+ public int a14528;
+ public int a14529;
+ public int a14530;
+ public int a14531;
+ public int a14532;
+ public int a14533;
+ public int a14534;
+ public int a14535;
+ public int a14536;
+ public int a14537;
+ public int a14538;
+ public int a14539;
+ public int a14540;
+ public int a14541;
+ public int a14542;
+ public int a14543;
+ public int a14544;
+ public int a14545;
+ public int a14546;
+ public int a14547;
+ public int a14548;
+ public int a14549;
+ public int a14550;
+ public int a14551;
+ public int a14552;
+ public int a14553;
+ public int a14554;
+ public int a14555;
+ public int a14556;
+ public int a14557;
+ public int a14558;
+ public int a14559;
+ public int a14560;
+ public int a14561;
+ public int a14562;
+ public int a14563;
+ public int a14564;
+ public int a14565;
+ public int a14566;
+ public int a14567;
+ public int a14568;
+ public int a14569;
+ public int a14570;
+ public int a14571;
+ public int a14572;
+ public int a14573;
+ public int a14574;
+ public int a14575;
+ public int a14576;
+ public int a14577;
+ public int a14578;
+ public int a14579;
+ public int a14580;
+ public int a14581;
+ public int a14582;
+ public int a14583;
+ public int a14584;
+ public int a14585;
+ public int a14586;
+ public int a14587;
+ public int a14588;
+ public int a14589;
+ public int a14590;
+ public int a14591;
+ public int a14592;
+ public int a14593;
+ public int a14594;
+ public int a14595;
+ public int a14596;
+ public int a14597;
+ public int a14598;
+ public int a14599;
+ public int a14600;
+ public int a14601;
+ public int a14602;
+ public int a14603;
+ public int a14604;
+ public int a14605;
+ public int a14606;
+ public int a14607;
+ public int a14608;
+ public int a14609;
+ public int a14610;
+ public int a14611;
+ public int a14612;
+ public int a14613;
+ public int a14614;
+ public int a14615;
+ public int a14616;
+ public int a14617;
+ public int a14618;
+ public int a14619;
+ public int a14620;
+ public int a14621;
+ public int a14622;
+ public int a14623;
+ public int a14624;
+ public int a14625;
+ public int a14626;
+ public int a14627;
+ public int a14628;
+ public int a14629;
+ public int a14630;
+ public int a14631;
+ public int a14632;
+ public int a14633;
+ public int a14634;
+ public int a14635;
+ public int a14636;
+ public int a14637;
+ public int a14638;
+ public int a14639;
+ public int a14640;
+ public int a14641;
+ public int a14642;
+ public int a14643;
+ public int a14644;
+ public int a14645;
+ public int a14646;
+ public int a14647;
+ public int a14648;
+ public int a14649;
+ public int a14650;
+ public int a14651;
+ public int a14652;
+ public int a14653;
+ public int a14654;
+ public int a14655;
+ public int a14656;
+ public int a14657;
+ public int a14658;
+ public int a14659;
+ public int a14660;
+ public int a14661;
+ public int a14662;
+ public int a14663;
+ public int a14664;
+ public int a14665;
+ public int a14666;
+ public int a14667;
+ public int a14668;
+ public int a14669;
+ public int a14670;
+ public int a14671;
+ public int a14672;
+ public int a14673;
+ public int a14674;
+ public int a14675;
+ public int a14676;
+ public int a14677;
+ public int a14678;
+ public int a14679;
+ public int a14680;
+ public int a14681;
+ public int a14682;
+ public int a14683;
+ public int a14684;
+ public int a14685;
+ public int a14686;
+ public int a14687;
+ public int a14688;
+ public int a14689;
+ public int a14690;
+ public int a14691;
+ public int a14692;
+ public int a14693;
+ public int a14694;
+ public int a14695;
+ public int a14696;
+ public int a14697;
+ public int a14698;
+ public int a14699;
+ public int a14700;
+ public int a14701;
+ public int a14702;
+ public int a14703;
+ public int a14704;
+ public int a14705;
+ public int a14706;
+ public int a14707;
+ public int a14708;
+ public int a14709;
+ public int a14710;
+ public int a14711;
+ public int a14712;
+ public int a14713;
+ public int a14714;
+ public int a14715;
+ public int a14716;
+ public int a14717;
+ public int a14718;
+ public int a14719;
+ public int a14720;
+ public int a14721;
+ public int a14722;
+ public int a14723;
+ public int a14724;
+ public int a14725;
+ public int a14726;
+ public int a14727;
+ public int a14728;
+ public int a14729;
+ public int a14730;
+ public int a14731;
+ public int a14732;
+ public int a14733;
+ public int a14734;
+ public int a14735;
+ public int a14736;
+ public int a14737;
+ public int a14738;
+ public int a14739;
+ public int a14740;
+ public int a14741;
+ public int a14742;
+ public int a14743;
+ public int a14744;
+ public int a14745;
+ public int a14746;
+ public int a14747;
+ public int a14748;
+ public int a14749;
+ public int a14750;
+ public int a14751;
+ public int a14752;
+ public int a14753;
+ public int a14754;
+ public int a14755;
+ public int a14756;
+ public int a14757;
+ public int a14758;
+ public int a14759;
+ public int a14760;
+ public int a14761;
+ public int a14762;
+ public int a14763;
+ public int a14764;
+ public int a14765;
+ public int a14766;
+ public int a14767;
+ public int a14768;
+ public int a14769;
+ public int a14770;
+ public int a14771;
+ public int a14772;
+ public int a14773;
+ public int a14774;
+ public int a14775;
+ public int a14776;
+ public int a14777;
+ public int a14778;
+ public int a14779;
+ public int a14780;
+ public int a14781;
+ public int a14782;
+ public int a14783;
+ public int a14784;
+ public int a14785;
+ public int a14786;
+ public int a14787;
+ public int a14788;
+ public int a14789;
+ public int a14790;
+ public int a14791;
+ public int a14792;
+ public int a14793;
+ public int a14794;
+ public int a14795;
+ public int a14796;
+ public int a14797;
+ public int a14798;
+ public int a14799;
+ public int a14800;
+ public int a14801;
+ public int a14802;
+ public int a14803;
+ public int a14804;
+ public int a14805;
+ public int a14806;
+ public int a14807;
+ public int a14808;
+ public int a14809;
+ public int a14810;
+ public int a14811;
+ public int a14812;
+ public int a14813;
+ public int a14814;
+ public int a14815;
+ public int a14816;
+ public int a14817;
+ public int a14818;
+ public int a14819;
+ public int a14820;
+ public int a14821;
+ public int a14822;
+ public int a14823;
+ public int a14824;
+ public int a14825;
+ public int a14826;
+ public int a14827;
+ public int a14828;
+ public int a14829;
+ public int a14830;
+ public int a14831;
+ public int a14832;
+ public int a14833;
+ public int a14834;
+ public int a14835;
+ public int a14836;
+ public int a14837;
+ public int a14838;
+ public int a14839;
+ public int a14840;
+ public int a14841;
+ public int a14842;
+ public int a14843;
+ public int a14844;
+ public int a14845;
+ public int a14846;
+ public int a14847;
+ public int a14848;
+ public int a14849;
+ public int a14850;
+ public int a14851;
+ public int a14852;
+ public int a14853;
+ public int a14854;
+ public int a14855;
+ public int a14856;
+ public int a14857;
+ public int a14858;
+ public int a14859;
+ public int a14860;
+ public int a14861;
+ public int a14862;
+ public int a14863;
+ public int a14864;
+ public int a14865;
+ public int a14866;
+ public int a14867;
+ public int a14868;
+ public int a14869;
+ public int a14870;
+ public int a14871;
+ public int a14872;
+ public int a14873;
+ public int a14874;
+ public int a14875;
+ public int a14876;
+ public int a14877;
+ public int a14878;
+ public int a14879;
+ public int a14880;
+ public int a14881;
+ public int a14882;
+ public int a14883;
+ public int a14884;
+ public int a14885;
+ public int a14886;
+ public int a14887;
+ public int a14888;
+ public int a14889;
+ public int a14890;
+ public int a14891;
+ public int a14892;
+ public int a14893;
+ public int a14894;
+ public int a14895;
+ public int a14896;
+ public int a14897;
+ public int a14898;
+ public int a14899;
+ public int a14900;
+ public int a14901;
+ public int a14902;
+ public int a14903;
+ public int a14904;
+ public int a14905;
+ public int a14906;
+ public int a14907;
+ public int a14908;
+ public int a14909;
+ public int a14910;
+ public int a14911;
+ public int a14912;
+ public int a14913;
+ public int a14914;
+ public int a14915;
+ public int a14916;
+ public int a14917;
+ public int a14918;
+ public int a14919;
+ public int a14920;
+ public int a14921;
+ public int a14922;
+ public int a14923;
+ public int a14924;
+ public int a14925;
+ public int a14926;
+ public int a14927;
+ public int a14928;
+ public int a14929;
+ public int a14930;
+ public int a14931;
+ public int a14932;
+ public int a14933;
+ public int a14934;
+ public int a14935;
+ public int a14936;
+ public int a14937;
+ public int a14938;
+ public int a14939;
+ public int a14940;
+ public int a14941;
+ public int a14942;
+ public int a14943;
+ public int a14944;
+ public int a14945;
+ public int a14946;
+ public int a14947;
+ public int a14948;
+ public int a14949;
+ public int a14950;
+ public int a14951;
+ public int a14952;
+ public int a14953;
+ public int a14954;
+ public int a14955;
+ public int a14956;
+ public int a14957;
+ public int a14958;
+ public int a14959;
+ public int a14960;
+ public int a14961;
+ public int a14962;
+ public int a14963;
+ public int a14964;
+ public int a14965;
+ public int a14966;
+ public int a14967;
+ public int a14968;
+ public int a14969;
+ public int a14970;
+ public int a14971;
+ public int a14972;
+ public int a14973;
+ public int a14974;
+ public int a14975;
+ public int a14976;
+ public int a14977;
+ public int a14978;
+ public int a14979;
+ public int a14980;
+ public int a14981;
+ public int a14982;
+ public int a14983;
+ public int a14984;
+ public int a14985;
+ public int a14986;
+ public int a14987;
+ public int a14988;
+ public int a14989;
+ public int a14990;
+ public int a14991;
+ public int a14992;
+ public int a14993;
+ public int a14994;
+ public int a14995;
+ public int a14996;
+ public int a14997;
+ public int a14998;
+ public int a14999;
+ public int a15000;
+ public int a15001;
+ public int a15002;
+ public int a15003;
+ public int a15004;
+ public int a15005;
+ public int a15006;
+ public int a15007;
+ public int a15008;
+ public int a15009;
+ public int a15010;
+ public int a15011;
+ public int a15012;
+ public int a15013;
+ public int a15014;
+ public int a15015;
+ public int a15016;
+ public int a15017;
+ public int a15018;
+ public int a15019;
+ public int a15020;
+ public int a15021;
+ public int a15022;
+ public int a15023;
+ public int a15024;
+ public int a15025;
+ public int a15026;
+ public int a15027;
+ public int a15028;
+ public int a15029;
+ public int a15030;
+ public int a15031;
+ public int a15032;
+ public int a15033;
+ public int a15034;
+ public int a15035;
+ public int a15036;
+ public int a15037;
+ public int a15038;
+ public int a15039;
+ public int a15040;
+ public int a15041;
+ public int a15042;
+ public int a15043;
+ public int a15044;
+ public int a15045;
+ public int a15046;
+ public int a15047;
+ public int a15048;
+ public int a15049;
+ public int a15050;
+ public int a15051;
+ public int a15052;
+ public int a15053;
+ public int a15054;
+ public int a15055;
+ public int a15056;
+ public int a15057;
+ public int a15058;
+ public int a15059;
+ public int a15060;
+ public int a15061;
+ public int a15062;
+ public int a15063;
+ public int a15064;
+ public int a15065;
+ public int a15066;
+ public int a15067;
+ public int a15068;
+ public int a15069;
+ public int a15070;
+ public int a15071;
+ public int a15072;
+ public int a15073;
+ public int a15074;
+ public int a15075;
+ public int a15076;
+ public int a15077;
+ public int a15078;
+ public int a15079;
+ public int a15080;
+ public int a15081;
+ public int a15082;
+ public int a15083;
+ public int a15084;
+ public int a15085;
+ public int a15086;
+ public int a15087;
+ public int a15088;
+ public int a15089;
+ public int a15090;
+ public int a15091;
+ public int a15092;
+ public int a15093;
+ public int a15094;
+ public int a15095;
+ public int a15096;
+ public int a15097;
+ public int a15098;
+ public int a15099;
+ public int a15100;
+ public int a15101;
+ public int a15102;
+ public int a15103;
+ public int a15104;
+ public int a15105;
+ public int a15106;
+ public int a15107;
+ public int a15108;
+ public int a15109;
+ public int a15110;
+ public int a15111;
+ public int a15112;
+ public int a15113;
+ public int a15114;
+ public int a15115;
+ public int a15116;
+ public int a15117;
+ public int a15118;
+ public int a15119;
+ public int a15120;
+ public int a15121;
+ public int a15122;
+ public int a15123;
+ public int a15124;
+ public int a15125;
+ public int a15126;
+ public int a15127;
+ public int a15128;
+ public int a15129;
+ public int a15130;
+ public int a15131;
+ public int a15132;
+ public int a15133;
+ public int a15134;
+ public int a15135;
+ public int a15136;
+ public int a15137;
+ public int a15138;
+ public int a15139;
+ public int a15140;
+ public int a15141;
+ public int a15142;
+ public int a15143;
+ public int a15144;
+ public int a15145;
+ public int a15146;
+ public int a15147;
+ public int a15148;
+ public int a15149;
+ public int a15150;
+ public int a15151;
+ public int a15152;
+ public int a15153;
+ public int a15154;
+ public int a15155;
+ public int a15156;
+ public int a15157;
+ public int a15158;
+ public int a15159;
+ public int a15160;
+ public int a15161;
+ public int a15162;
+ public int a15163;
+ public int a15164;
+ public int a15165;
+ public int a15166;
+ public int a15167;
+ public int a15168;
+ public int a15169;
+ public int a15170;
+ public int a15171;
+ public int a15172;
+ public int a15173;
+ public int a15174;
+ public int a15175;
+ public int a15176;
+ public int a15177;
+ public int a15178;
+ public int a15179;
+ public int a15180;
+ public int a15181;
+ public int a15182;
+ public int a15183;
+ public int a15184;
+ public int a15185;
+ public int a15186;
+ public int a15187;
+ public int a15188;
+ public int a15189;
+ public int a15190;
+ public int a15191;
+ public int a15192;
+ public int a15193;
+ public int a15194;
+ public int a15195;
+ public int a15196;
+ public int a15197;
+ public int a15198;
+ public int a15199;
+ public int a15200;
+ public int a15201;
+ public int a15202;
+ public int a15203;
+ public int a15204;
+ public int a15205;
+ public int a15206;
+ public int a15207;
+ public int a15208;
+ public int a15209;
+ public int a15210;
+ public int a15211;
+ public int a15212;
+ public int a15213;
+ public int a15214;
+ public int a15215;
+ public int a15216;
+ public int a15217;
+ public int a15218;
+ public int a15219;
+ public int a15220;
+ public int a15221;
+ public int a15222;
+ public int a15223;
+ public int a15224;
+ public int a15225;
+ public int a15226;
+ public int a15227;
+ public int a15228;
+ public int a15229;
+ public int a15230;
+ public int a15231;
+ public int a15232;
+ public int a15233;
+ public int a15234;
+ public int a15235;
+ public int a15236;
+ public int a15237;
+ public int a15238;
+ public int a15239;
+ public int a15240;
+ public int a15241;
+ public int a15242;
+ public int a15243;
+ public int a15244;
+ public int a15245;
+ public int a15246;
+ public int a15247;
+ public int a15248;
+ public int a15249;
+ public int a15250;
+ public int a15251;
+ public int a15252;
+ public int a15253;
+ public int a15254;
+ public int a15255;
+ public int a15256;
+ public int a15257;
+ public int a15258;
+ public int a15259;
+ public int a15260;
+ public int a15261;
+ public int a15262;
+ public int a15263;
+ public int a15264;
+ public int a15265;
+ public int a15266;
+ public int a15267;
+ public int a15268;
+ public int a15269;
+ public int a15270;
+ public int a15271;
+ public int a15272;
+ public int a15273;
+ public int a15274;
+ public int a15275;
+ public int a15276;
+ public int a15277;
+ public int a15278;
+ public int a15279;
+ public int a15280;
+ public int a15281;
+ public int a15282;
+ public int a15283;
+ public int a15284;
+ public int a15285;
+ public int a15286;
+ public int a15287;
+ public int a15288;
+ public int a15289;
+ public int a15290;
+ public int a15291;
+ public int a15292;
+ public int a15293;
+ public int a15294;
+ public int a15295;
+ public int a15296;
+ public int a15297;
+ public int a15298;
+ public int a15299;
+ public int a15300;
+ public int a15301;
+ public int a15302;
+ public int a15303;
+ public int a15304;
+ public int a15305;
+ public int a15306;
+ public int a15307;
+ public int a15308;
+ public int a15309;
+ public int a15310;
+ public int a15311;
+ public int a15312;
+ public int a15313;
+ public int a15314;
+ public int a15315;
+ public int a15316;
+ public int a15317;
+ public int a15318;
+ public int a15319;
+ public int a15320;
+ public int a15321;
+ public int a15322;
+ public int a15323;
+ public int a15324;
+ public int a15325;
+ public int a15326;
+ public int a15327;
+ public int a15328;
+ public int a15329;
+ public int a15330;
+ public int a15331;
+ public int a15332;
+ public int a15333;
+ public int a15334;
+ public int a15335;
+ public int a15336;
+ public int a15337;
+ public int a15338;
+ public int a15339;
+ public int a15340;
+ public int a15341;
+ public int a15342;
+ public int a15343;
+ public int a15344;
+ public int a15345;
+ public int a15346;
+ public int a15347;
+ public int a15348;
+ public int a15349;
+ public int a15350;
+ public int a15351;
+ public int a15352;
+ public int a15353;
+ public int a15354;
+ public int a15355;
+ public int a15356;
+ public int a15357;
+ public int a15358;
+ public int a15359;
+ public int a15360;
+ public int a15361;
+ public int a15362;
+ public int a15363;
+ public int a15364;
+ public int a15365;
+ public int a15366;
+ public int a15367;
+ public int a15368;
+ public int a15369;
+ public int a15370;
+ public int a15371;
+ public int a15372;
+ public int a15373;
+ public int a15374;
+ public int a15375;
+ public int a15376;
+ public int a15377;
+ public int a15378;
+ public int a15379;
+ public int a15380;
+ public int a15381;
+ public int a15382;
+ public int a15383;
+ public int a15384;
+ public int a15385;
+ public int a15386;
+ public int a15387;
+ public int a15388;
+ public int a15389;
+ public int a15390;
+ public int a15391;
+ public int a15392;
+ public int a15393;
+ public int a15394;
+ public int a15395;
+ public int a15396;
+ public int a15397;
+ public int a15398;
+ public int a15399;
+ public int a15400;
+ public int a15401;
+ public int a15402;
+ public int a15403;
+ public int a15404;
+ public int a15405;
+ public int a15406;
+ public int a15407;
+ public int a15408;
+ public int a15409;
+ public int a15410;
+ public int a15411;
+ public int a15412;
+ public int a15413;
+ public int a15414;
+ public int a15415;
+ public int a15416;
+ public int a15417;
+ public int a15418;
+ public int a15419;
+ public int a15420;
+ public int a15421;
+ public int a15422;
+ public int a15423;
+ public int a15424;
+ public int a15425;
+ public int a15426;
+ public int a15427;
+ public int a15428;
+ public int a15429;
+ public int a15430;
+ public int a15431;
+ public int a15432;
+ public int a15433;
+ public int a15434;
+ public int a15435;
+ public int a15436;
+ public int a15437;
+ public int a15438;
+ public int a15439;
+ public int a15440;
+ public int a15441;
+ public int a15442;
+ public int a15443;
+ public int a15444;
+ public int a15445;
+ public int a15446;
+ public int a15447;
+ public int a15448;
+ public int a15449;
+ public int a15450;
+ public int a15451;
+ public int a15452;
+ public int a15453;
+ public int a15454;
+ public int a15455;
+ public int a15456;
+ public int a15457;
+ public int a15458;
+ public int a15459;
+ public int a15460;
+ public int a15461;
+ public int a15462;
+ public int a15463;
+ public int a15464;
+ public int a15465;
+ public int a15466;
+ public int a15467;
+ public int a15468;
+ public int a15469;
+ public int a15470;
+ public int a15471;
+ public int a15472;
+ public int a15473;
+ public int a15474;
+ public int a15475;
+ public int a15476;
+ public int a15477;
+ public int a15478;
+ public int a15479;
+ public int a15480;
+ public int a15481;
+ public int a15482;
+ public int a15483;
+ public int a15484;
+ public int a15485;
+ public int a15486;
+ public int a15487;
+ public int a15488;
+ public int a15489;
+ public int a15490;
+ public int a15491;
+ public int a15492;
+ public int a15493;
+ public int a15494;
+ public int a15495;
+ public int a15496;
+ public int a15497;
+ public int a15498;
+ public int a15499;
+ public int a15500;
+ public int a15501;
+ public int a15502;
+ public int a15503;
+ public int a15504;
+ public int a15505;
+ public int a15506;
+ public int a15507;
+ public int a15508;
+ public int a15509;
+ public int a15510;
+ public int a15511;
+ public int a15512;
+ public int a15513;
+ public int a15514;
+ public int a15515;
+ public int a15516;
+ public int a15517;
+ public int a15518;
+ public int a15519;
+ public int a15520;
+ public int a15521;
+ public int a15522;
+ public int a15523;
+ public int a15524;
+ public int a15525;
+ public int a15526;
+ public int a15527;
+ public int a15528;
+ public int a15529;
+ public int a15530;
+ public int a15531;
+ public int a15532;
+ public int a15533;
+ public int a15534;
+ public int a15535;
+ public int a15536;
+ public int a15537;
+ public int a15538;
+ public int a15539;
+ public int a15540;
+ public int a15541;
+ public int a15542;
+ public int a15543;
+ public int a15544;
+ public int a15545;
+ public int a15546;
+ public int a15547;
+ public int a15548;
+ public int a15549;
+ public int a15550;
+ public int a15551;
+ public int a15552;
+ public int a15553;
+ public int a15554;
+ public int a15555;
+ public int a15556;
+ public int a15557;
+ public int a15558;
+ public int a15559;
+ public int a15560;
+ public int a15561;
+ public int a15562;
+ public int a15563;
+ public int a15564;
+ public int a15565;
+ public int a15566;
+ public int a15567;
+ public int a15568;
+ public int a15569;
+ public int a15570;
+ public int a15571;
+ public int a15572;
+ public int a15573;
+ public int a15574;
+ public int a15575;
+ public int a15576;
+ public int a15577;
+ public int a15578;
+ public int a15579;
+ public int a15580;
+ public int a15581;
+ public int a15582;
+ public int a15583;
+ public int a15584;
+ public int a15585;
+ public int a15586;
+ public int a15587;
+ public int a15588;
+ public int a15589;
+ public int a15590;
+ public int a15591;
+ public int a15592;
+ public int a15593;
+ public int a15594;
+ public int a15595;
+ public int a15596;
+ public int a15597;
+ public int a15598;
+ public int a15599;
+ public int a15600;
+ public int a15601;
+ public int a15602;
+ public int a15603;
+ public int a15604;
+ public int a15605;
+ public int a15606;
+ public int a15607;
+ public int a15608;
+ public int a15609;
+ public int a15610;
+ public int a15611;
+ public int a15612;
+ public int a15613;
+ public int a15614;
+ public int a15615;
+ public int a15616;
+ public int a15617;
+ public int a15618;
+ public int a15619;
+ public int a15620;
+ public int a15621;
+ public int a15622;
+ public int a15623;
+ public int a15624;
+ public int a15625;
+ public int a15626;
+ public int a15627;
+ public int a15628;
+ public int a15629;
+ public int a15630;
+ public int a15631;
+ public int a15632;
+ public int a15633;
+ public int a15634;
+ public int a15635;
+ public int a15636;
+ public int a15637;
+ public int a15638;
+ public int a15639;
+ public int a15640;
+ public int a15641;
+ public int a15642;
+ public int a15643;
+ public int a15644;
+ public int a15645;
+ public int a15646;
+ public int a15647;
+ public int a15648;
+ public int a15649;
+ public int a15650;
+ public int a15651;
+ public int a15652;
+ public int a15653;
+ public int a15654;
+ public int a15655;
+ public int a15656;
+ public int a15657;
+ public int a15658;
+ public int a15659;
+ public int a15660;
+ public int a15661;
+ public int a15662;
+ public int a15663;
+ public int a15664;
+ public int a15665;
+ public int a15666;
+ public int a15667;
+ public int a15668;
+ public int a15669;
+ public int a15670;
+ public int a15671;
+ public int a15672;
+ public int a15673;
+ public int a15674;
+ public int a15675;
+ public int a15676;
+ public int a15677;
+ public int a15678;
+ public int a15679;
+ public int a15680;
+ public int a15681;
+ public int a15682;
+ public int a15683;
+ public int a15684;
+ public int a15685;
+ public int a15686;
+ public int a15687;
+ public int a15688;
+ public int a15689;
+ public int a15690;
+ public int a15691;
+ public int a15692;
+ public int a15693;
+ public int a15694;
+ public int a15695;
+ public int a15696;
+ public int a15697;
+ public int a15698;
+ public int a15699;
+ public int a15700;
+ public int a15701;
+ public int a15702;
+ public int a15703;
+ public int a15704;
+ public int a15705;
+ public int a15706;
+ public int a15707;
+ public int a15708;
+ public int a15709;
+ public int a15710;
+ public int a15711;
+ public int a15712;
+ public int a15713;
+ public int a15714;
+ public int a15715;
+ public int a15716;
+ public int a15717;
+ public int a15718;
+ public int a15719;
+ public int a15720;
+ public int a15721;
+ public int a15722;
+ public int a15723;
+ public int a15724;
+ public int a15725;
+ public int a15726;
+ public int a15727;
+ public int a15728;
+ public int a15729;
+ public int a15730;
+ public int a15731;
+ public int a15732;
+ public int a15733;
+ public int a15734;
+ public int a15735;
+ public int a15736;
+ public int a15737;
+ public int a15738;
+ public int a15739;
+ public int a15740;
+ public int a15741;
+ public int a15742;
+ public int a15743;
+ public int a15744;
+ public int a15745;
+ public int a15746;
+ public int a15747;
+ public int a15748;
+ public int a15749;
+ public int a15750;
+ public int a15751;
+ public int a15752;
+ public int a15753;
+ public int a15754;
+ public int a15755;
+ public int a15756;
+ public int a15757;
+ public int a15758;
+ public int a15759;
+ public int a15760;
+ public int a15761;
+ public int a15762;
+ public int a15763;
+ public int a15764;
+ public int a15765;
+ public int a15766;
+ public int a15767;
+ public int a15768;
+ public int a15769;
+ public int a15770;
+ public int a15771;
+ public int a15772;
+ public int a15773;
+ public int a15774;
+ public int a15775;
+ public int a15776;
+ public int a15777;
+ public int a15778;
+ public int a15779;
+ public int a15780;
+ public int a15781;
+ public int a15782;
+ public int a15783;
+ public int a15784;
+ public int a15785;
+ public int a15786;
+ public int a15787;
+ public int a15788;
+ public int a15789;
+ public int a15790;
+ public int a15791;
+ public int a15792;
+ public int a15793;
+ public int a15794;
+ public int a15795;
+ public int a15796;
+ public int a15797;
+ public int a15798;
+ public int a15799;
+ public int a15800;
+ public int a15801;
+ public int a15802;
+ public int a15803;
+ public int a15804;
+ public int a15805;
+ public int a15806;
+ public int a15807;
+ public int a15808;
+ public int a15809;
+ public int a15810;
+ public int a15811;
+ public int a15812;
+ public int a15813;
+ public int a15814;
+ public int a15815;
+ public int a15816;
+ public int a15817;
+ public int a15818;
+ public int a15819;
+ public int a15820;
+ public int a15821;
+ public int a15822;
+ public int a15823;
+ public int a15824;
+ public int a15825;
+ public int a15826;
+ public int a15827;
+ public int a15828;
+ public int a15829;
+ public int a15830;
+ public int a15831;
+ public int a15832;
+ public int a15833;
+ public int a15834;
+ public int a15835;
+ public int a15836;
+ public int a15837;
+ public int a15838;
+ public int a15839;
+ public int a15840;
+ public int a15841;
+ public int a15842;
+ public int a15843;
+ public int a15844;
+ public int a15845;
+ public int a15846;
+ public int a15847;
+ public int a15848;
+ public int a15849;
+ public int a15850;
+ public int a15851;
+ public int a15852;
+ public int a15853;
+ public int a15854;
+ public int a15855;
+ public int a15856;
+ public int a15857;
+ public int a15858;
+ public int a15859;
+ public int a15860;
+ public int a15861;
+ public int a15862;
+ public int a15863;
+ public int a15864;
+ public int a15865;
+ public int a15866;
+ public int a15867;
+ public int a15868;
+ public int a15869;
+ public int a15870;
+ public int a15871;
+ public int a15872;
+ public int a15873;
+ public int a15874;
+ public int a15875;
+ public int a15876;
+ public int a15877;
+ public int a15878;
+ public int a15879;
+ public int a15880;
+ public int a15881;
+ public int a15882;
+ public int a15883;
+ public int a15884;
+ public int a15885;
+ public int a15886;
+ public int a15887;
+ public int a15888;
+ public int a15889;
+ public int a15890;
+ public int a15891;
+ public int a15892;
+ public int a15893;
+ public int a15894;
+ public int a15895;
+ public int a15896;
+ public int a15897;
+ public int a15898;
+ public int a15899;
+ public int a15900;
+ public int a15901;
+ public int a15902;
+ public int a15903;
+ public int a15904;
+ public int a15905;
+ public int a15906;
+ public int a15907;
+ public int a15908;
+ public int a15909;
+ public int a15910;
+ public int a15911;
+ public int a15912;
+ public int a15913;
+ public int a15914;
+ public int a15915;
+ public int a15916;
+ public int a15917;
+ public int a15918;
+ public int a15919;
+ public int a15920;
+ public int a15921;
+ public int a15922;
+ public int a15923;
+ public int a15924;
+ public int a15925;
+ public int a15926;
+ public int a15927;
+ public int a15928;
+ public int a15929;
+ public int a15930;
+ public int a15931;
+ public int a15932;
+ public int a15933;
+ public int a15934;
+ public int a15935;
+ public int a15936;
+ public int a15937;
+ public int a15938;
+ public int a15939;
+ public int a15940;
+ public int a15941;
+ public int a15942;
+ public int a15943;
+ public int a15944;
+ public int a15945;
+ public int a15946;
+ public int a15947;
+ public int a15948;
+ public int a15949;
+ public int a15950;
+ public int a15951;
+ public int a15952;
+ public int a15953;
+ public int a15954;
+ public int a15955;
+ public int a15956;
+ public int a15957;
+ public int a15958;
+ public int a15959;
+ public int a15960;
+ public int a15961;
+ public int a15962;
+ public int a15963;
+ public int a15964;
+ public int a15965;
+ public int a15966;
+ public int a15967;
+ public int a15968;
+ public int a15969;
+ public int a15970;
+ public int a15971;
+ public int a15972;
+ public int a15973;
+ public int a15974;
+ public int a15975;
+ public int a15976;
+ public int a15977;
+ public int a15978;
+ public int a15979;
+ public int a15980;
+ public int a15981;
+ public int a15982;
+ public int a15983;
+ public int a15984;
+ public int a15985;
+ public int a15986;
+ public int a15987;
+ public int a15988;
+ public int a15989;
+ public int a15990;
+ public int a15991;
+ public int a15992;
+ public int a15993;
+ public int a15994;
+ public int a15995;
+ public int a15996;
+ public int a15997;
+ public int a15998;
+ public int a15999;
+ public int a16000;
+ public int a16001;
+ public int a16002;
+ public int a16003;
+ public int a16004;
+ public int a16005;
+ public int a16006;
+ public int a16007;
+ public int a16008;
+ public int a16009;
+ public int a16010;
+ public int a16011;
+ public int a16012;
+ public int a16013;
+ public int a16014;
+ public int a16015;
+ public int a16016;
+ public int a16017;
+ public int a16018;
+ public int a16019;
+ public int a16020;
+ public int a16021;
+ public int a16022;
+ public int a16023;
+ public int a16024;
+ public int a16025;
+ public int a16026;
+ public int a16027;
+ public int a16028;
+ public int a16029;
+ public int a16030;
+ public int a16031;
+ public int a16032;
+ public int a16033;
+ public int a16034;
+ public int a16035;
+ public int a16036;
+ public int a16037;
+ public int a16038;
+ public int a16039;
+ public int a16040;
+ public int a16041;
+ public int a16042;
+ public int a16043;
+ public int a16044;
+ public int a16045;
+ public int a16046;
+ public int a16047;
+ public int a16048;
+ public int a16049;
+ public int a16050;
+ public int a16051;
+ public int a16052;
+ public int a16053;
+ public int a16054;
+ public int a16055;
+ public int a16056;
+ public int a16057;
+ public int a16058;
+ public int a16059;
+ public int a16060;
+ public int a16061;
+ public int a16062;
+ public int a16063;
+ public int a16064;
+ public int a16065;
+ public int a16066;
+ public int a16067;
+ public int a16068;
+ public int a16069;
+ public int a16070;
+ public int a16071;
+ public int a16072;
+ public int a16073;
+ public int a16074;
+ public int a16075;
+ public int a16076;
+ public int a16077;
+ public int a16078;
+ public int a16079;
+ public int a16080;
+ public int a16081;
+ public int a16082;
+ public int a16083;
+ public int a16084;
+ public int a16085;
+ public int a16086;
+ public int a16087;
+ public int a16088;
+ public int a16089;
+ public int a16090;
+ public int a16091;
+ public int a16092;
+ public int a16093;
+ public int a16094;
+ public int a16095;
+ public int a16096;
+ public int a16097;
+ public int a16098;
+ public int a16099;
+ public int a16100;
+ public int a16101;
+ public int a16102;
+ public int a16103;
+ public int a16104;
+ public int a16105;
+ public int a16106;
+ public int a16107;
+ public int a16108;
+ public int a16109;
+ public int a16110;
+ public int a16111;
+ public int a16112;
+ public int a16113;
+ public int a16114;
+ public int a16115;
+ public int a16116;
+ public int a16117;
+ public int a16118;
+ public int a16119;
+ public int a16120;
+ public int a16121;
+ public int a16122;
+ public int a16123;
+ public int a16124;
+ public int a16125;
+ public int a16126;
+ public int a16127;
+ public int a16128;
+ public int a16129;
+ public int a16130;
+ public int a16131;
+ public int a16132;
+ public int a16133;
+ public int a16134;
+ public int a16135;
+ public int a16136;
+ public int a16137;
+ public int a16138;
+ public int a16139;
+ public int a16140;
+ public int a16141;
+ public int a16142;
+ public int a16143;
+ public int a16144;
+ public int a16145;
+ public int a16146;
+ public int a16147;
+ public int a16148;
+ public int a16149;
+ public int a16150;
+ public int a16151;
+ public int a16152;
+ public int a16153;
+ public int a16154;
+ public int a16155;
+ public int a16156;
+ public int a16157;
+ public int a16158;
+ public int a16159;
+ public int a16160;
+ public int a16161;
+ public int a16162;
+ public int a16163;
+ public int a16164;
+ public int a16165;
+ public int a16166;
+ public int a16167;
+ public int a16168;
+ public int a16169;
+ public int a16170;
+ public int a16171;
+ public int a16172;
+ public int a16173;
+ public int a16174;
+ public int a16175;
+ public int a16176;
+ public int a16177;
+ public int a16178;
+ public int a16179;
+ public int a16180;
+ public int a16181;
+ public int a16182;
+ public int a16183;
+ public int a16184;
+ public int a16185;
+ public int a16186;
+ public int a16187;
+ public int a16188;
+ public int a16189;
+ public int a16190;
+ public int a16191;
+ public int a16192;
+ public int a16193;
+ public int a16194;
+ public int a16195;
+ public int a16196;
+ public int a16197;
+ public int a16198;
+ public int a16199;
+ public int a16200;
+ public int a16201;
+ public int a16202;
+ public int a16203;
+ public int a16204;
+ public int a16205;
+ public int a16206;
+ public int a16207;
+ public int a16208;
+ public int a16209;
+ public int a16210;
+ public int a16211;
+ public int a16212;
+ public int a16213;
+ public int a16214;
+ public int a16215;
+ public int a16216;
+ public int a16217;
+ public int a16218;
+ public int a16219;
+ public int a16220;
+ public int a16221;
+ public int a16222;
+ public int a16223;
+ public int a16224;
+ public int a16225;
+ public int a16226;
+ public int a16227;
+ public int a16228;
+ public int a16229;
+ public int a16230;
+ public int a16231;
+ public int a16232;
+ public int a16233;
+ public int a16234;
+ public int a16235;
+ public int a16236;
+ public int a16237;
+ public int a16238;
+ public int a16239;
+ public int a16240;
+ public int a16241;
+ public int a16242;
+ public int a16243;
+ public int a16244;
+ public int a16245;
+ public int a16246;
+ public int a16247;
+ public int a16248;
+ public int a16249;
+ public int a16250;
+ public int a16251;
+ public int a16252;
+ public int a16253;
+ public int a16254;
+ public int a16255;
+ public int a16256;
+ public int a16257;
+ public int a16258;
+ public int a16259;
+ public int a16260;
+ public int a16261;
+ public int a16262;
+ public int a16263;
+ public int a16264;
+ public int a16265;
+ public int a16266;
+ public int a16267;
+ public int a16268;
+ public int a16269;
+ public int a16270;
+ public int a16271;
+ public int a16272;
+ public int a16273;
+ public int a16274;
+ public int a16275;
+ public int a16276;
+ public int a16277;
+ public int a16278;
+ public int a16279;
+ public int a16280;
+ public int a16281;
+ public int a16282;
+ public int a16283;
+ public int a16284;
+ public int a16285;
+ public int a16286;
+ public int a16287;
+ public int a16288;
+ public int a16289;
+ public int a16290;
+ public int a16291;
+ public int a16292;
+ public int a16293;
+ public int a16294;
+ public int a16295;
+ public int a16296;
+ public int a16297;
+ public int a16298;
+ public int a16299;
+ public int a16300;
+ public int a16301;
+ public int a16302;
+ public int a16303;
+ public int a16304;
+ public int a16305;
+ public int a16306;
+ public int a16307;
+ public int a16308;
+ public int a16309;
+ public int a16310;
+ public int a16311;
+ public int a16312;
+ public int a16313;
+ public int a16314;
+ public int a16315;
+ public int a16316;
+ public int a16317;
+ public int a16318;
+ public int a16319;
+ public int a16320;
+ public int a16321;
+ public int a16322;
+ public int a16323;
+ public int a16324;
+ public int a16325;
+ public int a16326;
+ public int a16327;
+ public int a16328;
+ public int a16329;
+ public int a16330;
+ public int a16331;
+ public int a16332;
+ public int a16333;
+ public int a16334;
+ public int a16335;
+ public int a16336;
+ public int a16337;
+ public int a16338;
+ public int a16339;
+ public int a16340;
+ public int a16341;
+ public int a16342;
+ public int a16343;
+ public int a16344;
+ public int a16345;
+ public int a16346;
+ public int a16347;
+ public int a16348;
+ public int a16349;
+ public int a16350;
+ public int a16351;
+ public int a16352;
+ public int a16353;
+ public int a16354;
+ public int a16355;
+ public int a16356;
+ public int a16357;
+ public int a16358;
+ public int a16359;
+ public int a16360;
+ public int a16361;
+ public int a16362;
+ public int a16363;
+ public int a16364;
+ public int a16365;
+ public int a16366;
+ public int a16367;
+ public int a16368;
+ public int a16369;
+ public int a16370;
+ public int a16371;
+ public int a16372;
+ public int a16373;
+ public int a16374;
+ public int a16375;
+ public int a16376;
+ public int a16377;
+ public int a16378;
+ public int a16379;
+ public int a16380;
+ public int a16381;
+ public int a16382;
+ public int a16383;
+ public int a16384;
+ public int a16385;
+ public int a16386;
+ public int a16387;
+ public int a16388;
+ public int a16389;
+ public int a16390;
+ public int a16391;
+ public int a16392;
+ public int a16393;
+ public int a16394;
+ public int a16395;
+ public int a16396;
+ public int a16397;
+ public int a16398;
+ public int a16399;
+ public int a16400;
+ public int a16401;
+ public int a16402;
+ public int a16403;
+ public int a16404;
+ public int a16405;
+ public int a16406;
+ public int a16407;
+ public int a16408;
+ public int a16409;
+ public int a16410;
+ public int a16411;
+ public int a16412;
+ public int a16413;
+ public int a16414;
+ public int a16415;
+ public int a16416;
+ public int a16417;
+ public int a16418;
+ public int a16419;
+ public int a16420;
+ public int a16421;
+ public int a16422;
+ public int a16423;
+ public int a16424;
+ public int a16425;
+ public int a16426;
+ public int a16427;
+ public int a16428;
+ public int a16429;
+ public int a16430;
+ public int a16431;
+ public int a16432;
+ public int a16433;
+ public int a16434;
+ public int a16435;
+ public int a16436;
+ public int a16437;
+ public int a16438;
+ public int a16439;
+ public int a16440;
+ public int a16441;
+ public int a16442;
+ public int a16443;
+ public int a16444;
+ public int a16445;
+ public int a16446;
+ public int a16447;
+ public int a16448;
+ public int a16449;
+ public int a16450;
+ public int a16451;
+ public int a16452;
+ public int a16453;
+ public int a16454;
+ public int a16455;
+ public int a16456;
+ public int a16457;
+ public int a16458;
+ public int a16459;
+ public int a16460;
+ public int a16461;
+ public int a16462;
+ public int a16463;
+ public int a16464;
+ public int a16465;
+ public int a16466;
+ public int a16467;
+ public int a16468;
+ public int a16469;
+ public int a16470;
+ public int a16471;
+ public int a16472;
+ public int a16473;
+ public int a16474;
+ public int a16475;
+ public int a16476;
+ public int a16477;
+ public int a16478;
+ public int a16479;
+ public int a16480;
+ public int a16481;
+ public int a16482;
+ public int a16483;
+ public int a16484;
+ public int a16485;
+ public int a16486;
+ public int a16487;
+ public int a16488;
+ public int a16489;
+ public int a16490;
+ public int a16491;
+ public int a16492;
+ public int a16493;
+ public int a16494;
+ public int a16495;
+ public int a16496;
+ public int a16497;
+ public int a16498;
+ public int a16499;
+ public int a16500;
+ public int a16501;
+ public int a16502;
+ public int a16503;
+ public int a16504;
+ public int a16505;
+ public int a16506;
+ public int a16507;
+ public int a16508;
+ public int a16509;
+ public int a16510;
+ public int a16511;
+ public int a16512;
+ public int a16513;
+ public int a16514;
+ public int a16515;
+ public int a16516;
+ public int a16517;
+ public int a16518;
+ public int a16519;
+ public int a16520;
+ public int a16521;
+ public int a16522;
+ public int a16523;
+ public int a16524;
+ public int a16525;
+ public int a16526;
+ public int a16527;
+ public int a16528;
+ public int a16529;
+ public int a16530;
+ public int a16531;
+ public int a16532;
+ public int a16533;
+ public int a16534;
+ public int a16535;
+ public int a16536;
+ public int a16537;
+ public int a16538;
+ public int a16539;
+ public int a16540;
+ public int a16541;
+ public int a16542;
+ public int a16543;
+ public int a16544;
+ public int a16545;
+ public int a16546;
+ public int a16547;
+ public int a16548;
+ public int a16549;
+ public int a16550;
+ public int a16551;
+ public int a16552;
+ public int a16553;
+ public int a16554;
+ public int a16555;
+ public int a16556;
+ public int a16557;
+ public int a16558;
+ public int a16559;
+ public int a16560;
+ public int a16561;
+ public int a16562;
+ public int a16563;
+ public int a16564;
+ public int a16565;
+ public int a16566;
+ public int a16567;
+ public int a16568;
+ public int a16569;
+ public int a16570;
+ public int a16571;
+ public int a16572;
+ public int a16573;
+ public int a16574;
+ public int a16575;
+ public int a16576;
+ public int a16577;
+ public int a16578;
+ public int a16579;
+ public int a16580;
+ public int a16581;
+ public int a16582;
+ public int a16583;
+ public int a16584;
+ public int a16585;
+ public int a16586;
+ public int a16587;
+ public int a16588;
+ public int a16589;
+ public int a16590;
+ public int a16591;
+ public int a16592;
+ public int a16593;
+ public int a16594;
+ public int a16595;
+ public int a16596;
+ public int a16597;
+ public int a16598;
+ public int a16599;
+ public int a16600;
+ public int a16601;
+ public int a16602;
+ public int a16603;
+ public int a16604;
+ public int a16605;
+ public int a16606;
+ public int a16607;
+ public int a16608;
+ public int a16609;
+ public int a16610;
+ public int a16611;
+ public int a16612;
+ public int a16613;
+ public int a16614;
+ public int a16615;
+ public int a16616;
+ public int a16617;
+ public int a16618;
+ public int a16619;
+ public int a16620;
+ public int a16621;
+ public int a16622;
+ public int a16623;
+ public int a16624;
+ public int a16625;
+ public int a16626;
+ public int a16627;
+ public int a16628;
+ public int a16629;
+ public int a16630;
+ public int a16631;
+ public int a16632;
+ public int a16633;
+ public int a16634;
+ public int a16635;
+ public int a16636;
+ public int a16637;
+ public int a16638;
+ public int a16639;
+ public int a16640;
+ public int a16641;
+ public int a16642;
+ public int a16643;
+ public int a16644;
+ public int a16645;
+ public int a16646;
+ public int a16647;
+ public int a16648;
+ public int a16649;
+ public int a16650;
+ public int a16651;
+ public int a16652;
+ public int a16653;
+ public int a16654;
+ public int a16655;
+ public int a16656;
+ public int a16657;
+ public int a16658;
+ public int a16659;
+ public int a16660;
+ public int a16661;
+ public int a16662;
+ public int a16663;
+ public int a16664;
+ public int a16665;
+ public int a16666;
+ public int a16667;
+ public int a16668;
+ public int a16669;
+ public int a16670;
+ public int a16671;
+ public int a16672;
+ public int a16673;
+ public int a16674;
+ public int a16675;
+ public int a16676;
+ public int a16677;
+ public int a16678;
+ public int a16679;
+ public int a16680;
+ public int a16681;
+ public int a16682;
+ public int a16683;
+ public int a16684;
+ public int a16685;
+ public int a16686;
+ public int a16687;
+ public int a16688;
+ public int a16689;
+ public int a16690;
+ public int a16691;
+ public int a16692;
+ public int a16693;
+ public int a16694;
+ public int a16695;
+ public int a16696;
+ public int a16697;
+ public int a16698;
+ public int a16699;
+ public int a16700;
+ public int a16701;
+ public int a16702;
+ public int a16703;
+ public int a16704;
+ public int a16705;
+ public int a16706;
+ public int a16707;
+ public int a16708;
+ public int a16709;
+ public int a16710;
+ public int a16711;
+ public int a16712;
+ public int a16713;
+ public int a16714;
+ public int a16715;
+ public int a16716;
+ public int a16717;
+ public int a16718;
+ public int a16719;
+ public int a16720;
+ public int a16721;
+ public int a16722;
+ public int a16723;
+ public int a16724;
+ public int a16725;
+ public int a16726;
+ public int a16727;
+ public int a16728;
+ public int a16729;
+ public int a16730;
+ public int a16731;
+ public int a16732;
+ public int a16733;
+ public int a16734;
+ public int a16735;
+ public int a16736;
+ public int a16737;
+ public int a16738;
+ public int a16739;
+ public int a16740;
+ public int a16741;
+ public int a16742;
+ public int a16743;
+ public int a16744;
+ public int a16745;
+ public int a16746;
+ public int a16747;
+ public int a16748;
+ public int a16749;
+ public int a16750;
+ public int a16751;
+ public int a16752;
+ public int a16753;
+ public int a16754;
+ public int a16755;
+ public int a16756;
+ public int a16757;
+ public int a16758;
+ public int a16759;
+ public int a16760;
+ public int a16761;
+ public int a16762;
+ public int a16763;
+ public int a16764;
+ public int a16765;
+ public int a16766;
+ public int a16767;
+ public int a16768;
+ public int a16769;
+ public int a16770;
+ public int a16771;
+ public int a16772;
+ public int a16773;
+ public int a16774;
+ public int a16775;
+ public int a16776;
+ public int a16777;
+ public int a16778;
+ public int a16779;
+ public int a16780;
+ public int a16781;
+ public int a16782;
+ public int a16783;
+ public int a16784;
+ public int a16785;
+ public int a16786;
+ public int a16787;
+ public int a16788;
+ public int a16789;
+ public int a16790;
+ public int a16791;
+ public int a16792;
+ public int a16793;
+ public int a16794;
+ public int a16795;
+ public int a16796;
+ public int a16797;
+ public int a16798;
+ public int a16799;
+ public int a16800;
+ public int a16801;
+ public int a16802;
+ public int a16803;
+ public int a16804;
+ public int a16805;
+ public int a16806;
+ public int a16807;
+ public int a16808;
+ public int a16809;
+ public int a16810;
+ public int a16811;
+ public int a16812;
+ public int a16813;
+ public int a16814;
+ public int a16815;
+ public int a16816;
+ public int a16817;
+ public int a16818;
+ public int a16819;
+ public int a16820;
+ public int a16821;
+ public int a16822;
+ public int a16823;
+ public int a16824;
+ public int a16825;
+ public int a16826;
+ public int a16827;
+ public int a16828;
+ public int a16829;
+ public int a16830;
+ public int a16831;
+ public int a16832;
+ public int a16833;
+ public int a16834;
+ public int a16835;
+ public int a16836;
+ public int a16837;
+ public int a16838;
+ public int a16839;
+ public int a16840;
+ public int a16841;
+ public int a16842;
+ public int a16843;
+ public int a16844;
+ public int a16845;
+ public int a16846;
+ public int a16847;
+ public int a16848;
+ public int a16849;
+ public int a16850;
+ public int a16851;
+ public int a16852;
+ public int a16853;
+ public int a16854;
+ public int a16855;
+ public int a16856;
+ public int a16857;
+ public int a16858;
+ public int a16859;
+ public int a16860;
+ public int a16861;
+ public int a16862;
+ public int a16863;
+ public int a16864;
+ public int a16865;
+ public int a16866;
+ public int a16867;
+ public int a16868;
+ public int a16869;
+ public int a16870;
+ public int a16871;
+ public int a16872;
+ public int a16873;
+ public int a16874;
+ public int a16875;
+ public int a16876;
+ public int a16877;
+ public int a16878;
+ public int a16879;
+ public int a16880;
+ public int a16881;
+ public int a16882;
+ public int a16883;
+ public int a16884;
+ public int a16885;
+ public int a16886;
+ public int a16887;
+ public int a16888;
+ public int a16889;
+ public int a16890;
+ public int a16891;
+ public int a16892;
+ public int a16893;
+ public int a16894;
+ public int a16895;
+ public int a16896;
+ public int a16897;
+ public int a16898;
+ public int a16899;
+ public int a16900;
+ public int a16901;
+ public int a16902;
+ public int a16903;
+ public int a16904;
+ public int a16905;
+ public int a16906;
+ public int a16907;
+ public int a16908;
+ public int a16909;
+ public int a16910;
+ public int a16911;
+ public int a16912;
+ public int a16913;
+ public int a16914;
+ public int a16915;
+ public int a16916;
+ public int a16917;
+ public int a16918;
+ public int a16919;
+ public int a16920;
+ public int a16921;
+ public int a16922;
+ public int a16923;
+ public int a16924;
+ public int a16925;
+ public int a16926;
+ public int a16927;
+ public int a16928;
+ public int a16929;
+ public int a16930;
+ public int a16931;
+ public int a16932;
+ public int a16933;
+ public int a16934;
+ public int a16935;
+ public int a16936;
+ public int a16937;
+ public int a16938;
+ public int a16939;
+ public int a16940;
+ public int a16941;
+ public int a16942;
+ public int a16943;
+ public int a16944;
+ public int a16945;
+ public int a16946;
+ public int a16947;
+ public int a16948;
+ public int a16949;
+ public int a16950;
+ public int a16951;
+ public int a16952;
+ public int a16953;
+ public int a16954;
+ public int a16955;
+ public int a16956;
+ public int a16957;
+ public int a16958;
+ public int a16959;
+ public int a16960;
+ public int a16961;
+ public int a16962;
+ public int a16963;
+ public int a16964;
+ public int a16965;
+ public int a16966;
+ public int a16967;
+ public int a16968;
+ public int a16969;
+ public int a16970;
+ public int a16971;
+ public int a16972;
+ public int a16973;
+ public int a16974;
+ public int a16975;
+ public int a16976;
+ public int a16977;
+ public int a16978;
+ public int a16979;
+ public int a16980;
+ public int a16981;
+ public int a16982;
+ public int a16983;
+ public int a16984;
+ public int a16985;
+ public int a16986;
+ public int a16987;
+ public int a16988;
+ public int a16989;
+ public int a16990;
+ public int a16991;
+ public int a16992;
+ public int a16993;
+ public int a16994;
+ public int a16995;
+ public int a16996;
+ public int a16997;
+ public int a16998;
+ public int a16999;
+ public int a17000;
+ public int a17001;
+ public int a17002;
+ public int a17003;
+ public int a17004;
+ public int a17005;
+ public int a17006;
+ public int a17007;
+ public int a17008;
+ public int a17009;
+ public int a17010;
+ public int a17011;
+ public int a17012;
+ public int a17013;
+ public int a17014;
+ public int a17015;
+ public int a17016;
+ public int a17017;
+ public int a17018;
+ public int a17019;
+ public int a17020;
+ public int a17021;
+ public int a17022;
+ public int a17023;
+ public int a17024;
+ public int a17025;
+ public int a17026;
+ public int a17027;
+ public int a17028;
+ public int a17029;
+ public int a17030;
+ public int a17031;
+ public int a17032;
+ public int a17033;
+ public int a17034;
+ public int a17035;
+ public int a17036;
+ public int a17037;
+ public int a17038;
+ public int a17039;
+ public int a17040;
+ public int a17041;
+ public int a17042;
+ public int a17043;
+ public int a17044;
+ public int a17045;
+ public int a17046;
+ public int a17047;
+ public int a17048;
+ public int a17049;
+ public int a17050;
+ public int a17051;
+ public int a17052;
+ public int a17053;
+ public int a17054;
+ public int a17055;
+ public int a17056;
+ public int a17057;
+ public int a17058;
+ public int a17059;
+ public int a17060;
+ public int a17061;
+ public int a17062;
+ public int a17063;
+ public int a17064;
+ public int a17065;
+ public int a17066;
+ public int a17067;
+ public int a17068;
+ public int a17069;
+ public int a17070;
+ public int a17071;
+ public int a17072;
+ public int a17073;
+ public int a17074;
+ public int a17075;
+ public int a17076;
+ public int a17077;
+ public int a17078;
+ public int a17079;
+ public int a17080;
+ public int a17081;
+ public int a17082;
+ public int a17083;
+ public int a17084;
+ public int a17085;
+ public int a17086;
+ public int a17087;
+ public int a17088;
+ public int a17089;
+ public int a17090;
+ public int a17091;
+ public int a17092;
+ public int a17093;
+ public int a17094;
+ public int a17095;
+ public int a17096;
+ public int a17097;
+ public int a17098;
+ public int a17099;
+ public int a17100;
+ public int a17101;
+ public int a17102;
+ public int a17103;
+ public int a17104;
+ public int a17105;
+ public int a17106;
+ public int a17107;
+ public int a17108;
+ public int a17109;
+ public int a17110;
+ public int a17111;
+ public int a17112;
+ public int a17113;
+ public int a17114;
+ public int a17115;
+ public int a17116;
+ public int a17117;
+ public int a17118;
+ public int a17119;
+ public int a17120;
+ public int a17121;
+ public int a17122;
+ public int a17123;
+ public int a17124;
+ public int a17125;
+ public int a17126;
+ public int a17127;
+ public int a17128;
+ public int a17129;
+ public int a17130;
+ public int a17131;
+ public int a17132;
+ public int a17133;
+ public int a17134;
+ public int a17135;
+ public int a17136;
+ public int a17137;
+ public int a17138;
+ public int a17139;
+ public int a17140;
+ public int a17141;
+ public int a17142;
+ public int a17143;
+ public int a17144;
+ public int a17145;
+ public int a17146;
+ public int a17147;
+ public int a17148;
+ public int a17149;
+ public int a17150;
+ public int a17151;
+ public int a17152;
+ public int a17153;
+ public int a17154;
+ public int a17155;
+ public int a17156;
+ public int a17157;
+ public int a17158;
+ public int a17159;
+ public int a17160;
+ public int a17161;
+ public int a17162;
+ public int a17163;
+ public int a17164;
+ public int a17165;
+ public int a17166;
+ public int a17167;
+ public int a17168;
+ public int a17169;
+ public int a17170;
+ public int a17171;
+ public int a17172;
+ public int a17173;
+ public int a17174;
+ public int a17175;
+ public int a17176;
+ public int a17177;
+ public int a17178;
+ public int a17179;
+ public int a17180;
+ public int a17181;
+ public int a17182;
+ public int a17183;
+ public int a17184;
+ public int a17185;
+ public int a17186;
+ public int a17187;
+ public int a17188;
+ public int a17189;
+ public int a17190;
+ public int a17191;
+ public int a17192;
+ public int a17193;
+ public int a17194;
+ public int a17195;
+ public int a17196;
+ public int a17197;
+ public int a17198;
+ public int a17199;
+ public int a17200;
+ public int a17201;
+ public int a17202;
+ public int a17203;
+ public int a17204;
+ public int a17205;
+ public int a17206;
+ public int a17207;
+ public int a17208;
+ public int a17209;
+ public int a17210;
+ public int a17211;
+ public int a17212;
+ public int a17213;
+ public int a17214;
+ public int a17215;
+ public int a17216;
+ public int a17217;
+ public int a17218;
+ public int a17219;
+ public int a17220;
+ public int a17221;
+ public int a17222;
+ public int a17223;
+ public int a17224;
+ public int a17225;
+ public int a17226;
+ public int a17227;
+ public int a17228;
+ public int a17229;
+ public int a17230;
+ public int a17231;
+ public int a17232;
+ public int a17233;
+ public int a17234;
+ public int a17235;
+ public int a17236;
+ public int a17237;
+ public int a17238;
+ public int a17239;
+ public int a17240;
+ public int a17241;
+ public int a17242;
+ public int a17243;
+ public int a17244;
+ public int a17245;
+ public int a17246;
+ public int a17247;
+ public int a17248;
+ public int a17249;
+ public int a17250;
+ public int a17251;
+ public int a17252;
+ public int a17253;
+ public int a17254;
+ public int a17255;
+ public int a17256;
+ public int a17257;
+ public int a17258;
+ public int a17259;
+ public int a17260;
+ public int a17261;
+ public int a17262;
+ public int a17263;
+ public int a17264;
+ public int a17265;
+ public int a17266;
+ public int a17267;
+ public int a17268;
+ public int a17269;
+ public int a17270;
+ public int a17271;
+ public int a17272;
+ public int a17273;
+ public int a17274;
+ public int a17275;
+ public int a17276;
+ public int a17277;
+ public int a17278;
+ public int a17279;
+ public int a17280;
+ public int a17281;
+ public int a17282;
+ public int a17283;
+ public int a17284;
+ public int a17285;
+ public int a17286;
+ public int a17287;
+ public int a17288;
+ public int a17289;
+ public int a17290;
+ public int a17291;
+ public int a17292;
+ public int a17293;
+ public int a17294;
+ public int a17295;
+ public int a17296;
+ public int a17297;
+ public int a17298;
+ public int a17299;
+ public int a17300;
+ public int a17301;
+ public int a17302;
+ public int a17303;
+ public int a17304;
+ public int a17305;
+ public int a17306;
+ public int a17307;
+ public int a17308;
+ public int a17309;
+ public int a17310;
+ public int a17311;
+ public int a17312;
+ public int a17313;
+ public int a17314;
+ public int a17315;
+ public int a17316;
+ public int a17317;
+ public int a17318;
+ public int a17319;
+ public int a17320;
+ public int a17321;
+ public int a17322;
+ public int a17323;
+ public int a17324;
+ public int a17325;
+ public int a17326;
+ public int a17327;
+ public int a17328;
+ public int a17329;
+ public int a17330;
+ public int a17331;
+ public int a17332;
+ public int a17333;
+ public int a17334;
+ public int a17335;
+ public int a17336;
+ public int a17337;
+ public int a17338;
+ public int a17339;
+ public int a17340;
+ public int a17341;
+ public int a17342;
+ public int a17343;
+ public int a17344;
+ public int a17345;
+ public int a17346;
+ public int a17347;
+ public int a17348;
+ public int a17349;
+ public int a17350;
+ public int a17351;
+ public int a17352;
+ public int a17353;
+ public int a17354;
+ public int a17355;
+ public int a17356;
+ public int a17357;
+ public int a17358;
+ public int a17359;
+ public int a17360;
+ public int a17361;
+ public int a17362;
+ public int a17363;
+ public int a17364;
+ public int a17365;
+ public int a17366;
+ public int a17367;
+ public int a17368;
+ public int a17369;
+ public int a17370;
+ public int a17371;
+ public int a17372;
+ public int a17373;
+ public int a17374;
+ public int a17375;
+ public int a17376;
+ public int a17377;
+ public int a17378;
+ public int a17379;
+ public int a17380;
+ public int a17381;
+ public int a17382;
+ public int a17383;
+ public int a17384;
+ public int a17385;
+ public int a17386;
+ public int a17387;
+ public int a17388;
+ public int a17389;
+ public int a17390;
+ public int a17391;
+ public int a17392;
+ public int a17393;
+ public int a17394;
+ public int a17395;
+ public int a17396;
+ public int a17397;
+ public int a17398;
+ public int a17399;
+ public int a17400;
+ public int a17401;
+ public int a17402;
+ public int a17403;
+ public int a17404;
+ public int a17405;
+ public int a17406;
+ public int a17407;
+ public int a17408;
+ public int a17409;
+ public int a17410;
+ public int a17411;
+ public int a17412;
+ public int a17413;
+ public int a17414;
+ public int a17415;
+ public int a17416;
+ public int a17417;
+ public int a17418;
+ public int a17419;
+ public int a17420;
+ public int a17421;
+ public int a17422;
+ public int a17423;
+ public int a17424;
+ public int a17425;
+ public int a17426;
+ public int a17427;
+ public int a17428;
+ public int a17429;
+ public int a17430;
+ public int a17431;
+ public int a17432;
+ public int a17433;
+ public int a17434;
+ public int a17435;
+ public int a17436;
+ public int a17437;
+ public int a17438;
+ public int a17439;
+ public int a17440;
+ public int a17441;
+ public int a17442;
+ public int a17443;
+ public int a17444;
+ public int a17445;
+ public int a17446;
+ public int a17447;
+ public int a17448;
+ public int a17449;
+ public int a17450;
+ public int a17451;
+ public int a17452;
+ public int a17453;
+ public int a17454;
+ public int a17455;
+ public int a17456;
+ public int a17457;
+ public int a17458;
+ public int a17459;
+ public int a17460;
+ public int a17461;
+ public int a17462;
+ public int a17463;
+ public int a17464;
+ public int a17465;
+ public int a17466;
+ public int a17467;
+ public int a17468;
+ public int a17469;
+ public int a17470;
+ public int a17471;
+ public int a17472;
+ public int a17473;
+ public int a17474;
+ public int a17475;
+ public int a17476;
+ public int a17477;
+ public int a17478;
+ public int a17479;
+ public int a17480;
+ public int a17481;
+ public int a17482;
+ public int a17483;
+ public int a17484;
+ public int a17485;
+ public int a17486;
+ public int a17487;
+ public int a17488;
+ public int a17489;
+ public int a17490;
+ public int a17491;
+ public int a17492;
+ public int a17493;
+ public int a17494;
+ public int a17495;
+ public int a17496;
+ public int a17497;
+ public int a17498;
+ public int a17499;
+ public int a17500;
+ public int a17501;
+ public int a17502;
+ public int a17503;
+ public int a17504;
+ public int a17505;
+ public int a17506;
+ public int a17507;
+ public int a17508;
+ public int a17509;
+ public int a17510;
+ public int a17511;
+ public int a17512;
+ public int a17513;
+ public int a17514;
+ public int a17515;
+ public int a17516;
+ public int a17517;
+ public int a17518;
+ public int a17519;
+ public int a17520;
+ public int a17521;
+ public int a17522;
+ public int a17523;
+ public int a17524;
+ public int a17525;
+ public int a17526;
+ public int a17527;
+ public int a17528;
+ public int a17529;
+ public int a17530;
+ public int a17531;
+ public int a17532;
+ public int a17533;
+ public int a17534;
+ public int a17535;
+ public int a17536;
+ public int a17537;
+ public int a17538;
+ public int a17539;
+ public int a17540;
+ public int a17541;
+ public int a17542;
+ public int a17543;
+ public int a17544;
+ public int a17545;
+ public int a17546;
+ public int a17547;
+ public int a17548;
+ public int a17549;
+ public int a17550;
+ public int a17551;
+ public int a17552;
+ public int a17553;
+ public int a17554;
+ public int a17555;
+ public int a17556;
+ public int a17557;
+ public int a17558;
+ public int a17559;
+ public int a17560;
+ public int a17561;
+ public int a17562;
+ public int a17563;
+ public int a17564;
+ public int a17565;
+ public int a17566;
+ public int a17567;
+ public int a17568;
+ public int a17569;
+ public int a17570;
+ public int a17571;
+ public int a17572;
+ public int a17573;
+ public int a17574;
+ public int a17575;
+ public int a17576;
+ public int a17577;
+ public int a17578;
+ public int a17579;
+ public int a17580;
+ public int a17581;
+ public int a17582;
+ public int a17583;
+ public int a17584;
+ public int a17585;
+ public int a17586;
+ public int a17587;
+ public int a17588;
+ public int a17589;
+ public int a17590;
+ public int a17591;
+ public int a17592;
+ public int a17593;
+ public int a17594;
+ public int a17595;
+ public int a17596;
+ public int a17597;
+ public int a17598;
+ public int a17599;
+ public int a17600;
+ public int a17601;
+ public int a17602;
+ public int a17603;
+ public int a17604;
+ public int a17605;
+ public int a17606;
+ public int a17607;
+ public int a17608;
+ public int a17609;
+ public int a17610;
+ public int a17611;
+ public int a17612;
+ public int a17613;
+ public int a17614;
+ public int a17615;
+ public int a17616;
+ public int a17617;
+ public int a17618;
+ public int a17619;
+ public int a17620;
+ public int a17621;
+ public int a17622;
+ public int a17623;
+ public int a17624;
+ public int a17625;
+ public int a17626;
+ public int a17627;
+ public int a17628;
+ public int a17629;
+ public int a17630;
+ public int a17631;
+ public int a17632;
+ public int a17633;
+ public int a17634;
+ public int a17635;
+ public int a17636;
+ public int a17637;
+ public int a17638;
+ public int a17639;
+ public int a17640;
+ public int a17641;
+ public int a17642;
+ public int a17643;
+ public int a17644;
+ public int a17645;
+ public int a17646;
+ public int a17647;
+ public int a17648;
+ public int a17649;
+ public int a17650;
+ public int a17651;
+ public int a17652;
+ public int a17653;
+ public int a17654;
+ public int a17655;
+ public int a17656;
+ public int a17657;
+ public int a17658;
+ public int a17659;
+ public int a17660;
+ public int a17661;
+ public int a17662;
+ public int a17663;
+ public int a17664;
+ public int a17665;
+ public int a17666;
+ public int a17667;
+ public int a17668;
+ public int a17669;
+ public int a17670;
+ public int a17671;
+ public int a17672;
+ public int a17673;
+ public int a17674;
+ public int a17675;
+ public int a17676;
+ public int a17677;
+ public int a17678;
+ public int a17679;
+ public int a17680;
+ public int a17681;
+ public int a17682;
+ public int a17683;
+ public int a17684;
+ public int a17685;
+ public int a17686;
+ public int a17687;
+ public int a17688;
+ public int a17689;
+ public int a17690;
+ public int a17691;
+ public int a17692;
+ public int a17693;
+ public int a17694;
+ public int a17695;
+ public int a17696;
+ public int a17697;
+ public int a17698;
+ public int a17699;
+ public int a17700;
+ public int a17701;
+ public int a17702;
+ public int a17703;
+ public int a17704;
+ public int a17705;
+ public int a17706;
+ public int a17707;
+ public int a17708;
+ public int a17709;
+ public int a17710;
+ public int a17711;
+ public int a17712;
+ public int a17713;
+ public int a17714;
+ public int a17715;
+ public int a17716;
+ public int a17717;
+ public int a17718;
+ public int a17719;
+ public int a17720;
+ public int a17721;
+ public int a17722;
+ public int a17723;
+ public int a17724;
+ public int a17725;
+ public int a17726;
+ public int a17727;
+ public int a17728;
+ public int a17729;
+ public int a17730;
+ public int a17731;
+ public int a17732;
+ public int a17733;
+ public int a17734;
+ public int a17735;
+ public int a17736;
+ public int a17737;
+ public int a17738;
+ public int a17739;
+ public int a17740;
+ public int a17741;
+ public int a17742;
+ public int a17743;
+ public int a17744;
+ public int a17745;
+ public int a17746;
+ public int a17747;
+ public int a17748;
+ public int a17749;
+ public int a17750;
+ public int a17751;
+ public int a17752;
+ public int a17753;
+ public int a17754;
+ public int a17755;
+ public int a17756;
+ public int a17757;
+ public int a17758;
+ public int a17759;
+ public int a17760;
+ public int a17761;
+ public int a17762;
+ public int a17763;
+ public int a17764;
+ public int a17765;
+ public int a17766;
+ public int a17767;
+ public int a17768;
+ public int a17769;
+ public int a17770;
+ public int a17771;
+ public int a17772;
+ public int a17773;
+ public int a17774;
+ public int a17775;
+ public int a17776;
+ public int a17777;
+ public int a17778;
+ public int a17779;
+ public int a17780;
+ public int a17781;
+ public int a17782;
+ public int a17783;
+ public int a17784;
+ public int a17785;
+ public int a17786;
+ public int a17787;
+ public int a17788;
+ public int a17789;
+ public int a17790;
+ public int a17791;
+ public int a17792;
+ public int a17793;
+ public int a17794;
+ public int a17795;
+ public int a17796;
+ public int a17797;
+ public int a17798;
+ public int a17799;
+ public int a17800;
+ public int a17801;
+ public int a17802;
+ public int a17803;
+ public int a17804;
+ public int a17805;
+ public int a17806;
+ public int a17807;
+ public int a17808;
+ public int a17809;
+ public int a17810;
+ public int a17811;
+ public int a17812;
+ public int a17813;
+ public int a17814;
+ public int a17815;
+ public int a17816;
+ public int a17817;
+ public int a17818;
+ public int a17819;
+ public int a17820;
+ public int a17821;
+ public int a17822;
+ public int a17823;
+ public int a17824;
+ public int a17825;
+ public int a17826;
+ public int a17827;
+ public int a17828;
+ public int a17829;
+ public int a17830;
+ public int a17831;
+ public int a17832;
+ public int a17833;
+ public int a17834;
+ public int a17835;
+ public int a17836;
+ public int a17837;
+ public int a17838;
+ public int a17839;
+ public int a17840;
+ public int a17841;
+ public int a17842;
+ public int a17843;
+ public int a17844;
+ public int a17845;
+ public int a17846;
+ public int a17847;
+ public int a17848;
+ public int a17849;
+ public int a17850;
+ public int a17851;
+ public int a17852;
+ public int a17853;
+ public int a17854;
+ public int a17855;
+ public int a17856;
+ public int a17857;
+ public int a17858;
+ public int a17859;
+ public int a17860;
+ public int a17861;
+ public int a17862;
+ public int a17863;
+ public int a17864;
+ public int a17865;
+ public int a17866;
+ public int a17867;
+ public int a17868;
+ public int a17869;
+ public int a17870;
+ public int a17871;
+ public int a17872;
+ public int a17873;
+ public int a17874;
+ public int a17875;
+ public int a17876;
+ public int a17877;
+ public int a17878;
+ public int a17879;
+ public int a17880;
+ public int a17881;
+ public int a17882;
+ public int a17883;
+ public int a17884;
+ public int a17885;
+ public int a17886;
+ public int a17887;
+ public int a17888;
+ public int a17889;
+ public int a17890;
+ public int a17891;
+ public int a17892;
+ public int a17893;
+ public int a17894;
+ public int a17895;
+ public int a17896;
+ public int a17897;
+ public int a17898;
+ public int a17899;
+ public int a17900;
+ public int a17901;
+ public int a17902;
+ public int a17903;
+ public int a17904;
+ public int a17905;
+ public int a17906;
+ public int a17907;
+ public int a17908;
+ public int a17909;
+ public int a17910;
+ public int a17911;
+ public int a17912;
+ public int a17913;
+ public int a17914;
+ public int a17915;
+ public int a17916;
+ public int a17917;
+ public int a17918;
+ public int a17919;
+ public int a17920;
+ public int a17921;
+ public int a17922;
+ public int a17923;
+ public int a17924;
+ public int a17925;
+ public int a17926;
+ public int a17927;
+ public int a17928;
+ public int a17929;
+ public int a17930;
+ public int a17931;
+ public int a17932;
+ public int a17933;
+ public int a17934;
+ public int a17935;
+ public int a17936;
+ public int a17937;
+ public int a17938;
+ public int a17939;
+ public int a17940;
+ public int a17941;
+ public int a17942;
+ public int a17943;
+ public int a17944;
+ public int a17945;
+ public int a17946;
+ public int a17947;
+ public int a17948;
+ public int a17949;
+ public int a17950;
+ public int a17951;
+ public int a17952;
+ public int a17953;
+ public int a17954;
+ public int a17955;
+ public int a17956;
+ public int a17957;
+ public int a17958;
+ public int a17959;
+ public int a17960;
+ public int a17961;
+ public int a17962;
+ public int a17963;
+ public int a17964;
+ public int a17965;
+ public int a17966;
+ public int a17967;
+ public int a17968;
+ public int a17969;
+ public int a17970;
+ public int a17971;
+ public int a17972;
+ public int a17973;
+ public int a17974;
+ public int a17975;
+ public int a17976;
+ public int a17977;
+ public int a17978;
+ public int a17979;
+ public int a17980;
+ public int a17981;
+ public int a17982;
+ public int a17983;
+ public int a17984;
+ public int a17985;
+ public int a17986;
+ public int a17987;
+ public int a17988;
+ public int a17989;
+ public int a17990;
+ public int a17991;
+ public int a17992;
+ public int a17993;
+ public int a17994;
+ public int a17995;
+ public int a17996;
+ public int a17997;
+ public int a17998;
+ public int a17999;
+ public int a18000;
+ public int a18001;
+ public int a18002;
+ public int a18003;
+ public int a18004;
+ public int a18005;
+ public int a18006;
+ public int a18007;
+ public int a18008;
+ public int a18009;
+ public int a18010;
+ public int a18011;
+ public int a18012;
+ public int a18013;
+ public int a18014;
+ public int a18015;
+ public int a18016;
+ public int a18017;
+ public int a18018;
+ public int a18019;
+ public int a18020;
+ public int a18021;
+ public int a18022;
+ public int a18023;
+ public int a18024;
+ public int a18025;
+ public int a18026;
+ public int a18027;
+ public int a18028;
+ public int a18029;
+ public int a18030;
+ public int a18031;
+ public int a18032;
+ public int a18033;
+ public int a18034;
+ public int a18035;
+ public int a18036;
+ public int a18037;
+ public int a18038;
+ public int a18039;
+ public int a18040;
+ public int a18041;
+ public int a18042;
+ public int a18043;
+ public int a18044;
+ public int a18045;
+ public int a18046;
+ public int a18047;
+ public int a18048;
+ public int a18049;
+ public int a18050;
+ public int a18051;
+ public int a18052;
+ public int a18053;
+ public int a18054;
+ public int a18055;
+ public int a18056;
+ public int a18057;
+ public int a18058;
+ public int a18059;
+ public int a18060;
+ public int a18061;
+ public int a18062;
+ public int a18063;
+ public int a18064;
+ public int a18065;
+ public int a18066;
+ public int a18067;
+ public int a18068;
+ public int a18069;
+ public int a18070;
+ public int a18071;
+ public int a18072;
+ public int a18073;
+ public int a18074;
+ public int a18075;
+ public int a18076;
+ public int a18077;
+ public int a18078;
+ public int a18079;
+ public int a18080;
+ public int a18081;
+ public int a18082;
+ public int a18083;
+ public int a18084;
+ public int a18085;
+ public int a18086;
+ public int a18087;
+ public int a18088;
+ public int a18089;
+ public int a18090;
+ public int a18091;
+ public int a18092;
+ public int a18093;
+ public int a18094;
+ public int a18095;
+ public int a18096;
+ public int a18097;
+ public int a18098;
+ public int a18099;
+ public int a18100;
+ public int a18101;
+ public int a18102;
+ public int a18103;
+ public int a18104;
+ public int a18105;
+ public int a18106;
+ public int a18107;
+ public int a18108;
+ public int a18109;
+ public int a18110;
+ public int a18111;
+ public int a18112;
+ public int a18113;
+ public int a18114;
+ public int a18115;
+ public int a18116;
+ public int a18117;
+ public int a18118;
+ public int a18119;
+ public int a18120;
+ public int a18121;
+ public int a18122;
+ public int a18123;
+ public int a18124;
+ public int a18125;
+ public int a18126;
+ public int a18127;
+ public int a18128;
+ public int a18129;
+ public int a18130;
+ public int a18131;
+ public int a18132;
+ public int a18133;
+ public int a18134;
+ public int a18135;
+ public int a18136;
+ public int a18137;
+ public int a18138;
+ public int a18139;
+ public int a18140;
+ public int a18141;
+ public int a18142;
+ public int a18143;
+ public int a18144;
+ public int a18145;
+ public int a18146;
+ public int a18147;
+ public int a18148;
+ public int a18149;
+ public int a18150;
+ public int a18151;
+ public int a18152;
+ public int a18153;
+ public int a18154;
+ public int a18155;
+ public int a18156;
+ public int a18157;
+ public int a18158;
+ public int a18159;
+ public int a18160;
+ public int a18161;
+ public int a18162;
+ public int a18163;
+ public int a18164;
+ public int a18165;
+ public int a18166;
+ public int a18167;
+ public int a18168;
+ public int a18169;
+ public int a18170;
+ public int a18171;
+ public int a18172;
+ public int a18173;
+ public int a18174;
+ public int a18175;
+ public int a18176;
+ public int a18177;
+ public int a18178;
+ public int a18179;
+ public int a18180;
+ public int a18181;
+ public int a18182;
+ public int a18183;
+ public int a18184;
+ public int a18185;
+ public int a18186;
+ public int a18187;
+ public int a18188;
+ public int a18189;
+ public int a18190;
+ public int a18191;
+ public int a18192;
+ public int a18193;
+ public int a18194;
+ public int a18195;
+ public int a18196;
+ public int a18197;
+ public int a18198;
+ public int a18199;
+ public int a18200;
+ public int a18201;
+ public int a18202;
+ public int a18203;
+ public int a18204;
+ public int a18205;
+ public int a18206;
+ public int a18207;
+ public int a18208;
+ public int a18209;
+ public int a18210;
+ public int a18211;
+ public int a18212;
+ public int a18213;
+ public int a18214;
+ public int a18215;
+ public int a18216;
+ public int a18217;
+ public int a18218;
+ public int a18219;
+ public int a18220;
+ public int a18221;
+ public int a18222;
+ public int a18223;
+ public int a18224;
+ public int a18225;
+ public int a18226;
+ public int a18227;
+ public int a18228;
+ public int a18229;
+ public int a18230;
+ public int a18231;
+ public int a18232;
+ public int a18233;
+ public int a18234;
+ public int a18235;
+ public int a18236;
+ public int a18237;
+ public int a18238;
+ public int a18239;
+ public int a18240;
+ public int a18241;
+ public int a18242;
+ public int a18243;
+ public int a18244;
+ public int a18245;
+ public int a18246;
+ public int a18247;
+ public int a18248;
+ public int a18249;
+ public int a18250;
+ public int a18251;
+ public int a18252;
+ public int a18253;
+ public int a18254;
+ public int a18255;
+ public int a18256;
+ public int a18257;
+ public int a18258;
+ public int a18259;
+ public int a18260;
+ public int a18261;
+ public int a18262;
+ public int a18263;
+ public int a18264;
+ public int a18265;
+ public int a18266;
+ public int a18267;
+ public int a18268;
+ public int a18269;
+ public int a18270;
+ public int a18271;
+ public int a18272;
+ public int a18273;
+ public int a18274;
+ public int a18275;
+ public int a18276;
+ public int a18277;
+ public int a18278;
+ public int a18279;
+ public int a18280;
+ public int a18281;
+ public int a18282;
+ public int a18283;
+ public int a18284;
+ public int a18285;
+ public int a18286;
+ public int a18287;
+ public int a18288;
+ public int a18289;
+ public int a18290;
+ public int a18291;
+ public int a18292;
+ public int a18293;
+ public int a18294;
+ public int a18295;
+ public int a18296;
+ public int a18297;
+ public int a18298;
+ public int a18299;
+ public int a18300;
+ public int a18301;
+ public int a18302;
+ public int a18303;
+ public int a18304;
+ public int a18305;
+ public int a18306;
+ public int a18307;
+ public int a18308;
+ public int a18309;
+ public int a18310;
+ public int a18311;
+ public int a18312;
+ public int a18313;
+ public int a18314;
+ public int a18315;
+ public int a18316;
+ public int a18317;
+ public int a18318;
+ public int a18319;
+ public int a18320;
+ public int a18321;
+ public int a18322;
+ public int a18323;
+ public int a18324;
+ public int a18325;
+ public int a18326;
+ public int a18327;
+ public int a18328;
+ public int a18329;
+ public int a18330;
+ public int a18331;
+ public int a18332;
+ public int a18333;
+ public int a18334;
+ public int a18335;
+ public int a18336;
+ public int a18337;
+ public int a18338;
+ public int a18339;
+ public int a18340;
+ public int a18341;
+ public int a18342;
+ public int a18343;
+ public int a18344;
+ public int a18345;
+ public int a18346;
+ public int a18347;
+ public int a18348;
+ public int a18349;
+ public int a18350;
+ public int a18351;
+ public int a18352;
+ public int a18353;
+ public int a18354;
+ public int a18355;
+ public int a18356;
+ public int a18357;
+ public int a18358;
+ public int a18359;
+ public int a18360;
+ public int a18361;
+ public int a18362;
+ public int a18363;
+ public int a18364;
+ public int a18365;
+ public int a18366;
+ public int a18367;
+ public int a18368;
+ public int a18369;
+ public int a18370;
+ public int a18371;
+ public int a18372;
+ public int a18373;
+ public int a18374;
+ public int a18375;
+ public int a18376;
+ public int a18377;
+ public int a18378;
+ public int a18379;
+ public int a18380;
+ public int a18381;
+ public int a18382;
+ public int a18383;
+ public int a18384;
+ public int a18385;
+ public int a18386;
+ public int a18387;
+ public int a18388;
+ public int a18389;
+ public int a18390;
+ public int a18391;
+ public int a18392;
+ public int a18393;
+ public int a18394;
+ public int a18395;
+ public int a18396;
+ public int a18397;
+ public int a18398;
+ public int a18399;
+ public int a18400;
+ public int a18401;
+ public int a18402;
+ public int a18403;
+ public int a18404;
+ public int a18405;
+ public int a18406;
+ public int a18407;
+ public int a18408;
+ public int a18409;
+ public int a18410;
+ public int a18411;
+ public int a18412;
+ public int a18413;
+ public int a18414;
+ public int a18415;
+ public int a18416;
+ public int a18417;
+ public int a18418;
+ public int a18419;
+ public int a18420;
+ public int a18421;
+ public int a18422;
+ public int a18423;
+ public int a18424;
+ public int a18425;
+ public int a18426;
+ public int a18427;
+ public int a18428;
+ public int a18429;
+ public int a18430;
+ public int a18431;
+ public int a18432;
+ public int a18433;
+ public int a18434;
+ public int a18435;
+ public int a18436;
+ public int a18437;
+ public int a18438;
+ public int a18439;
+ public int a18440;
+ public int a18441;
+ public int a18442;
+ public int a18443;
+ public int a18444;
+ public int a18445;
+ public int a18446;
+ public int a18447;
+ public int a18448;
+ public int a18449;
+ public int a18450;
+ public int a18451;
+ public int a18452;
+ public int a18453;
+ public int a18454;
+ public int a18455;
+ public int a18456;
+ public int a18457;
+ public int a18458;
+ public int a18459;
+ public int a18460;
+ public int a18461;
+ public int a18462;
+ public int a18463;
+ public int a18464;
+ public int a18465;
+ public int a18466;
+ public int a18467;
+ public int a18468;
+ public int a18469;
+ public int a18470;
+ public int a18471;
+ public int a18472;
+ public int a18473;
+ public int a18474;
+ public int a18475;
+ public int a18476;
+ public int a18477;
+ public int a18478;
+ public int a18479;
+ public int a18480;
+ public int a18481;
+ public int a18482;
+ public int a18483;
+ public int a18484;
+ public int a18485;
+ public int a18486;
+ public int a18487;
+ public int a18488;
+ public int a18489;
+ public int a18490;
+ public int a18491;
+ public int a18492;
+ public int a18493;
+ public int a18494;
+ public int a18495;
+ public int a18496;
+ public int a18497;
+ public int a18498;
+ public int a18499;
+ public int a18500;
+ public int a18501;
+ public int a18502;
+ public int a18503;
+ public int a18504;
+ public int a18505;
+ public int a18506;
+ public int a18507;
+ public int a18508;
+ public int a18509;
+ public int a18510;
+ public int a18511;
+ public int a18512;
+ public int a18513;
+ public int a18514;
+ public int a18515;
+ public int a18516;
+ public int a18517;
+ public int a18518;
+ public int a18519;
+ public int a18520;
+ public int a18521;
+ public int a18522;
+ public int a18523;
+ public int a18524;
+ public int a18525;
+ public int a18526;
+ public int a18527;
+ public int a18528;
+ public int a18529;
+ public int a18530;
+ public int a18531;
+ public int a18532;
+ public int a18533;
+ public int a18534;
+ public int a18535;
+ public int a18536;
+ public int a18537;
+ public int a18538;
+ public int a18539;
+ public int a18540;
+ public int a18541;
+ public int a18542;
+ public int a18543;
+ public int a18544;
+ public int a18545;
+ public int a18546;
+ public int a18547;
+ public int a18548;
+ public int a18549;
+ public int a18550;
+ public int a18551;
+ public int a18552;
+ public int a18553;
+ public int a18554;
+ public int a18555;
+ public int a18556;
+ public int a18557;
+ public int a18558;
+ public int a18559;
+ public int a18560;
+ public int a18561;
+ public int a18562;
+ public int a18563;
+ public int a18564;
+ public int a18565;
+ public int a18566;
+ public int a18567;
+ public int a18568;
+ public int a18569;
+ public int a18570;
+ public int a18571;
+ public int a18572;
+ public int a18573;
+ public int a18574;
+ public int a18575;
+ public int a18576;
+ public int a18577;
+ public int a18578;
+ public int a18579;
+ public int a18580;
+ public int a18581;
+ public int a18582;
+ public int a18583;
+ public int a18584;
+ public int a18585;
+ public int a18586;
+ public int a18587;
+ public int a18588;
+ public int a18589;
+ public int a18590;
+ public int a18591;
+ public int a18592;
+ public int a18593;
+ public int a18594;
+ public int a18595;
+ public int a18596;
+ public int a18597;
+ public int a18598;
+ public int a18599;
+ public int a18600;
+ public int a18601;
+ public int a18602;
+ public int a18603;
+ public int a18604;
+ public int a18605;
+ public int a18606;
+ public int a18607;
+ public int a18608;
+ public int a18609;
+ public int a18610;
+ public int a18611;
+ public int a18612;
+ public int a18613;
+ public int a18614;
+ public int a18615;
+ public int a18616;
+ public int a18617;
+ public int a18618;
+ public int a18619;
+ public int a18620;
+ public int a18621;
+ public int a18622;
+ public int a18623;
+ public int a18624;
+ public int a18625;
+ public int a18626;
+ public int a18627;
+ public int a18628;
+ public int a18629;
+ public int a18630;
+ public int a18631;
+ public int a18632;
+ public int a18633;
+ public int a18634;
+ public int a18635;
+ public int a18636;
+ public int a18637;
+ public int a18638;
+ public int a18639;
+ public int a18640;
+ public int a18641;
+ public int a18642;
+ public int a18643;
+ public int a18644;
+ public int a18645;
+ public int a18646;
+ public int a18647;
+ public int a18648;
+ public int a18649;
+ public int a18650;
+ public int a18651;
+ public int a18652;
+ public int a18653;
+ public int a18654;
+ public int a18655;
+ public int a18656;
+ public int a18657;
+ public int a18658;
+ public int a18659;
+ public int a18660;
+ public int a18661;
+ public int a18662;
+ public int a18663;
+ public int a18664;
+ public int a18665;
+ public int a18666;
+ public int a18667;
+ public int a18668;
+ public int a18669;
+ public int a18670;
+ public int a18671;
+ public int a18672;
+ public int a18673;
+ public int a18674;
+ public int a18675;
+ public int a18676;
+ public int a18677;
+ public int a18678;
+ public int a18679;
+ public int a18680;
+ public int a18681;
+ public int a18682;
+ public int a18683;
+ public int a18684;
+ public int a18685;
+ public int a18686;
+ public int a18687;
+ public int a18688;
+ public int a18689;
+ public int a18690;
+ public int a18691;
+ public int a18692;
+ public int a18693;
+ public int a18694;
+ public int a18695;
+ public int a18696;
+ public int a18697;
+ public int a18698;
+ public int a18699;
+ public int a18700;
+ public int a18701;
+ public int a18702;
+ public int a18703;
+ public int a18704;
+ public int a18705;
+ public int a18706;
+ public int a18707;
+ public int a18708;
+ public int a18709;
+ public int a18710;
+ public int a18711;
+ public int a18712;
+ public int a18713;
+ public int a18714;
+ public int a18715;
+ public int a18716;
+ public int a18717;
+ public int a18718;
+ public int a18719;
+ public int a18720;
+ public int a18721;
+ public int a18722;
+ public int a18723;
+ public int a18724;
+ public int a18725;
+ public int a18726;
+ public int a18727;
+ public int a18728;
+ public int a18729;
+ public int a18730;
+ public int a18731;
+ public int a18732;
+ public int a18733;
+ public int a18734;
+ public int a18735;
+ public int a18736;
+ public int a18737;
+ public int a18738;
+ public int a18739;
+ public int a18740;
+ public int a18741;
+ public int a18742;
+ public int a18743;
+ public int a18744;
+ public int a18745;
+ public int a18746;
+ public int a18747;
+ public int a18748;
+ public int a18749;
+ public int a18750;
+ public int a18751;
+ public int a18752;
+ public int a18753;
+ public int a18754;
+ public int a18755;
+ public int a18756;
+ public int a18757;
+ public int a18758;
+ public int a18759;
+ public int a18760;
+ public int a18761;
+ public int a18762;
+ public int a18763;
+ public int a18764;
+ public int a18765;
+ public int a18766;
+ public int a18767;
+ public int a18768;
+ public int a18769;
+ public int a18770;
+ public int a18771;
+ public int a18772;
+ public int a18773;
+ public int a18774;
+ public int a18775;
+ public int a18776;
+ public int a18777;
+ public int a18778;
+ public int a18779;
+ public int a18780;
+ public int a18781;
+ public int a18782;
+ public int a18783;
+ public int a18784;
+ public int a18785;
+ public int a18786;
+ public int a18787;
+ public int a18788;
+ public int a18789;
+ public int a18790;
+ public int a18791;
+ public int a18792;
+ public int a18793;
+ public int a18794;
+ public int a18795;
+ public int a18796;
+ public int a18797;
+ public int a18798;
+ public int a18799;
+ public int a18800;
+ public int a18801;
+ public int a18802;
+ public int a18803;
+ public int a18804;
+ public int a18805;
+ public int a18806;
+ public int a18807;
+ public int a18808;
+ public int a18809;
+ public int a18810;
+ public int a18811;
+ public int a18812;
+ public int a18813;
+ public int a18814;
+ public int a18815;
+ public int a18816;
+ public int a18817;
+ public int a18818;
+ public int a18819;
+ public int a18820;
+ public int a18821;
+ public int a18822;
+ public int a18823;
+ public int a18824;
+ public int a18825;
+ public int a18826;
+ public int a18827;
+ public int a18828;
+ public int a18829;
+ public int a18830;
+ public int a18831;
+ public int a18832;
+ public int a18833;
+ public int a18834;
+ public int a18835;
+ public int a18836;
+ public int a18837;
+ public int a18838;
+ public int a18839;
+ public int a18840;
+ public int a18841;
+ public int a18842;
+ public int a18843;
+ public int a18844;
+ public int a18845;
+ public int a18846;
+ public int a18847;
+ public int a18848;
+ public int a18849;
+ public int a18850;
+ public int a18851;
+ public int a18852;
+ public int a18853;
+ public int a18854;
+ public int a18855;
+ public int a18856;
+ public int a18857;
+ public int a18858;
+ public int a18859;
+ public int a18860;
+ public int a18861;
+ public int a18862;
+ public int a18863;
+ public int a18864;
+ public int a18865;
+ public int a18866;
+ public int a18867;
+ public int a18868;
+ public int a18869;
+ public int a18870;
+ public int a18871;
+ public int a18872;
+ public int a18873;
+ public int a18874;
+ public int a18875;
+ public int a18876;
+ public int a18877;
+ public int a18878;
+ public int a18879;
+ public int a18880;
+ public int a18881;
+ public int a18882;
+ public int a18883;
+ public int a18884;
+ public int a18885;
+ public int a18886;
+ public int a18887;
+ public int a18888;
+ public int a18889;
+ public int a18890;
+ public int a18891;
+ public int a18892;
+ public int a18893;
+ public int a18894;
+ public int a18895;
+ public int a18896;
+ public int a18897;
+ public int a18898;
+ public int a18899;
+ public int a18900;
+ public int a18901;
+ public int a18902;
+ public int a18903;
+ public int a18904;
+ public int a18905;
+ public int a18906;
+ public int a18907;
+ public int a18908;
+ public int a18909;
+ public int a18910;
+ public int a18911;
+ public int a18912;
+ public int a18913;
+ public int a18914;
+ public int a18915;
+ public int a18916;
+ public int a18917;
+ public int a18918;
+ public int a18919;
+ public int a18920;
+ public int a18921;
+ public int a18922;
+ public int a18923;
+ public int a18924;
+ public int a18925;
+ public int a18926;
+ public int a18927;
+ public int a18928;
+ public int a18929;
+ public int a18930;
+ public int a18931;
+ public int a18932;
+ public int a18933;
+ public int a18934;
+ public int a18935;
+ public int a18936;
+ public int a18937;
+ public int a18938;
+ public int a18939;
+ public int a18940;
+ public int a18941;
+ public int a18942;
+ public int a18943;
+ public int a18944;
+ public int a18945;
+ public int a18946;
+ public int a18947;
+ public int a18948;
+ public int a18949;
+ public int a18950;
+ public int a18951;
+ public int a18952;
+ public int a18953;
+ public int a18954;
+ public int a18955;
+ public int a18956;
+ public int a18957;
+ public int a18958;
+ public int a18959;
+ public int a18960;
+ public int a18961;
+ public int a18962;
+ public int a18963;
+ public int a18964;
+ public int a18965;
+ public int a18966;
+ public int a18967;
+ public int a18968;
+ public int a18969;
+ public int a18970;
+ public int a18971;
+ public int a18972;
+ public int a18973;
+ public int a18974;
+ public int a18975;
+ public int a18976;
+ public int a18977;
+ public int a18978;
+ public int a18979;
+ public int a18980;
+ public int a18981;
+ public int a18982;
+ public int a18983;
+ public int a18984;
+ public int a18985;
+ public int a18986;
+ public int a18987;
+ public int a18988;
+ public int a18989;
+ public int a18990;
+ public int a18991;
+ public int a18992;
+ public int a18993;
+ public int a18994;
+ public int a18995;
+ public int a18996;
+ public int a18997;
+ public int a18998;
+ public int a18999;
+ public int a19000;
+ public int a19001;
+ public int a19002;
+ public int a19003;
+ public int a19004;
+ public int a19005;
+ public int a19006;
+ public int a19007;
+ public int a19008;
+ public int a19009;
+ public int a19010;
+ public int a19011;
+ public int a19012;
+ public int a19013;
+ public int a19014;
+ public int a19015;
+ public int a19016;
+ public int a19017;
+ public int a19018;
+ public int a19019;
+ public int a19020;
+ public int a19021;
+ public int a19022;
+ public int a19023;
+ public int a19024;
+ public int a19025;
+ public int a19026;
+ public int a19027;
+ public int a19028;
+ public int a19029;
+ public int a19030;
+ public int a19031;
+ public int a19032;
+ public int a19033;
+ public int a19034;
+ public int a19035;
+ public int a19036;
+ public int a19037;
+ public int a19038;
+ public int a19039;
+ public int a19040;
+ public int a19041;
+ public int a19042;
+ public int a19043;
+ public int a19044;
+ public int a19045;
+ public int a19046;
+ public int a19047;
+ public int a19048;
+ public int a19049;
+ public int a19050;
+ public int a19051;
+ public int a19052;
+ public int a19053;
+ public int a19054;
+ public int a19055;
+ public int a19056;
+ public int a19057;
+ public int a19058;
+ public int a19059;
+ public int a19060;
+ public int a19061;
+ public int a19062;
+ public int a19063;
+ public int a19064;
+ public int a19065;
+ public int a19066;
+ public int a19067;
+ public int a19068;
+ public int a19069;
+ public int a19070;
+ public int a19071;
+ public int a19072;
+ public int a19073;
+ public int a19074;
+ public int a19075;
+ public int a19076;
+ public int a19077;
+ public int a19078;
+ public int a19079;
+ public int a19080;
+ public int a19081;
+ public int a19082;
+ public int a19083;
+ public int a19084;
+ public int a19085;
+ public int a19086;
+ public int a19087;
+ public int a19088;
+ public int a19089;
+ public int a19090;
+ public int a19091;
+ public int a19092;
+ public int a19093;
+ public int a19094;
+ public int a19095;
+ public int a19096;
+ public int a19097;
+ public int a19098;
+ public int a19099;
+ public int a19100;
+ public int a19101;
+ public int a19102;
+ public int a19103;
+ public int a19104;
+ public int a19105;
+ public int a19106;
+ public int a19107;
+ public int a19108;
+ public int a19109;
+ public int a19110;
+ public int a19111;
+ public int a19112;
+ public int a19113;
+ public int a19114;
+ public int a19115;
+ public int a19116;
+ public int a19117;
+ public int a19118;
+ public int a19119;
+ public int a19120;
+ public int a19121;
+ public int a19122;
+ public int a19123;
+ public int a19124;
+ public int a19125;
+ public int a19126;
+ public int a19127;
+ public int a19128;
+ public int a19129;
+ public int a19130;
+ public int a19131;
+ public int a19132;
+ public int a19133;
+ public int a19134;
+ public int a19135;
+ public int a19136;
+ public int a19137;
+ public int a19138;
+ public int a19139;
+ public int a19140;
+ public int a19141;
+ public int a19142;
+ public int a19143;
+ public int a19144;
+ public int a19145;
+ public int a19146;
+ public int a19147;
+ public int a19148;
+ public int a19149;
+ public int a19150;
+ public int a19151;
+ public int a19152;
+ public int a19153;
+ public int a19154;
+ public int a19155;
+ public int a19156;
+ public int a19157;
+ public int a19158;
+ public int a19159;
+ public int a19160;
+ public int a19161;
+ public int a19162;
+ public int a19163;
+ public int a19164;
+ public int a19165;
+ public int a19166;
+ public int a19167;
+ public int a19168;
+ public int a19169;
+ public int a19170;
+ public int a19171;
+ public int a19172;
+ public int a19173;
+ public int a19174;
+ public int a19175;
+ public int a19176;
+ public int a19177;
+ public int a19178;
+ public int a19179;
+ public int a19180;
+ public int a19181;
+ public int a19182;
+ public int a19183;
+ public int a19184;
+ public int a19185;
+ public int a19186;
+ public int a19187;
+ public int a19188;
+ public int a19189;
+ public int a19190;
+ public int a19191;
+ public int a19192;
+ public int a19193;
+ public int a19194;
+ public int a19195;
+ public int a19196;
+ public int a19197;
+ public int a19198;
+ public int a19199;
+ public int a19200;
+ public int a19201;
+ public int a19202;
+ public int a19203;
+ public int a19204;
+ public int a19205;
+ public int a19206;
+ public int a19207;
+ public int a19208;
+ public int a19209;
+ public int a19210;
+ public int a19211;
+ public int a19212;
+ public int a19213;
+ public int a19214;
+ public int a19215;
+ public int a19216;
+ public int a19217;
+ public int a19218;
+ public int a19219;
+ public int a19220;
+ public int a19221;
+ public int a19222;
+ public int a19223;
+ public int a19224;
+ public int a19225;
+ public int a19226;
+ public int a19227;
+ public int a19228;
+ public int a19229;
+ public int a19230;
+ public int a19231;
+ public int a19232;
+ public int a19233;
+ public int a19234;
+ public int a19235;
+ public int a19236;
+ public int a19237;
+ public int a19238;
+ public int a19239;
+ public int a19240;
+ public int a19241;
+ public int a19242;
+ public int a19243;
+ public int a19244;
+ public int a19245;
+ public int a19246;
+ public int a19247;
+ public int a19248;
+ public int a19249;
+ public int a19250;
+ public int a19251;
+ public int a19252;
+ public int a19253;
+ public int a19254;
+ public int a19255;
+ public int a19256;
+ public int a19257;
+ public int a19258;
+ public int a19259;
+ public int a19260;
+ public int a19261;
+ public int a19262;
+ public int a19263;
+ public int a19264;
+ public int a19265;
+ public int a19266;
+ public int a19267;
+ public int a19268;
+ public int a19269;
+ public int a19270;
+ public int a19271;
+ public int a19272;
+ public int a19273;
+ public int a19274;
+ public int a19275;
+ public int a19276;
+ public int a19277;
+ public int a19278;
+ public int a19279;
+ public int a19280;
+ public int a19281;
+ public int a19282;
+ public int a19283;
+ public int a19284;
+ public int a19285;
+ public int a19286;
+ public int a19287;
+ public int a19288;
+ public int a19289;
+ public int a19290;
+ public int a19291;
+ public int a19292;
+ public int a19293;
+ public int a19294;
+ public int a19295;
+ public int a19296;
+ public int a19297;
+ public int a19298;
+ public int a19299;
+ public int a19300;
+ public int a19301;
+ public int a19302;
+ public int a19303;
+ public int a19304;
+ public int a19305;
+ public int a19306;
+ public int a19307;
+ public int a19308;
+ public int a19309;
+ public int a19310;
+ public int a19311;
+ public int a19312;
+ public int a19313;
+ public int a19314;
+ public int a19315;
+ public int a19316;
+ public int a19317;
+ public int a19318;
+ public int a19319;
+ public int a19320;
+ public int a19321;
+ public int a19322;
+ public int a19323;
+ public int a19324;
+ public int a19325;
+ public int a19326;
+ public int a19327;
+ public int a19328;
+ public int a19329;
+ public int a19330;
+ public int a19331;
+ public int a19332;
+ public int a19333;
+ public int a19334;
+ public int a19335;
+ public int a19336;
+ public int a19337;
+ public int a19338;
+ public int a19339;
+ public int a19340;
+ public int a19341;
+ public int a19342;
+ public int a19343;
+ public int a19344;
+ public int a19345;
+ public int a19346;
+ public int a19347;
+ public int a19348;
+ public int a19349;
+ public int a19350;
+ public int a19351;
+ public int a19352;
+ public int a19353;
+ public int a19354;
+ public int a19355;
+ public int a19356;
+ public int a19357;
+ public int a19358;
+ public int a19359;
+ public int a19360;
+ public int a19361;
+ public int a19362;
+ public int a19363;
+ public int a19364;
+ public int a19365;
+ public int a19366;
+ public int a19367;
+ public int a19368;
+ public int a19369;
+ public int a19370;
+ public int a19371;
+ public int a19372;
+ public int a19373;
+ public int a19374;
+ public int a19375;
+ public int a19376;
+ public int a19377;
+ public int a19378;
+ public int a19379;
+ public int a19380;
+ public int a19381;
+ public int a19382;
+ public int a19383;
+ public int a19384;
+ public int a19385;
+ public int a19386;
+ public int a19387;
+ public int a19388;
+ public int a19389;
+ public int a19390;
+ public int a19391;
+ public int a19392;
+ public int a19393;
+ public int a19394;
+ public int a19395;
+ public int a19396;
+ public int a19397;
+ public int a19398;
+ public int a19399;
+ public int a19400;
+ public int a19401;
+ public int a19402;
+ public int a19403;
+ public int a19404;
+ public int a19405;
+ public int a19406;
+ public int a19407;
+ public int a19408;
+ public int a19409;
+ public int a19410;
+ public int a19411;
+ public int a19412;
+ public int a19413;
+ public int a19414;
+ public int a19415;
+ public int a19416;
+ public int a19417;
+ public int a19418;
+ public int a19419;
+ public int a19420;
+ public int a19421;
+ public int a19422;
+ public int a19423;
+ public int a19424;
+ public int a19425;
+ public int a19426;
+ public int a19427;
+ public int a19428;
+ public int a19429;
+ public int a19430;
+ public int a19431;
+ public int a19432;
+ public int a19433;
+ public int a19434;
+ public int a19435;
+ public int a19436;
+ public int a19437;
+ public int a19438;
+ public int a19439;
+ public int a19440;
+ public int a19441;
+ public int a19442;
+ public int a19443;
+ public int a19444;
+ public int a19445;
+ public int a19446;
+ public int a19447;
+ public int a19448;
+ public int a19449;
+ public int a19450;
+ public int a19451;
+ public int a19452;
+ public int a19453;
+ public int a19454;
+ public int a19455;
+ public int a19456;
+ public int a19457;
+ public int a19458;
+ public int a19459;
+ public int a19460;
+ public int a19461;
+ public int a19462;
+ public int a19463;
+ public int a19464;
+ public int a19465;
+ public int a19466;
+ public int a19467;
+ public int a19468;
+ public int a19469;
+ public int a19470;
+ public int a19471;
+ public int a19472;
+ public int a19473;
+ public int a19474;
+ public int a19475;
+ public int a19476;
+ public int a19477;
+ public int a19478;
+ public int a19479;
+ public int a19480;
+ public int a19481;
+ public int a19482;
+ public int a19483;
+ public int a19484;
+ public int a19485;
+ public int a19486;
+ public int a19487;
+ public int a19488;
+ public int a19489;
+ public int a19490;
+ public int a19491;
+ public int a19492;
+ public int a19493;
+ public int a19494;
+ public int a19495;
+ public int a19496;
+ public int a19497;
+ public int a19498;
+ public int a19499;
+ public int a19500;
+ public int a19501;
+ public int a19502;
+ public int a19503;
+ public int a19504;
+ public int a19505;
+ public int a19506;
+ public int a19507;
+ public int a19508;
+ public int a19509;
+ public int a19510;
+ public int a19511;
+ public int a19512;
+ public int a19513;
+ public int a19514;
+ public int a19515;
+ public int a19516;
+ public int a19517;
+ public int a19518;
+ public int a19519;
+ public int a19520;
+ public int a19521;
+ public int a19522;
+ public int a19523;
+ public int a19524;
+ public int a19525;
+ public int a19526;
+ public int a19527;
+ public int a19528;
+ public int a19529;
+ public int a19530;
+ public int a19531;
+ public int a19532;
+ public int a19533;
+ public int a19534;
+ public int a19535;
+ public int a19536;
+ public int a19537;
+ public int a19538;
+ public int a19539;
+ public int a19540;
+ public int a19541;
+ public int a19542;
+ public int a19543;
+ public int a19544;
+ public int a19545;
+ public int a19546;
+ public int a19547;
+ public int a19548;
+ public int a19549;
+ public int a19550;
+ public int a19551;
+ public int a19552;
+ public int a19553;
+ public int a19554;
+ public int a19555;
+ public int a19556;
+ public int a19557;
+ public int a19558;
+ public int a19559;
+ public int a19560;
+ public int a19561;
+ public int a19562;
+ public int a19563;
+ public int a19564;
+ public int a19565;
+ public int a19566;
+ public int a19567;
+ public int a19568;
+ public int a19569;
+ public int a19570;
+ public int a19571;
+ public int a19572;
+ public int a19573;
+ public int a19574;
+ public int a19575;
+ public int a19576;
+ public int a19577;
+ public int a19578;
+ public int a19579;
+ public int a19580;
+ public int a19581;
+ public int a19582;
+ public int a19583;
+ public int a19584;
+ public int a19585;
+ public int a19586;
+ public int a19587;
+ public int a19588;
+ public int a19589;
+ public int a19590;
+ public int a19591;
+ public int a19592;
+ public int a19593;
+ public int a19594;
+ public int a19595;
+ public int a19596;
+ public int a19597;
+ public int a19598;
+ public int a19599;
+ public int a19600;
+ public int a19601;
+ public int a19602;
+ public int a19603;
+ public int a19604;
+ public int a19605;
+ public int a19606;
+ public int a19607;
+ public int a19608;
+ public int a19609;
+ public int a19610;
+ public int a19611;
+ public int a19612;
+ public int a19613;
+ public int a19614;
+ public int a19615;
+ public int a19616;
+ public int a19617;
+ public int a19618;
+ public int a19619;
+ public int a19620;
+ public int a19621;
+ public int a19622;
+ public int a19623;
+ public int a19624;
+ public int a19625;
+ public int a19626;
+ public int a19627;
+ public int a19628;
+ public int a19629;
+ public int a19630;
+ public int a19631;
+ public int a19632;
+ public int a19633;
+ public int a19634;
+ public int a19635;
+ public int a19636;
+ public int a19637;
+ public int a19638;
+ public int a19639;
+ public int a19640;
+ public int a19641;
+ public int a19642;
+ public int a19643;
+ public int a19644;
+ public int a19645;
+ public int a19646;
+ public int a19647;
+ public int a19648;
+ public int a19649;
+ public int a19650;
+ public int a19651;
+ public int a19652;
+ public int a19653;
+ public int a19654;
+ public int a19655;
+ public int a19656;
+ public int a19657;
+ public int a19658;
+ public int a19659;
+ public int a19660;
+ public int a19661;
+ public int a19662;
+ public int a19663;
+ public int a19664;
+ public int a19665;
+ public int a19666;
+ public int a19667;
+ public int a19668;
+ public int a19669;
+ public int a19670;
+ public int a19671;
+ public int a19672;
+ public int a19673;
+ public int a19674;
+ public int a19675;
+ public int a19676;
+ public int a19677;
+ public int a19678;
+ public int a19679;
+ public int a19680;
+ public int a19681;
+ public int a19682;
+ public int a19683;
+ public int a19684;
+ public int a19685;
+ public int a19686;
+ public int a19687;
+ public int a19688;
+ public int a19689;
+ public int a19690;
+ public int a19691;
+ public int a19692;
+ public int a19693;
+ public int a19694;
+ public int a19695;
+ public int a19696;
+ public int a19697;
+ public int a19698;
+ public int a19699;
+ public int a19700;
+ public int a19701;
+ public int a19702;
+ public int a19703;
+ public int a19704;
+ public int a19705;
+ public int a19706;
+ public int a19707;
+ public int a19708;
+ public int a19709;
+ public int a19710;
+ public int a19711;
+ public int a19712;
+ public int a19713;
+ public int a19714;
+ public int a19715;
+ public int a19716;
+ public int a19717;
+ public int a19718;
+ public int a19719;
+ public int a19720;
+ public int a19721;
+ public int a19722;
+ public int a19723;
+ public int a19724;
+ public int a19725;
+ public int a19726;
+ public int a19727;
+ public int a19728;
+ public int a19729;
+ public int a19730;
+ public int a19731;
+ public int a19732;
+ public int a19733;
+ public int a19734;
+ public int a19735;
+ public int a19736;
+ public int a19737;
+ public int a19738;
+ public int a19739;
+ public int a19740;
+ public int a19741;
+ public int a19742;
+ public int a19743;
+ public int a19744;
+ public int a19745;
+ public int a19746;
+ public int a19747;
+ public int a19748;
+ public int a19749;
+ public int a19750;
+ public int a19751;
+ public int a19752;
+ public int a19753;
+ public int a19754;
+ public int a19755;
+ public int a19756;
+ public int a19757;
+ public int a19758;
+ public int a19759;
+ public int a19760;
+ public int a19761;
+ public int a19762;
+ public int a19763;
+ public int a19764;
+ public int a19765;
+ public int a19766;
+ public int a19767;
+ public int a19768;
+ public int a19769;
+ public int a19770;
+ public int a19771;
+ public int a19772;
+ public int a19773;
+ public int a19774;
+ public int a19775;
+ public int a19776;
+ public int a19777;
+ public int a19778;
+ public int a19779;
+ public int a19780;
+ public int a19781;
+ public int a19782;
+ public int a19783;
+ public int a19784;
+ public int a19785;
+ public int a19786;
+ public int a19787;
+ public int a19788;
+ public int a19789;
+ public int a19790;
+ public int a19791;
+ public int a19792;
+ public int a19793;
+ public int a19794;
+ public int a19795;
+ public int a19796;
+ public int a19797;
+ public int a19798;
+ public int a19799;
+ public int a19800;
+ public int a19801;
+ public int a19802;
+ public int a19803;
+ public int a19804;
+ public int a19805;
+ public int a19806;
+ public int a19807;
+ public int a19808;
+ public int a19809;
+ public int a19810;
+ public int a19811;
+ public int a19812;
+ public int a19813;
+ public int a19814;
+ public int a19815;
+ public int a19816;
+ public int a19817;
+ public int a19818;
+ public int a19819;
+ public int a19820;
+ public int a19821;
+ public int a19822;
+ public int a19823;
+ public int a19824;
+ public int a19825;
+ public int a19826;
+ public int a19827;
+ public int a19828;
+ public int a19829;
+ public int a19830;
+ public int a19831;
+ public int a19832;
+ public int a19833;
+ public int a19834;
+ public int a19835;
+ public int a19836;
+ public int a19837;
+ public int a19838;
+ public int a19839;
+ public int a19840;
+ public int a19841;
+ public int a19842;
+ public int a19843;
+ public int a19844;
+ public int a19845;
+ public int a19846;
+ public int a19847;
+ public int a19848;
+ public int a19849;
+ public int a19850;
+ public int a19851;
+ public int a19852;
+ public int a19853;
+ public int a19854;
+ public int a19855;
+ public int a19856;
+ public int a19857;
+ public int a19858;
+ public int a19859;
+ public int a19860;
+ public int a19861;
+ public int a19862;
+ public int a19863;
+ public int a19864;
+ public int a19865;
+ public int a19866;
+ public int a19867;
+ public int a19868;
+ public int a19869;
+ public int a19870;
+ public int a19871;
+ public int a19872;
+ public int a19873;
+ public int a19874;
+ public int a19875;
+ public int a19876;
+ public int a19877;
+ public int a19878;
+ public int a19879;
+ public int a19880;
+ public int a19881;
+ public int a19882;
+ public int a19883;
+ public int a19884;
+ public int a19885;
+ public int a19886;
+ public int a19887;
+ public int a19888;
+ public int a19889;
+ public int a19890;
+ public int a19891;
+ public int a19892;
+ public int a19893;
+ public int a19894;
+ public int a19895;
+ public int a19896;
+ public int a19897;
+ public int a19898;
+ public int a19899;
+ public int a19900;
+ public int a19901;
+ public int a19902;
+ public int a19903;
+ public int a19904;
+ public int a19905;
+ public int a19906;
+ public int a19907;
+ public int a19908;
+ public int a19909;
+ public int a19910;
+ public int a19911;
+ public int a19912;
+ public int a19913;
+ public int a19914;
+ public int a19915;
+ public int a19916;
+ public int a19917;
+ public int a19918;
+ public int a19919;
+ public int a19920;
+ public int a19921;
+ public int a19922;
+ public int a19923;
+ public int a19924;
+ public int a19925;
+ public int a19926;
+ public int a19927;
+ public int a19928;
+ public int a19929;
+ public int a19930;
+ public int a19931;
+ public int a19932;
+ public int a19933;
+ public int a19934;
+ public int a19935;
+ public int a19936;
+ public int a19937;
+ public int a19938;
+ public int a19939;
+ public int a19940;
+ public int a19941;
+ public int a19942;
+ public int a19943;
+ public int a19944;
+ public int a19945;
+ public int a19946;
+ public int a19947;
+ public int a19948;
+ public int a19949;
+ public int a19950;
+ public int a19951;
+ public int a19952;
+ public int a19953;
+ public int a19954;
+ public int a19955;
+ public int a19956;
+ public int a19957;
+ public int a19958;
+ public int a19959;
+ public int a19960;
+ public int a19961;
+ public int a19962;
+ public int a19963;
+ public int a19964;
+ public int a19965;
+ public int a19966;
+ public int a19967;
+ public int a19968;
+ public int a19969;
+ public int a19970;
+ public int a19971;
+ public int a19972;
+ public int a19973;
+ public int a19974;
+ public int a19975;
+ public int a19976;
+ public int a19977;
+ public int a19978;
+ public int a19979;
+ public int a19980;
+ public int a19981;
+ public int a19982;
+ public int a19983;
+ public int a19984;
+ public int a19985;
+ public int a19986;
+ public int a19987;
+ public int a19988;
+ public int a19989;
+ public int a19990;
+ public int a19991;
+ public int a19992;
+ public int a19993;
+ public int a19994;
+ public int a19995;
+ public int a19996;
+ public int a19997;
+ public int a19998;
+ public int a19999;
+ public int a20000;
+ public int a20001;
+ public int a20002;
+ public int a20003;
+ public int a20004;
+ public int a20005;
+ public int a20006;
+ public int a20007;
+ public int a20008;
+ public int a20009;
+ public int a20010;
+ public int a20011;
+ public int a20012;
+ public int a20013;
+ public int a20014;
+ public int a20015;
+ public int a20016;
+ public int a20017;
+ public int a20018;
+ public int a20019;
+ public int a20020;
+ public int a20021;
+ public int a20022;
+ public int a20023;
+ public int a20024;
+ public int a20025;
+ public int a20026;
+ public int a20027;
+ public int a20028;
+ public int a20029;
+ public int a20030;
+ public int a20031;
+ public int a20032;
+ public int a20033;
+ public int a20034;
+ public int a20035;
+ public int a20036;
+ public int a20037;
+ public int a20038;
+ public int a20039;
+ public int a20040;
+ public int a20041;
+ public int a20042;
+ public int a20043;
+ public int a20044;
+ public int a20045;
+ public int a20046;
+ public int a20047;
+ public int a20048;
+ public int a20049;
+ public int a20050;
+ public int a20051;
+ public int a20052;
+ public int a20053;
+ public int a20054;
+ public int a20055;
+ public int a20056;
+ public int a20057;
+ public int a20058;
+ public int a20059;
+ public int a20060;
+ public int a20061;
+ public int a20062;
+ public int a20063;
+ public int a20064;
+ public int a20065;
+ public int a20066;
+ public int a20067;
+ public int a20068;
+ public int a20069;
+ public int a20070;
+ public int a20071;
+ public int a20072;
+ public int a20073;
+ public int a20074;
+ public int a20075;
+ public int a20076;
+ public int a20077;
+ public int a20078;
+ public int a20079;
+ public int a20080;
+ public int a20081;
+ public int a20082;
+ public int a20083;
+ public int a20084;
+ public int a20085;
+ public int a20086;
+ public int a20087;
+ public int a20088;
+ public int a20089;
+ public int a20090;
+ public int a20091;
+ public int a20092;
+ public int a20093;
+ public int a20094;
+ public int a20095;
+ public int a20096;
+ public int a20097;
+ public int a20098;
+ public int a20099;
+ public int a20100;
+ public int a20101;
+ public int a20102;
+ public int a20103;
+ public int a20104;
+ public int a20105;
+ public int a20106;
+ public int a20107;
+ public int a20108;
+ public int a20109;
+ public int a20110;
+ public int a20111;
+ public int a20112;
+ public int a20113;
+ public int a20114;
+ public int a20115;
+ public int a20116;
+ public int a20117;
+ public int a20118;
+ public int a20119;
+ public int a20120;
+ public int a20121;
+ public int a20122;
+ public int a20123;
+ public int a20124;
+ public int a20125;
+ public int a20126;
+ public int a20127;
+ public int a20128;
+ public int a20129;
+ public int a20130;
+ public int a20131;
+ public int a20132;
+ public int a20133;
+ public int a20134;
+ public int a20135;
+ public int a20136;
+ public int a20137;
+ public int a20138;
+ public int a20139;
+ public int a20140;
+ public int a20141;
+ public int a20142;
+ public int a20143;
+ public int a20144;
+ public int a20145;
+ public int a20146;
+ public int a20147;
+ public int a20148;
+ public int a20149;
+ public int a20150;
+ public int a20151;
+ public int a20152;
+ public int a20153;
+ public int a20154;
+ public int a20155;
+ public int a20156;
+ public int a20157;
+ public int a20158;
+ public int a20159;
+ public int a20160;
+ public int a20161;
+ public int a20162;
+ public int a20163;
+ public int a20164;
+ public int a20165;
+ public int a20166;
+ public int a20167;
+ public int a20168;
+ public int a20169;
+ public int a20170;
+ public int a20171;
+ public int a20172;
+ public int a20173;
+ public int a20174;
+ public int a20175;
+ public int a20176;
+ public int a20177;
+ public int a20178;
+ public int a20179;
+ public int a20180;
+ public int a20181;
+ public int a20182;
+ public int a20183;
+ public int a20184;
+ public int a20185;
+ public int a20186;
+ public int a20187;
+ public int a20188;
+ public int a20189;
+ public int a20190;
+ public int a20191;
+ public int a20192;
+ public int a20193;
+ public int a20194;
+ public int a20195;
+ public int a20196;
+ public int a20197;
+ public int a20198;
+ public int a20199;
+ public int a20200;
+ public int a20201;
+ public int a20202;
+ public int a20203;
+ public int a20204;
+ public int a20205;
+ public int a20206;
+ public int a20207;
+ public int a20208;
+ public int a20209;
+ public int a20210;
+ public int a20211;
+ public int a20212;
+ public int a20213;
+ public int a20214;
+ public int a20215;
+ public int a20216;
+ public int a20217;
+ public int a20218;
+ public int a20219;
+ public int a20220;
+ public int a20221;
+ public int a20222;
+ public int a20223;
+ public int a20224;
+ public int a20225;
+ public int a20226;
+ public int a20227;
+ public int a20228;
+ public int a20229;
+ public int a20230;
+ public int a20231;
+ public int a20232;
+ public int a20233;
+ public int a20234;
+ public int a20235;
+ public int a20236;
+ public int a20237;
+ public int a20238;
+ public int a20239;
+ public int a20240;
+ public int a20241;
+ public int a20242;
+ public int a20243;
+ public int a20244;
+ public int a20245;
+ public int a20246;
+ public int a20247;
+ public int a20248;
+ public int a20249;
+ public int a20250;
+ public int a20251;
+ public int a20252;
+ public int a20253;
+ public int a20254;
+ public int a20255;
+ public int a20256;
+ public int a20257;
+ public int a20258;
+ public int a20259;
+ public int a20260;
+ public int a20261;
+ public int a20262;
+ public int a20263;
+ public int a20264;
+ public int a20265;
+ public int a20266;
+ public int a20267;
+ public int a20268;
+ public int a20269;
+ public int a20270;
+ public int a20271;
+ public int a20272;
+ public int a20273;
+ public int a20274;
+ public int a20275;
+ public int a20276;
+ public int a20277;
+ public int a20278;
+ public int a20279;
+ public int a20280;
+ public int a20281;
+ public int a20282;
+ public int a20283;
+ public int a20284;
+ public int a20285;
+ public int a20286;
+ public int a20287;
+ public int a20288;
+ public int a20289;
+ public int a20290;
+ public int a20291;
+ public int a20292;
+ public int a20293;
+ public int a20294;
+ public int a20295;
+ public int a20296;
+ public int a20297;
+ public int a20298;
+ public int a20299;
+ public int a20300;
+ public int a20301;
+ public int a20302;
+ public int a20303;
+ public int a20304;
+ public int a20305;
+ public int a20306;
+ public int a20307;
+ public int a20308;
+ public int a20309;
+ public int a20310;
+ public int a20311;
+ public int a20312;
+ public int a20313;
+ public int a20314;
+ public int a20315;
+ public int a20316;
+ public int a20317;
+ public int a20318;
+ public int a20319;
+ public int a20320;
+ public int a20321;
+ public int a20322;
+ public int a20323;
+ public int a20324;
+ public int a20325;
+ public int a20326;
+ public int a20327;
+ public int a20328;
+ public int a20329;
+ public int a20330;
+ public int a20331;
+ public int a20332;
+ public int a20333;
+ public int a20334;
+ public int a20335;
+ public int a20336;
+ public int a20337;
+ public int a20338;
+ public int a20339;
+ public int a20340;
+ public int a20341;
+ public int a20342;
+ public int a20343;
+ public int a20344;
+ public int a20345;
+ public int a20346;
+ public int a20347;
+ public int a20348;
+ public int a20349;
+ public int a20350;
+ public int a20351;
+ public int a20352;
+ public int a20353;
+ public int a20354;
+ public int a20355;
+ public int a20356;
+ public int a20357;
+ public int a20358;
+ public int a20359;
+ public int a20360;
+ public int a20361;
+ public int a20362;
+ public int a20363;
+ public int a20364;
+ public int a20365;
+ public int a20366;
+ public int a20367;
+ public int a20368;
+ public int a20369;
+ public int a20370;
+ public int a20371;
+ public int a20372;
+ public int a20373;
+ public int a20374;
+ public int a20375;
+ public int a20376;
+ public int a20377;
+ public int a20378;
+ public int a20379;
+ public int a20380;
+ public int a20381;
+ public int a20382;
+ public int a20383;
+ public int a20384;
+ public int a20385;
+ public int a20386;
+ public int a20387;
+ public int a20388;
+ public int a20389;
+ public int a20390;
+ public int a20391;
+ public int a20392;
+ public int a20393;
+ public int a20394;
+ public int a20395;
+ public int a20396;
+ public int a20397;
+ public int a20398;
+ public int a20399;
+ public int a20400;
+ public int a20401;
+ public int a20402;
+ public int a20403;
+ public int a20404;
+ public int a20405;
+ public int a20406;
+ public int a20407;
+ public int a20408;
+ public int a20409;
+ public int a20410;
+ public int a20411;
+ public int a20412;
+ public int a20413;
+ public int a20414;
+ public int a20415;
+ public int a20416;
+ public int a20417;
+ public int a20418;
+ public int a20419;
+ public int a20420;
+ public int a20421;
+ public int a20422;
+ public int a20423;
+ public int a20424;
+ public int a20425;
+ public int a20426;
+ public int a20427;
+ public int a20428;
+ public int a20429;
+ public int a20430;
+ public int a20431;
+ public int a20432;
+ public int a20433;
+ public int a20434;
+ public int a20435;
+ public int a20436;
+ public int a20437;
+ public int a20438;
+ public int a20439;
+ public int a20440;
+ public int a20441;
+ public int a20442;
+ public int a20443;
+ public int a20444;
+ public int a20445;
+ public int a20446;
+ public int a20447;
+ public int a20448;
+ public int a20449;
+ public int a20450;
+ public int a20451;
+ public int a20452;
+ public int a20453;
+ public int a20454;
+ public int a20455;
+ public int a20456;
+ public int a20457;
+ public int a20458;
+ public int a20459;
+ public int a20460;
+ public int a20461;
+ public int a20462;
+ public int a20463;
+ public int a20464;
+ public int a20465;
+ public int a20466;
+ public int a20467;
+ public int a20468;
+ public int a20469;
+ public int a20470;
+ public int a20471;
+ public int a20472;
+ public int a20473;
+ public int a20474;
+ public int a20475;
+ public int a20476;
+ public int a20477;
+ public int a20478;
+ public int a20479;
+ public int a20480;
+ public int a20481;
+ public int a20482;
+ public int a20483;
+ public int a20484;
+ public int a20485;
+ public int a20486;
+ public int a20487;
+ public int a20488;
+ public int a20489;
+ public int a20490;
+ public int a20491;
+ public int a20492;
+ public int a20493;
+ public int a20494;
+ public int a20495;
+ public int a20496;
+ public int a20497;
+ public int a20498;
+ public int a20499;
+ public int a20500;
+ public int a20501;
+ public int a20502;
+ public int a20503;
+ public int a20504;
+ public int a20505;
+ public int a20506;
+ public int a20507;
+ public int a20508;
+ public int a20509;
+ public int a20510;
+ public int a20511;
+ public int a20512;
+ public int a20513;
+ public int a20514;
+ public int a20515;
+ public int a20516;
+ public int a20517;
+ public int a20518;
+ public int a20519;
+ public int a20520;
+ public int a20521;
+ public int a20522;
+ public int a20523;
+ public int a20524;
+ public int a20525;
+ public int a20526;
+ public int a20527;
+ public int a20528;
+ public int a20529;
+ public int a20530;
+ public int a20531;
+ public int a20532;
+ public int a20533;
+ public int a20534;
+ public int a20535;
+ public int a20536;
+ public int a20537;
+ public int a20538;
+ public int a20539;
+ public int a20540;
+ public int a20541;
+ public int a20542;
+ public int a20543;
+ public int a20544;
+ public int a20545;
+ public int a20546;
+ public int a20547;
+ public int a20548;
+ public int a20549;
+ public int a20550;
+ public int a20551;
+ public int a20552;
+ public int a20553;
+ public int a20554;
+ public int a20555;
+ public int a20556;
+ public int a20557;
+ public int a20558;
+ public int a20559;
+ public int a20560;
+ public int a20561;
+ public int a20562;
+ public int a20563;
+ public int a20564;
+ public int a20565;
+ public int a20566;
+ public int a20567;
+ public int a20568;
+ public int a20569;
+ public int a20570;
+ public int a20571;
+ public int a20572;
+ public int a20573;
+ public int a20574;
+ public int a20575;
+ public int a20576;
+ public int a20577;
+ public int a20578;
+ public int a20579;
+ public int a20580;
+ public int a20581;
+ public int a20582;
+ public int a20583;
+ public int a20584;
+ public int a20585;
+ public int a20586;
+ public int a20587;
+ public int a20588;
+ public int a20589;
+ public int a20590;
+ public int a20591;
+ public int a20592;
+ public int a20593;
+ public int a20594;
+ public int a20595;
+ public int a20596;
+ public int a20597;
+ public int a20598;
+ public int a20599;
+ public int a20600;
+ public int a20601;
+ public int a20602;
+ public int a20603;
+ public int a20604;
+ public int a20605;
+ public int a20606;
+ public int a20607;
+ public int a20608;
+ public int a20609;
+ public int a20610;
+ public int a20611;
+ public int a20612;
+ public int a20613;
+ public int a20614;
+ public int a20615;
+ public int a20616;
+ public int a20617;
+ public int a20618;
+ public int a20619;
+ public int a20620;
+ public int a20621;
+ public int a20622;
+ public int a20623;
+ public int a20624;
+ public int a20625;
+ public int a20626;
+ public int a20627;
+ public int a20628;
+ public int a20629;
+ public int a20630;
+ public int a20631;
+ public int a20632;
+ public int a20633;
+ public int a20634;
+ public int a20635;
+ public int a20636;
+ public int a20637;
+ public int a20638;
+ public int a20639;
+ public int a20640;
+ public int a20641;
+ public int a20642;
+ public int a20643;
+ public int a20644;
+ public int a20645;
+ public int a20646;
+ public int a20647;
+ public int a20648;
+ public int a20649;
+ public int a20650;
+ public int a20651;
+ public int a20652;
+ public int a20653;
+ public int a20654;
+ public int a20655;
+ public int a20656;
+ public int a20657;
+ public int a20658;
+ public int a20659;
+ public int a20660;
+ public int a20661;
+ public int a20662;
+ public int a20663;
+ public int a20664;
+ public int a20665;
+ public int a20666;
+ public int a20667;
+ public int a20668;
+ public int a20669;
+ public int a20670;
+ public int a20671;
+ public int a20672;
+ public int a20673;
+ public int a20674;
+ public int a20675;
+ public int a20676;
+ public int a20677;
+ public int a20678;
+ public int a20679;
+ public int a20680;
+ public int a20681;
+ public int a20682;
+ public int a20683;
+ public int a20684;
+ public int a20685;
+ public int a20686;
+ public int a20687;
+ public int a20688;
+ public int a20689;
+ public int a20690;
+ public int a20691;
+ public int a20692;
+ public int a20693;
+ public int a20694;
+ public int a20695;
+ public int a20696;
+ public int a20697;
+ public int a20698;
+ public int a20699;
+ public int a20700;
+ public int a20701;
+ public int a20702;
+ public int a20703;
+ public int a20704;
+ public int a20705;
+ public int a20706;
+ public int a20707;
+ public int a20708;
+ public int a20709;
+ public int a20710;
+ public int a20711;
+ public int a20712;
+ public int a20713;
+ public int a20714;
+ public int a20715;
+ public int a20716;
+ public int a20717;
+ public int a20718;
+ public int a20719;
+ public int a20720;
+ public int a20721;
+ public int a20722;
+ public int a20723;
+ public int a20724;
+ public int a20725;
+ public int a20726;
+ public int a20727;
+ public int a20728;
+ public int a20729;
+ public int a20730;
+ public int a20731;
+ public int a20732;
+ public int a20733;
+ public int a20734;
+ public int a20735;
+ public int a20736;
+ public int a20737;
+ public int a20738;
+ public int a20739;
+ public int a20740;
+ public int a20741;
+ public int a20742;
+ public int a20743;
+ public int a20744;
+ public int a20745;
+ public int a20746;
+ public int a20747;
+ public int a20748;
+ public int a20749;
+ public int a20750;
+ public int a20751;
+ public int a20752;
+ public int a20753;
+ public int a20754;
+ public int a20755;
+ public int a20756;
+ public int a20757;
+ public int a20758;
+ public int a20759;
+ public int a20760;
+ public int a20761;
+ public int a20762;
+ public int a20763;
+ public int a20764;
+ public int a20765;
+ public int a20766;
+ public int a20767;
+ public int a20768;
+ public int a20769;
+ public int a20770;
+ public int a20771;
+ public int a20772;
+ public int a20773;
+ public int a20774;
+ public int a20775;
+ public int a20776;
+ public int a20777;
+ public int a20778;
+ public int a20779;
+ public int a20780;
+ public int a20781;
+ public int a20782;
+ public int a20783;
+ public int a20784;
+ public int a20785;
+ public int a20786;
+ public int a20787;
+ public int a20788;
+ public int a20789;
+ public int a20790;
+ public int a20791;
+ public int a20792;
+ public int a20793;
+ public int a20794;
+ public int a20795;
+ public int a20796;
+ public int a20797;
+ public int a20798;
+ public int a20799;
+ public int a20800;
+ public int a20801;
+ public int a20802;
+ public int a20803;
+ public int a20804;
+ public int a20805;
+ public int a20806;
+ public int a20807;
+ public int a20808;
+ public int a20809;
+ public int a20810;
+ public int a20811;
+ public int a20812;
+ public int a20813;
+ public int a20814;
+ public int a20815;
+ public int a20816;
+ public int a20817;
+ public int a20818;
+ public int a20819;
+ public int a20820;
+ public int a20821;
+ public int a20822;
+ public int a20823;
+ public int a20824;
+ public int a20825;
+ public int a20826;
+ public int a20827;
+ public int a20828;
+ public int a20829;
+ public int a20830;
+ public int a20831;
+ public int a20832;
+ public int a20833;
+ public int a20834;
+ public int a20835;
+ public int a20836;
+ public int a20837;
+ public int a20838;
+ public int a20839;
+ public int a20840;
+ public int a20841;
+ public int a20842;
+ public int a20843;
+ public int a20844;
+ public int a20845;
+ public int a20846;
+ public int a20847;
+ public int a20848;
+ public int a20849;
+ public int a20850;
+ public int a20851;
+ public int a20852;
+ public int a20853;
+ public int a20854;
+ public int a20855;
+ public int a20856;
+ public int a20857;
+ public int a20858;
+ public int a20859;
+ public int a20860;
+ public int a20861;
+ public int a20862;
+ public int a20863;
+ public int a20864;
+ public int a20865;
+ public int a20866;
+ public int a20867;
+ public int a20868;
+ public int a20869;
+ public int a20870;
+ public int a20871;
+ public int a20872;
+ public int a20873;
+ public int a20874;
+ public int a20875;
+ public int a20876;
+ public int a20877;
+ public int a20878;
+ public int a20879;
+ public int a20880;
+ public int a20881;
+ public int a20882;
+ public int a20883;
+ public int a20884;
+ public int a20885;
+ public int a20886;
+ public int a20887;
+ public int a20888;
+ public int a20889;
+ public int a20890;
+ public int a20891;
+ public int a20892;
+ public int a20893;
+ public int a20894;
+ public int a20895;
+ public int a20896;
+ public int a20897;
+ public int a20898;
+ public int a20899;
+ public int a20900;
+ public int a20901;
+ public int a20902;
+ public int a20903;
+ public int a20904;
+ public int a20905;
+ public int a20906;
+ public int a20907;
+ public int a20908;
+ public int a20909;
+ public int a20910;
+ public int a20911;
+ public int a20912;
+ public int a20913;
+ public int a20914;
+ public int a20915;
+ public int a20916;
+ public int a20917;
+ public int a20918;
+ public int a20919;
+ public int a20920;
+ public int a20921;
+ public int a20922;
+ public int a20923;
+ public int a20924;
+ public int a20925;
+ public int a20926;
+ public int a20927;
+ public int a20928;
+ public int a20929;
+ public int a20930;
+ public int a20931;
+ public int a20932;
+ public int a20933;
+ public int a20934;
+ public int a20935;
+ public int a20936;
+ public int a20937;
+ public int a20938;
+ public int a20939;
+ public int a20940;
+ public int a20941;
+ public int a20942;
+ public int a20943;
+ public int a20944;
+ public int a20945;
+ public int a20946;
+ public int a20947;
+ public int a20948;
+ public int a20949;
+ public int a20950;
+ public int a20951;
+ public int a20952;
+ public int a20953;
+ public int a20954;
+ public int a20955;
+ public int a20956;
+ public int a20957;
+ public int a20958;
+ public int a20959;
+ public int a20960;
+ public int a20961;
+ public int a20962;
+ public int a20963;
+ public int a20964;
+ public int a20965;
+ public int a20966;
+ public int a20967;
+ public int a20968;
+ public int a20969;
+ public int a20970;
+ public int a20971;
+ public int a20972;
+ public int a20973;
+ public int a20974;
+ public int a20975;
+ public int a20976;
+ public int a20977;
+ public int a20978;
+ public int a20979;
+ public int a20980;
+ public int a20981;
+ public int a20982;
+ public int a20983;
+ public int a20984;
+ public int a20985;
+ public int a20986;
+ public int a20987;
+ public int a20988;
+ public int a20989;
+ public int a20990;
+ public int a20991;
+ public int a20992;
+ public int a20993;
+ public int a20994;
+ public int a20995;
+ public int a20996;
+ public int a20997;
+ public int a20998;
+ public int a20999;
+ public int a21000;
+ public int a21001;
+ public int a21002;
+ public int a21003;
+ public int a21004;
+ public int a21005;
+ public int a21006;
+ public int a21007;
+ public int a21008;
+ public int a21009;
+ public int a21010;
+ public int a21011;
+ public int a21012;
+ public int a21013;
+ public int a21014;
+ public int a21015;
+ public int a21016;
+ public int a21017;
+ public int a21018;
+ public int a21019;
+ public int a21020;
+ public int a21021;
+ public int a21022;
+ public int a21023;
+ public int a21024;
+ public int a21025;
+ public int a21026;
+ public int a21027;
+ public int a21028;
+ public int a21029;
+ public int a21030;
+ public int a21031;
+ public int a21032;
+ public int a21033;
+ public int a21034;
+ public int a21035;
+ public int a21036;
+ public int a21037;
+ public int a21038;
+ public int a21039;
+ public int a21040;
+ public int a21041;
+ public int a21042;
+ public int a21043;
+ public int a21044;
+ public int a21045;
+ public int a21046;
+ public int a21047;
+ public int a21048;
+ public int a21049;
+ public int a21050;
+ public int a21051;
+ public int a21052;
+ public int a21053;
+ public int a21054;
+ public int a21055;
+ public int a21056;
+ public int a21057;
+ public int a21058;
+ public int a21059;
+ public int a21060;
+ public int a21061;
+ public int a21062;
+ public int a21063;
+ public int a21064;
+ public int a21065;
+ public int a21066;
+ public int a21067;
+ public int a21068;
+ public int a21069;
+ public int a21070;
+ public int a21071;
+ public int a21072;
+ public int a21073;
+ public int a21074;
+ public int a21075;
+ public int a21076;
+ public int a21077;
+ public int a21078;
+ public int a21079;
+ public int a21080;
+ public int a21081;
+ public int a21082;
+ public int a21083;
+ public int a21084;
+ public int a21085;
+ public int a21086;
+ public int a21087;
+ public int a21088;
+ public int a21089;
+ public int a21090;
+ public int a21091;
+ public int a21092;
+ public int a21093;
+ public int a21094;
+ public int a21095;
+ public int a21096;
+ public int a21097;
+ public int a21098;
+ public int a21099;
+ public int a21100;
+ public int a21101;
+ public int a21102;
+ public int a21103;
+ public int a21104;
+ public int a21105;
+ public int a21106;
+ public int a21107;
+ public int a21108;
+ public int a21109;
+ public int a21110;
+ public int a21111;
+ public int a21112;
+ public int a21113;
+ public int a21114;
+ public int a21115;
+ public int a21116;
+ public int a21117;
+ public int a21118;
+ public int a21119;
+ public int a21120;
+ public int a21121;
+ public int a21122;
+ public int a21123;
+ public int a21124;
+ public int a21125;
+ public int a21126;
+ public int a21127;
+ public int a21128;
+ public int a21129;
+ public int a21130;
+ public int a21131;
+ public int a21132;
+ public int a21133;
+ public int a21134;
+ public int a21135;
+ public int a21136;
+ public int a21137;
+ public int a21138;
+ public int a21139;
+ public int a21140;
+ public int a21141;
+ public int a21142;
+ public int a21143;
+ public int a21144;
+ public int a21145;
+ public int a21146;
+ public int a21147;
+ public int a21148;
+ public int a21149;
+ public int a21150;
+ public int a21151;
+ public int a21152;
+ public int a21153;
+ public int a21154;
+ public int a21155;
+ public int a21156;
+ public int a21157;
+ public int a21158;
+ public int a21159;
+ public int a21160;
+ public int a21161;
+ public int a21162;
+ public int a21163;
+ public int a21164;
+ public int a21165;
+ public int a21166;
+ public int a21167;
+ public int a21168;
+ public int a21169;
+ public int a21170;
+ public int a21171;
+ public int a21172;
+ public int a21173;
+ public int a21174;
+ public int a21175;
+ public int a21176;
+ public int a21177;
+ public int a21178;
+ public int a21179;
+ public int a21180;
+ public int a21181;
+ public int a21182;
+ public int a21183;
+ public int a21184;
+ public int a21185;
+ public int a21186;
+ public int a21187;
+ public int a21188;
+ public int a21189;
+ public int a21190;
+ public int a21191;
+ public int a21192;
+ public int a21193;
+ public int a21194;
+ public int a21195;
+ public int a21196;
+ public int a21197;
+ public int a21198;
+ public int a21199;
+ public int a21200;
+ public int a21201;
+ public int a21202;
+ public int a21203;
+ public int a21204;
+ public int a21205;
+ public int a21206;
+ public int a21207;
+ public int a21208;
+ public int a21209;
+ public int a21210;
+ public int a21211;
+ public int a21212;
+ public int a21213;
+ public int a21214;
+ public int a21215;
+ public int a21216;
+ public int a21217;
+ public int a21218;
+ public int a21219;
+ public int a21220;
+ public int a21221;
+ public int a21222;
+ public int a21223;
+ public int a21224;
+ public int a21225;
+ public int a21226;
+ public int a21227;
+ public int a21228;
+ public int a21229;
+ public int a21230;
+ public int a21231;
+ public int a21232;
+ public int a21233;
+ public int a21234;
+ public int a21235;
+ public int a21236;
+ public int a21237;
+ public int a21238;
+ public int a21239;
+ public int a21240;
+ public int a21241;
+ public int a21242;
+ public int a21243;
+ public int a21244;
+ public int a21245;
+ public int a21246;
+ public int a21247;
+ public int a21248;
+ public int a21249;
+ public int a21250;
+ public int a21251;
+ public int a21252;
+ public int a21253;
+ public int a21254;
+ public int a21255;
+ public int a21256;
+ public int a21257;
+ public int a21258;
+ public int a21259;
+ public int a21260;
+ public int a21261;
+ public int a21262;
+ public int a21263;
+ public int a21264;
+ public int a21265;
+ public int a21266;
+ public int a21267;
+ public int a21268;
+ public int a21269;
+ public int a21270;
+ public int a21271;
+ public int a21272;
+ public int a21273;
+ public int a21274;
+ public int a21275;
+ public int a21276;
+ public int a21277;
+ public int a21278;
+ public int a21279;
+ public int a21280;
+ public int a21281;
+ public int a21282;
+ public int a21283;
+ public int a21284;
+ public int a21285;
+ public int a21286;
+ public int a21287;
+ public int a21288;
+ public int a21289;
+ public int a21290;
+ public int a21291;
+ public int a21292;
+ public int a21293;
+ public int a21294;
+ public int a21295;
+ public int a21296;
+ public int a21297;
+ public int a21298;
+ public int a21299;
+ public int a21300;
+ public int a21301;
+ public int a21302;
+ public int a21303;
+ public int a21304;
+ public int a21305;
+ public int a21306;
+ public int a21307;
+ public int a21308;
+ public int a21309;
+ public int a21310;
+ public int a21311;
+ public int a21312;
+ public int a21313;
+ public int a21314;
+ public int a21315;
+ public int a21316;
+ public int a21317;
+ public int a21318;
+ public int a21319;
+ public int a21320;
+ public int a21321;
+ public int a21322;
+ public int a21323;
+ public int a21324;
+ public int a21325;
+ public int a21326;
+ public int a21327;
+ public int a21328;
+ public int a21329;
+ public int a21330;
+ public int a21331;
+ public int a21332;
+ public int a21333;
+ public int a21334;
+ public int a21335;
+ public int a21336;
+ public int a21337;
+ public int a21338;
+ public int a21339;
+ public int a21340;
+ public int a21341;
+ public int a21342;
+ public int a21343;
+ public int a21344;
+ public int a21345;
+ public int a21346;
+ public int a21347;
+ public int a21348;
+ public int a21349;
+ public int a21350;
+ public int a21351;
+ public int a21352;
+ public int a21353;
+ public int a21354;
+ public int a21355;
+ public int a21356;
+ public int a21357;
+ public int a21358;
+ public int a21359;
+ public int a21360;
+ public int a21361;
+ public int a21362;
+ public int a21363;
+ public int a21364;
+ public int a21365;
+ public int a21366;
+ public int a21367;
+ public int a21368;
+ public int a21369;
+ public int a21370;
+ public int a21371;
+ public int a21372;
+ public int a21373;
+ public int a21374;
+ public int a21375;
+ public int a21376;
+ public int a21377;
+ public int a21378;
+ public int a21379;
+ public int a21380;
+ public int a21381;
+ public int a21382;
+ public int a21383;
+ public int a21384;
+ public int a21385;
+ public int a21386;
+ public int a21387;
+ public int a21388;
+ public int a21389;
+ public int a21390;
+ public int a21391;
+ public int a21392;
+ public int a21393;
+ public int a21394;
+ public int a21395;
+ public int a21396;
+ public int a21397;
+ public int a21398;
+ public int a21399;
+ public int a21400;
+ public int a21401;
+ public int a21402;
+ public int a21403;
+ public int a21404;
+ public int a21405;
+ public int a21406;
+ public int a21407;
+ public int a21408;
+ public int a21409;
+ public int a21410;
+ public int a21411;
+ public int a21412;
+ public int a21413;
+ public int a21414;
+ public int a21415;
+ public int a21416;
+ public int a21417;
+ public int a21418;
+ public int a21419;
+ public int a21420;
+ public int a21421;
+ public int a21422;
+ public int a21423;
+ public int a21424;
+ public int a21425;
+ public int a21426;
+ public int a21427;
+ public int a21428;
+ public int a21429;
+ public int a21430;
+ public int a21431;
+ public int a21432;
+ public int a21433;
+ public int a21434;
+ public int a21435;
+ public int a21436;
+ public int a21437;
+ public int a21438;
+ public int a21439;
+ public int a21440;
+ public int a21441;
+ public int a21442;
+ public int a21443;
+ public int a21444;
+ public int a21445;
+ public int a21446;
+ public int a21447;
+ public int a21448;
+ public int a21449;
+ public int a21450;
+ public int a21451;
+ public int a21452;
+ public int a21453;
+ public int a21454;
+ public int a21455;
+ public int a21456;
+ public int a21457;
+ public int a21458;
+ public int a21459;
+ public int a21460;
+ public int a21461;
+ public int a21462;
+ public int a21463;
+ public int a21464;
+ public int a21465;
+ public int a21466;
+ public int a21467;
+ public int a21468;
+ public int a21469;
+ public int a21470;
+ public int a21471;
+ public int a21472;
+ public int a21473;
+ public int a21474;
+ public int a21475;
+ public int a21476;
+ public int a21477;
+ public int a21478;
+ public int a21479;
+ public int a21480;
+ public int a21481;
+ public int a21482;
+ public int a21483;
+ public int a21484;
+ public int a21485;
+ public int a21486;
+ public int a21487;
+ public int a21488;
+ public int a21489;
+ public int a21490;
+ public int a21491;
+ public int a21492;
+ public int a21493;
+ public int a21494;
+ public int a21495;
+ public int a21496;
+ public int a21497;
+ public int a21498;
+ public int a21499;
+ public int a21500;
+ public int a21501;
+ public int a21502;
+ public int a21503;
+ public int a21504;
+ public int a21505;
+ public int a21506;
+ public int a21507;
+ public int a21508;
+ public int a21509;
+ public int a21510;
+ public int a21511;
+ public int a21512;
+ public int a21513;
+ public int a21514;
+ public int a21515;
+ public int a21516;
+ public int a21517;
+ public int a21518;
+ public int a21519;
+ public int a21520;
+ public int a21521;
+ public int a21522;
+ public int a21523;
+ public int a21524;
+ public int a21525;
+ public int a21526;
+ public int a21527;
+ public int a21528;
+ public int a21529;
+ public int a21530;
+ public int a21531;
+ public int a21532;
+ public int a21533;
+ public int a21534;
+ public int a21535;
+ public int a21536;
+ public int a21537;
+ public int a21538;
+ public int a21539;
+ public int a21540;
+ public int a21541;
+ public int a21542;
+ public int a21543;
+ public int a21544;
+ public int a21545;
+ public int a21546;
+ public int a21547;
+ public int a21548;
+ public int a21549;
+ public int a21550;
+ public int a21551;
+ public int a21552;
+ public int a21553;
+ public int a21554;
+ public int a21555;
+ public int a21556;
+ public int a21557;
+ public int a21558;
+ public int a21559;
+ public int a21560;
+ public int a21561;
+ public int a21562;
+ public int a21563;
+ public int a21564;
+ public int a21565;
+ public int a21566;
+ public int a21567;
+ public int a21568;
+ public int a21569;
+ public int a21570;
+ public int a21571;
+ public int a21572;
+ public int a21573;
+ public int a21574;
+ public int a21575;
+ public int a21576;
+ public int a21577;
+ public int a21578;
+ public int a21579;
+ public int a21580;
+ public int a21581;
+ public int a21582;
+ public int a21583;
+ public int a21584;
+ public int a21585;
+ public int a21586;
+ public int a21587;
+ public int a21588;
+ public int a21589;
+ public int a21590;
+ public int a21591;
+ public int a21592;
+ public int a21593;
+ public int a21594;
+ public int a21595;
+ public int a21596;
+ public int a21597;
+ public int a21598;
+ public int a21599;
+ public int a21600;
+ public int a21601;
+ public int a21602;
+ public int a21603;
+ public int a21604;
+ public int a21605;
+ public int a21606;
+ public int a21607;
+ public int a21608;
+ public int a21609;
+ public int a21610;
+ public int a21611;
+ public int a21612;
+ public int a21613;
+ public int a21614;
+ public int a21615;
+ public int a21616;
+ public int a21617;
+ public int a21618;
+ public int a21619;
+ public int a21620;
+ public int a21621;
+ public int a21622;
+ public int a21623;
+ public int a21624;
+ public int a21625;
+ public int a21626;
+ public int a21627;
+ public int a21628;
+ public int a21629;
+ public int a21630;
+ public int a21631;
+ public int a21632;
+ public int a21633;
+ public int a21634;
+ public int a21635;
+ public int a21636;
+ public int a21637;
+ public int a21638;
+ public int a21639;
+ public int a21640;
+ public int a21641;
+ public int a21642;
+ public int a21643;
+ public int a21644;
+ public int a21645;
+ public int a21646;
+ public int a21647;
+ public int a21648;
+ public int a21649;
+ public int a21650;
+ public int a21651;
+ public int a21652;
+ public int a21653;
+ public int a21654;
+ public int a21655;
+ public int a21656;
+ public int a21657;
+ public int a21658;
+ public int a21659;
+ public int a21660;
+ public int a21661;
+ public int a21662;
+ public int a21663;
+ public int a21664;
+ public int a21665;
+ public int a21666;
+ public int a21667;
+ public int a21668;
+ public int a21669;
+ public int a21670;
+ public int a21671;
+ public int a21672;
+ public int a21673;
+ public int a21674;
+ public int a21675;
+ public int a21676;
+ public int a21677;
+ public int a21678;
+ public int a21679;
+ public int a21680;
+ public int a21681;
+ public int a21682;
+ public int a21683;
+ public int a21684;
+ public int a21685;
+ public int a21686;
+ public int a21687;
+ public int a21688;
+ public int a21689;
+ public int a21690;
+ public int a21691;
+ public int a21692;
+ public int a21693;
+ public int a21694;
+ public int a21695;
+ public int a21696;
+ public int a21697;
+ public int a21698;
+ public int a21699;
+ public int a21700;
+ public int a21701;
+ public int a21702;
+ public int a21703;
+ public int a21704;
+ public int a21705;
+ public int a21706;
+ public int a21707;
+ public int a21708;
+ public int a21709;
+ public int a21710;
+ public int a21711;
+ public int a21712;
+ public int a21713;
+ public int a21714;
+ public int a21715;
+ public int a21716;
+ public int a21717;
+ public int a21718;
+ public int a21719;
+ public int a21720;
+ public int a21721;
+ public int a21722;
+ public int a21723;
+ public int a21724;
+ public int a21725;
+ public int a21726;
+ public int a21727;
+ public int a21728;
+ public int a21729;
+ public int a21730;
+ public int a21731;
+ public int a21732;
+ public int a21733;
+ public int a21734;
+ public int a21735;
+ public int a21736;
+ public int a21737;
+ public int a21738;
+ public int a21739;
+ public int a21740;
+ public int a21741;
+ public int a21742;
+ public int a21743;
+ public int a21744;
+ public int a21745;
+ public int a21746;
+ public int a21747;
+ public int a21748;
+ public int a21749;
+ public int a21750;
+ public int a21751;
+ public int a21752;
+ public int a21753;
+ public int a21754;
+ public int a21755;
+ public int a21756;
+ public int a21757;
+ public int a21758;
+ public int a21759;
+ public int a21760;
+ public int a21761;
+ public int a21762;
+ public int a21763;
+ public int a21764;
+ public int a21765;
+ public int a21766;
+ public int a21767;
+ public int a21768;
+ public int a21769;
+ public int a21770;
+ public int a21771;
+ public int a21772;
+ public int a21773;
+ public int a21774;
+ public int a21775;
+ public int a21776;
+ public int a21777;
+ public int a21778;
+ public int a21779;
+ public int a21780;
+ public int a21781;
+ public int a21782;
+ public int a21783;
+ public int a21784;
+ public int a21785;
+ public int a21786;
+ public int a21787;
+ public int a21788;
+ public int a21789;
+ public int a21790;
+ public int a21791;
+ public int a21792;
+ public int a21793;
+ public int a21794;
+ public int a21795;
+ public int a21796;
+ public int a21797;
+ public int a21798;
+ public int a21799;
+ public int a21800;
+ public int a21801;
+ public int a21802;
+ public int a21803;
+ public int a21804;
+ public int a21805;
+ public int a21806;
+ public int a21807;
+ public int a21808;
+ public int a21809;
+ public int a21810;
+ public int a21811;
+ public int a21812;
+ public int a21813;
+ public int a21814;
+ public int a21815;
+ public int a21816;
+ public int a21817;
+ public int a21818;
+ public int a21819;
+ public int a21820;
+ public int a21821;
+ public int a21822;
+ public int a21823;
+ public int a21824;
+ public int a21825;
+ public int a21826;
+ public int a21827;
+ public int a21828;
+ public int a21829;
+ public int a21830;
+ public int a21831;
+ public int a21832;
+ public int a21833;
+ public int a21834;
+ public int a21835;
+ public int a21836;
+ public int a21837;
+ public int a21838;
+ public int a21839;
+ public int a21840;
+ public int a21841;
+ public int a21842;
+ public int a21843;
+ public int a21844;
+ public int a21845;
+ public int a21846;
+ public int a21847;
+ public int a21848;
+ public int a21849;
+ public int a21850;
+ public int a21851;
+ public int a21852;
+ public int a21853;
+ public int a21854;
+ public int a21855;
+ public int a21856;
+ public int a21857;
+ public int a21858;
+ public int a21859;
+ public int a21860;
+ public int a21861;
+ public int a21862;
+ public int a21863;
+ public int a21864;
+ public int a21865;
+ public int a21866;
+ public int a21867;
+ public int a21868;
+ public int a21869;
+ public int a21870;
+ public int a21871;
+ public int a21872;
+ public int a21873;
+ public int a21874;
+ public int a21875;
+ public int a21876;
+ public int a21877;
+ public int a21878;
+ public int a21879;
+ public int a21880;
+ public int a21881;
+ public int a21882;
+ public int a21883;
+ public int a21884;
+ public int a21885;
+ public int a21886;
+ public int a21887;
+ public int a21888;
+ public int a21889;
+ public int a21890;
+ public int a21891;
+ public int a21892;
+ public int a21893;
+ public int a21894;
+ public int a21895;
+ public int a21896;
+ public int a21897;
+ public int a21898;
+ public int a21899;
+ public int a21900;
+ public int a21901;
+ public int a21902;
+ public int a21903;
+ public int a21904;
+ public int a21905;
+ public int a21906;
+ public int a21907;
+ public int a21908;
+ public int a21909;
+ public int a21910;
+ public int a21911;
+ public int a21912;
+ public int a21913;
+ public int a21914;
+ public int a21915;
+ public int a21916;
+ public int a21917;
+ public int a21918;
+ public int a21919;
+ public int a21920;
+ public int a21921;
+ public int a21922;
+ public int a21923;
+ public int a21924;
+ public int a21925;
+ public int a21926;
+ public int a21927;
+ public int a21928;
+ public int a21929;
+ public int a21930;
+ public int a21931;
+ public int a21932;
+ public int a21933;
+ public int a21934;
+ public int a21935;
+ public int a21936;
+ public int a21937;
+ public int a21938;
+ public int a21939;
+ public int a21940;
+ public int a21941;
+ public int a21942;
+ public int a21943;
+ public int a21944;
+ public int a21945;
+ public int a21946;
+ public int a21947;
+ public int a21948;
+ public int a21949;
+ public int a21950;
+ public int a21951;
+ public int a21952;
+ public int a21953;
+ public int a21954;
+ public int a21955;
+ public int a21956;
+ public int a21957;
+ public int a21958;
+ public int a21959;
+ public int a21960;
+ public int a21961;
+ public int a21962;
+ public int a21963;
+ public int a21964;
+ public int a21965;
+ public int a21966;
+ public int a21967;
+ public int a21968;
+ public int a21969;
+ public int a21970;
+ public int a21971;
+ public int a21972;
+ public int a21973;
+ public int a21974;
+ public int a21975;
+ public int a21976;
+ public int a21977;
+ public int a21978;
+ public int a21979;
+ public int a21980;
+ public int a21981;
+ public int a21982;
+ public int a21983;
+ public int a21984;
+ public int a21985;
+ public int a21986;
+ public int a21987;
+ public int a21988;
+ public int a21989;
+ public int a21990;
+ public int a21991;
+ public int a21992;
+ public int a21993;
+ public int a21994;
+ public int a21995;
+ public int a21996;
+ public int a21997;
+ public int a21998;
+ public int a21999;
+ public int a22000;
+ public int a22001;
+ public int a22002;
+ public int a22003;
+ public int a22004;
+ public int a22005;
+ public int a22006;
+ public int a22007;
+ public int a22008;
+ public int a22009;
+ public int a22010;
+ public int a22011;
+ public int a22012;
+ public int a22013;
+ public int a22014;
+ public int a22015;
+ public int a22016;
+ public int a22017;
+ public int a22018;
+ public int a22019;
+ public int a22020;
+ public int a22021;
+ public int a22022;
+ public int a22023;
+ public int a22024;
+ public int a22025;
+ public int a22026;
+ public int a22027;
+ public int a22028;
+ public int a22029;
+ public int a22030;
+ public int a22031;
+ public int a22032;
+ public int a22033;
+ public int a22034;
+ public int a22035;
+ public int a22036;
+ public int a22037;
+ public int a22038;
+ public int a22039;
+ public int a22040;
+ public int a22041;
+ public int a22042;
+ public int a22043;
+ public int a22044;
+ public int a22045;
+ public int a22046;
+ public int a22047;
+ public int a22048;
+ public int a22049;
+ public int a22050;
+ public int a22051;
+ public int a22052;
+ public int a22053;
+ public int a22054;
+ public int a22055;
+ public int a22056;
+ public int a22057;
+ public int a22058;
+ public int a22059;
+ public int a22060;
+ public int a22061;
+ public int a22062;
+ public int a22063;
+ public int a22064;
+ public int a22065;
+ public int a22066;
+ public int a22067;
+ public int a22068;
+ public int a22069;
+ public int a22070;
+ public int a22071;
+ public int a22072;
+ public int a22073;
+ public int a22074;
+ public int a22075;
+ public int a22076;
+ public int a22077;
+ public int a22078;
+ public int a22079;
+ public int a22080;
+ public int a22081;
+ public int a22082;
+ public int a22083;
+ public int a22084;
+ public int a22085;
+ public int a22086;
+ public int a22087;
+ public int a22088;
+ public int a22089;
+ public int a22090;
+ public int a22091;
+ public int a22092;
+ public int a22093;
+ public int a22094;
+ public int a22095;
+ public int a22096;
+ public int a22097;
+ public int a22098;
+ public int a22099;
+ public int a22100;
+ public int a22101;
+ public int a22102;
+ public int a22103;
+ public int a22104;
+ public int a22105;
+ public int a22106;
+ public int a22107;
+ public int a22108;
+ public int a22109;
+ public int a22110;
+ public int a22111;
+ public int a22112;
+ public int a22113;
+ public int a22114;
+ public int a22115;
+ public int a22116;
+ public int a22117;
+ public int a22118;
+ public int a22119;
+ public int a22120;
+ public int a22121;
+ public int a22122;
+ public int a22123;
+ public int a22124;
+ public int a22125;
+ public int a22126;
+ public int a22127;
+ public int a22128;
+ public int a22129;
+ public int a22130;
+ public int a22131;
+ public int a22132;
+ public int a22133;
+ public int a22134;
+ public int a22135;
+ public int a22136;
+ public int a22137;
+ public int a22138;
+ public int a22139;
+ public int a22140;
+ public int a22141;
+ public int a22142;
+ public int a22143;
+ public int a22144;
+ public int a22145;
+ public int a22146;
+ public int a22147;
+ public int a22148;
+ public int a22149;
+ public int a22150;
+ public int a22151;
+ public int a22152;
+ public int a22153;
+ public int a22154;
+ public int a22155;
+ public int a22156;
+ public int a22157;
+ public int a22158;
+ public int a22159;
+ public int a22160;
+ public int a22161;
+ public int a22162;
+ public int a22163;
+ public int a22164;
+ public int a22165;
+ public int a22166;
+ public int a22167;
+ public int a22168;
+ public int a22169;
+ public int a22170;
+ public int a22171;
+ public int a22172;
+ public int a22173;
+ public int a22174;
+ public int a22175;
+ public int a22176;
+ public int a22177;
+ public int a22178;
+ public int a22179;
+ public int a22180;
+ public int a22181;
+ public int a22182;
+ public int a22183;
+ public int a22184;
+ public int a22185;
+ public int a22186;
+ public int a22187;
+ public int a22188;
+ public int a22189;
+ public int a22190;
+ public int a22191;
+ public int a22192;
+ public int a22193;
+ public int a22194;
+ public int a22195;
+ public int a22196;
+ public int a22197;
+ public int a22198;
+ public int a22199;
+ public int a22200;
+ public int a22201;
+ public int a22202;
+ public int a22203;
+ public int a22204;
+ public int a22205;
+ public int a22206;
+ public int a22207;
+ public int a22208;
+ public int a22209;
+ public int a22210;
+ public int a22211;
+ public int a22212;
+ public int a22213;
+ public int a22214;
+ public int a22215;
+ public int a22216;
+ public int a22217;
+ public int a22218;
+ public int a22219;
+ public int a22220;
+ public int a22221;
+ public int a22222;
+ public int a22223;
+ public int a22224;
+ public int a22225;
+ public int a22226;
+ public int a22227;
+ public int a22228;
+ public int a22229;
+ public int a22230;
+ public int a22231;
+ public int a22232;
+ public int a22233;
+ public int a22234;
+ public int a22235;
+ public int a22236;
+ public int a22237;
+ public int a22238;
+ public int a22239;
+ public int a22240;
+ public int a22241;
+ public int a22242;
+ public int a22243;
+ public int a22244;
+ public int a22245;
+ public int a22246;
+ public int a22247;
+ public int a22248;
+ public int a22249;
+ public int a22250;
+ public int a22251;
+ public int a22252;
+ public int a22253;
+ public int a22254;
+ public int a22255;
+ public int a22256;
+ public int a22257;
+ public int a22258;
+ public int a22259;
+ public int a22260;
+ public int a22261;
+ public int a22262;
+ public int a22263;
+ public int a22264;
+ public int a22265;
+ public int a22266;
+ public int a22267;
+ public int a22268;
+ public int a22269;
+ public int a22270;
+ public int a22271;
+ public int a22272;
+ public int a22273;
+ public int a22274;
+ public int a22275;
+ public int a22276;
+ public int a22277;
+ public int a22278;
+ public int a22279;
+ public int a22280;
+ public int a22281;
+ public int a22282;
+ public int a22283;
+ public int a22284;
+ public int a22285;
+ public int a22286;
+ public int a22287;
+ public int a22288;
+ public int a22289;
+ public int a22290;
+ public int a22291;
+ public int a22292;
+ public int a22293;
+ public int a22294;
+ public int a22295;
+ public int a22296;
+ public int a22297;
+ public int a22298;
+ public int a22299;
+ public int a22300;
+ public int a22301;
+ public int a22302;
+ public int a22303;
+ public int a22304;
+ public int a22305;
+ public int a22306;
+ public int a22307;
+ public int a22308;
+ public int a22309;
+ public int a22310;
+ public int a22311;
+ public int a22312;
+ public int a22313;
+ public int a22314;
+ public int a22315;
+ public int a22316;
+ public int a22317;
+ public int a22318;
+ public int a22319;
+ public int a22320;
+ public int a22321;
+ public int a22322;
+ public int a22323;
+ public int a22324;
+ public int a22325;
+ public int a22326;
+ public int a22327;
+ public int a22328;
+ public int a22329;
+ public int a22330;
+ public int a22331;
+ public int a22332;
+ public int a22333;
+ public int a22334;
+ public int a22335;
+ public int a22336;
+ public int a22337;
+ public int a22338;
+ public int a22339;
+ public int a22340;
+ public int a22341;
+ public int a22342;
+ public int a22343;
+ public int a22344;
+ public int a22345;
+ public int a22346;
+ public int a22347;
+ public int a22348;
+ public int a22349;
+ public int a22350;
+ public int a22351;
+ public int a22352;
+ public int a22353;
+ public int a22354;
+ public int a22355;
+ public int a22356;
+ public int a22357;
+ public int a22358;
+ public int a22359;
+ public int a22360;
+ public int a22361;
+ public int a22362;
+ public int a22363;
+ public int a22364;
+ public int a22365;
+ public int a22366;
+ public int a22367;
+ public int a22368;
+ public int a22369;
+ public int a22370;
+ public int a22371;
+ public int a22372;
+ public int a22373;
+ public int a22374;
+ public int a22375;
+ public int a22376;
+ public int a22377;
+ public int a22378;
+ public int a22379;
+ public int a22380;
+ public int a22381;
+ public int a22382;
+ public int a22383;
+ public int a22384;
+ public int a22385;
+ public int a22386;
+ public int a22387;
+ public int a22388;
+ public int a22389;
+ public int a22390;
+ public int a22391;
+ public int a22392;
+ public int a22393;
+ public int a22394;
+ public int a22395;
+ public int a22396;
+ public int a22397;
+ public int a22398;
+ public int a22399;
+ public int a22400;
+ public int a22401;
+ public int a22402;
+ public int a22403;
+ public int a22404;
+ public int a22405;
+ public int a22406;
+ public int a22407;
+ public int a22408;
+ public int a22409;
+ public int a22410;
+ public int a22411;
+ public int a22412;
+ public int a22413;
+ public int a22414;
+ public int a22415;
+ public int a22416;
+ public int a22417;
+ public int a22418;
+ public int a22419;
+ public int a22420;
+ public int a22421;
+ public int a22422;
+ public int a22423;
+ public int a22424;
+ public int a22425;
+ public int a22426;
+ public int a22427;
+ public int a22428;
+ public int a22429;
+ public int a22430;
+ public int a22431;
+ public int a22432;
+ public int a22433;
+ public int a22434;
+ public int a22435;
+ public int a22436;
+ public int a22437;
+ public int a22438;
+ public int a22439;
+ public int a22440;
+ public int a22441;
+ public int a22442;
+ public int a22443;
+ public int a22444;
+ public int a22445;
+ public int a22446;
+ public int a22447;
+ public int a22448;
+ public int a22449;
+ public int a22450;
+ public int a22451;
+ public int a22452;
+ public int a22453;
+ public int a22454;
+ public int a22455;
+ public int a22456;
+ public int a22457;
+ public int a22458;
+ public int a22459;
+ public int a22460;
+ public int a22461;
+ public int a22462;
+ public int a22463;
+ public int a22464;
+ public int a22465;
+ public int a22466;
+ public int a22467;
+ public int a22468;
+ public int a22469;
+ public int a22470;
+ public int a22471;
+ public int a22472;
+ public int a22473;
+ public int a22474;
+ public int a22475;
+ public int a22476;
+ public int a22477;
+ public int a22478;
+ public int a22479;
+ public int a22480;
+ public int a22481;
+ public int a22482;
+ public int a22483;
+ public int a22484;
+ public int a22485;
+ public int a22486;
+ public int a22487;
+ public int a22488;
+ public int a22489;
+ public int a22490;
+ public int a22491;
+ public int a22492;
+ public int a22493;
+ public int a22494;
+ public int a22495;
+ public int a22496;
+ public int a22497;
+ public int a22498;
+ public int a22499;
+ public int a22500;
+ public int a22501;
+ public int a22502;
+ public int a22503;
+ public int a22504;
+ public int a22505;
+ public int a22506;
+ public int a22507;
+ public int a22508;
+ public int a22509;
+ public int a22510;
+ public int a22511;
+ public int a22512;
+ public int a22513;
+ public int a22514;
+ public int a22515;
+ public int a22516;
+ public int a22517;
+ public int a22518;
+ public int a22519;
+ public int a22520;
+ public int a22521;
+ public int a22522;
+ public int a22523;
+ public int a22524;
+ public int a22525;
+ public int a22526;
+ public int a22527;
+ public int a22528;
+ public int a22529;
+ public int a22530;
+ public int a22531;
+ public int a22532;
+ public int a22533;
+ public int a22534;
+ public int a22535;
+ public int a22536;
+ public int a22537;
+ public int a22538;
+ public int a22539;
+ public int a22540;
+ public int a22541;
+ public int a22542;
+ public int a22543;
+ public int a22544;
+ public int a22545;
+ public int a22546;
+ public int a22547;
+ public int a22548;
+ public int a22549;
+ public int a22550;
+ public int a22551;
+ public int a22552;
+ public int a22553;
+ public int a22554;
+ public int a22555;
+ public int a22556;
+ public int a22557;
+ public int a22558;
+ public int a22559;
+ public int a22560;
+ public int a22561;
+ public int a22562;
+ public int a22563;
+ public int a22564;
+ public int a22565;
+ public int a22566;
+ public int a22567;
+ public int a22568;
+ public int a22569;
+ public int a22570;
+ public int a22571;
+ public int a22572;
+ public int a22573;
+ public int a22574;
+ public int a22575;
+ public int a22576;
+ public int a22577;
+ public int a22578;
+ public int a22579;
+ public int a22580;
+ public int a22581;
+ public int a22582;
+ public int a22583;
+ public int a22584;
+ public int a22585;
+ public int a22586;
+ public int a22587;
+ public int a22588;
+ public int a22589;
+ public int a22590;
+ public int a22591;
+ public int a22592;
+ public int a22593;
+ public int a22594;
+ public int a22595;
+ public int a22596;
+ public int a22597;
+ public int a22598;
+ public int a22599;
+ public int a22600;
+ public int a22601;
+ public int a22602;
+ public int a22603;
+ public int a22604;
+ public int a22605;
+ public int a22606;
+ public int a22607;
+ public int a22608;
+ public int a22609;
+ public int a22610;
+ public int a22611;
+ public int a22612;
+ public int a22613;
+ public int a22614;
+ public int a22615;
+ public int a22616;
+ public int a22617;
+ public int a22618;
+ public int a22619;
+ public int a22620;
+ public int a22621;
+ public int a22622;
+ public int a22623;
+ public int a22624;
+ public int a22625;
+ public int a22626;
+ public int a22627;
+ public int a22628;
+ public int a22629;
+ public int a22630;
+ public int a22631;
+ public int a22632;
+ public int a22633;
+ public int a22634;
+ public int a22635;
+ public int a22636;
+ public int a22637;
+ public int a22638;
+ public int a22639;
+ public int a22640;
+ public int a22641;
+ public int a22642;
+ public int a22643;
+ public int a22644;
+ public int a22645;
+ public int a22646;
+ public int a22647;
+ public int a22648;
+ public int a22649;
+ public int a22650;
+ public int a22651;
+ public int a22652;
+ public int a22653;
+ public int a22654;
+ public int a22655;
+ public int a22656;
+ public int a22657;
+ public int a22658;
+ public int a22659;
+ public int a22660;
+ public int a22661;
+ public int a22662;
+ public int a22663;
+ public int a22664;
+ public int a22665;
+ public int a22666;
+ public int a22667;
+ public int a22668;
+ public int a22669;
+ public int a22670;
+ public int a22671;
+ public int a22672;
+ public int a22673;
+ public int a22674;
+ public int a22675;
+ public int a22676;
+ public int a22677;
+ public int a22678;
+ public int a22679;
+ public int a22680;
+ public int a22681;
+ public int a22682;
+ public int a22683;
+ public int a22684;
+ public int a22685;
+ public int a22686;
+ public int a22687;
+ public int a22688;
+ public int a22689;
+ public int a22690;
+ public int a22691;
+ public int a22692;
+ public int a22693;
+ public int a22694;
+ public int a22695;
+ public int a22696;
+ public int a22697;
+ public int a22698;
+ public int a22699;
+ public int a22700;
+ public int a22701;
+ public int a22702;
+ public int a22703;
+ public int a22704;
+ public int a22705;
+ public int a22706;
+ public int a22707;
+ public int a22708;
+ public int a22709;
+ public int a22710;
+ public int a22711;
+ public int a22712;
+ public int a22713;
+ public int a22714;
+ public int a22715;
+ public int a22716;
+ public int a22717;
+ public int a22718;
+ public int a22719;
+ public int a22720;
+ public int a22721;
+ public int a22722;
+ public int a22723;
+ public int a22724;
+ public int a22725;
+ public int a22726;
+ public int a22727;
+ public int a22728;
+ public int a22729;
+ public int a22730;
+ public int a22731;
+ public int a22732;
+ public int a22733;
+ public int a22734;
+ public int a22735;
+ public int a22736;
+ public int a22737;
+ public int a22738;
+ public int a22739;
+ public int a22740;
+ public int a22741;
+ public int a22742;
+ public int a22743;
+ public int a22744;
+ public int a22745;
+ public int a22746;
+ public int a22747;
+ public int a22748;
+ public int a22749;
+ public int a22750;
+ public int a22751;
+ public int a22752;
+ public int a22753;
+ public int a22754;
+ public int a22755;
+ public int a22756;
+ public int a22757;
+ public int a22758;
+ public int a22759;
+ public int a22760;
+ public int a22761;
+ public int a22762;
+ public int a22763;
+ public int a22764;
+ public int a22765;
+ public int a22766;
+ public int a22767;
+ public int a22768;
+ public int a22769;
+ public int a22770;
+ public int a22771;
+ public int a22772;
+ public int a22773;
+ public int a22774;
+ public int a22775;
+ public int a22776;
+ public int a22777;
+ public int a22778;
+ public int a22779;
+ public int a22780;
+ public int a22781;
+ public int a22782;
+ public int a22783;
+ public int a22784;
+ public int a22785;
+ public int a22786;
+ public int a22787;
+ public int a22788;
+ public int a22789;
+ public int a22790;
+ public int a22791;
+ public int a22792;
+ public int a22793;
+ public int a22794;
+ public int a22795;
+ public int a22796;
+ public int a22797;
+ public int a22798;
+ public int a22799;
+ public int a22800;
+ public int a22801;
+ public int a22802;
+ public int a22803;
+ public int a22804;
+ public int a22805;
+ public int a22806;
+ public int a22807;
+ public int a22808;
+ public int a22809;
+ public int a22810;
+ public int a22811;
+ public int a22812;
+ public int a22813;
+ public int a22814;
+ public int a22815;
+ public int a22816;
+ public int a22817;
+ public int a22818;
+ public int a22819;
+ public int a22820;
+ public int a22821;
+ public int a22822;
+ public int a22823;
+ public int a22824;
+ public int a22825;
+ public int a22826;
+ public int a22827;
+ public int a22828;
+ public int a22829;
+ public int a22830;
+ public int a22831;
+ public int a22832;
+ public int a22833;
+ public int a22834;
+ public int a22835;
+ public int a22836;
+ public int a22837;
+ public int a22838;
+ public int a22839;
+ public int a22840;
+ public int a22841;
+ public int a22842;
+ public int a22843;
+ public int a22844;
+ public int a22845;
+ public int a22846;
+ public int a22847;
+ public int a22848;
+ public int a22849;
+ public int a22850;
+ public int a22851;
+ public int a22852;
+ public int a22853;
+ public int a22854;
+ public int a22855;
+ public int a22856;
+ public int a22857;
+ public int a22858;
+ public int a22859;
+ public int a22860;
+ public int a22861;
+ public int a22862;
+ public int a22863;
+ public int a22864;
+ public int a22865;
+ public int a22866;
+ public int a22867;
+ public int a22868;
+ public int a22869;
+ public int a22870;
+ public int a22871;
+ public int a22872;
+ public int a22873;
+ public int a22874;
+ public int a22875;
+ public int a22876;
+ public int a22877;
+ public int a22878;
+ public int a22879;
+ public int a22880;
+ public int a22881;
+ public int a22882;
+ public int a22883;
+ public int a22884;
+ public int a22885;
+ public int a22886;
+ public int a22887;
+ public int a22888;
+ public int a22889;
+ public int a22890;
+ public int a22891;
+ public int a22892;
+ public int a22893;
+ public int a22894;
+ public int a22895;
+ public int a22896;
+ public int a22897;
+ public int a22898;
+ public int a22899;
+ public int a22900;
+ public int a22901;
+ public int a22902;
+ public int a22903;
+ public int a22904;
+ public int a22905;
+ public int a22906;
+ public int a22907;
+ public int a22908;
+ public int a22909;
+ public int a22910;
+ public int a22911;
+ public int a22912;
+ public int a22913;
+ public int a22914;
+ public int a22915;
+ public int a22916;
+ public int a22917;
+ public int a22918;
+ public int a22919;
+ public int a22920;
+ public int a22921;
+ public int a22922;
+ public int a22923;
+ public int a22924;
+ public int a22925;
+ public int a22926;
+ public int a22927;
+ public int a22928;
+ public int a22929;
+ public int a22930;
+ public int a22931;
+ public int a22932;
+ public int a22933;
+ public int a22934;
+ public int a22935;
+ public int a22936;
+ public int a22937;
+ public int a22938;
+ public int a22939;
+ public int a22940;
+ public int a22941;
+ public int a22942;
+ public int a22943;
+ public int a22944;
+ public int a22945;
+ public int a22946;
+ public int a22947;
+ public int a22948;
+ public int a22949;
+ public int a22950;
+ public int a22951;
+ public int a22952;
+ public int a22953;
+ public int a22954;
+ public int a22955;
+ public int a22956;
+ public int a22957;
+ public int a22958;
+ public int a22959;
+ public int a22960;
+ public int a22961;
+ public int a22962;
+ public int a22963;
+ public int a22964;
+ public int a22965;
+ public int a22966;
+ public int a22967;
+ public int a22968;
+ public int a22969;
+ public int a22970;
+ public int a22971;
+ public int a22972;
+ public int a22973;
+ public int a22974;
+ public int a22975;
+ public int a22976;
+ public int a22977;
+ public int a22978;
+ public int a22979;
+ public int a22980;
+ public int a22981;
+ public int a22982;
+ public int a22983;
+ public int a22984;
+ public int a22985;
+ public int a22986;
+ public int a22987;
+ public int a22988;
+ public int a22989;
+ public int a22990;
+ public int a22991;
+ public int a22992;
+ public int a22993;
+ public int a22994;
+ public int a22995;
+ public int a22996;
+ public int a22997;
+ public int a22998;
+ public int a22999;
+ public int a23000;
+ public int a23001;
+ public int a23002;
+ public int a23003;
+ public int a23004;
+ public int a23005;
+ public int a23006;
+ public int a23007;
+ public int a23008;
+ public int a23009;
+ public int a23010;
+ public int a23011;
+ public int a23012;
+ public int a23013;
+ public int a23014;
+ public int a23015;
+ public int a23016;
+ public int a23017;
+ public int a23018;
+ public int a23019;
+ public int a23020;
+ public int a23021;
+ public int a23022;
+ public int a23023;
+ public int a23024;
+ public int a23025;
+ public int a23026;
+ public int a23027;
+ public int a23028;
+ public int a23029;
+ public int a23030;
+ public int a23031;
+ public int a23032;
+ public int a23033;
+ public int a23034;
+ public int a23035;
+ public int a23036;
+ public int a23037;
+ public int a23038;
+ public int a23039;
+ public int a23040;
+ public int a23041;
+ public int a23042;
+ public int a23043;
+ public int a23044;
+ public int a23045;
+ public int a23046;
+ public int a23047;
+ public int a23048;
+ public int a23049;
+ public int a23050;
+ public int a23051;
+ public int a23052;
+ public int a23053;
+ public int a23054;
+ public int a23055;
+ public int a23056;
+ public int a23057;
+ public int a23058;
+ public int a23059;
+ public int a23060;
+ public int a23061;
+ public int a23062;
+ public int a23063;
+ public int a23064;
+ public int a23065;
+ public int a23066;
+ public int a23067;
+ public int a23068;
+ public int a23069;
+ public int a23070;
+ public int a23071;
+ public int a23072;
+ public int a23073;
+ public int a23074;
+ public int a23075;
+ public int a23076;
+ public int a23077;
+ public int a23078;
+ public int a23079;
+ public int a23080;
+ public int a23081;
+ public int a23082;
+ public int a23083;
+ public int a23084;
+ public int a23085;
+ public int a23086;
+ public int a23087;
+ public int a23088;
+ public int a23089;
+ public int a23090;
+ public int a23091;
+ public int a23092;
+ public int a23093;
+ public int a23094;
+ public int a23095;
+ public int a23096;
+ public int a23097;
+ public int a23098;
+ public int a23099;
+ public int a23100;
+ public int a23101;
+ public int a23102;
+ public int a23103;
+ public int a23104;
+ public int a23105;
+ public int a23106;
+ public int a23107;
+ public int a23108;
+ public int a23109;
+ public int a23110;
+ public int a23111;
+ public int a23112;
+ public int a23113;
+ public int a23114;
+ public int a23115;
+ public int a23116;
+ public int a23117;
+ public int a23118;
+ public int a23119;
+ public int a23120;
+ public int a23121;
+ public int a23122;
+ public int a23123;
+ public int a23124;
+ public int a23125;
+ public int a23126;
+ public int a23127;
+ public int a23128;
+ public int a23129;
+ public int a23130;
+ public int a23131;
+ public int a23132;
+ public int a23133;
+ public int a23134;
+ public int a23135;
+ public int a23136;
+ public int a23137;
+ public int a23138;
+ public int a23139;
+ public int a23140;
+ public int a23141;
+ public int a23142;
+ public int a23143;
+ public int a23144;
+ public int a23145;
+ public int a23146;
+ public int a23147;
+ public int a23148;
+ public int a23149;
+ public int a23150;
+ public int a23151;
+ public int a23152;
+ public int a23153;
+ public int a23154;
+ public int a23155;
+ public int a23156;
+ public int a23157;
+ public int a23158;
+ public int a23159;
+ public int a23160;
+ public int a23161;
+ public int a23162;
+ public int a23163;
+ public int a23164;
+ public int a23165;
+ public int a23166;
+ public int a23167;
+ public int a23168;
+ public int a23169;
+ public int a23170;
+ public int a23171;
+ public int a23172;
+ public int a23173;
+ public int a23174;
+ public int a23175;
+ public int a23176;
+ public int a23177;
+ public int a23178;
+ public int a23179;
+ public int a23180;
+ public int a23181;
+ public int a23182;
+ public int a23183;
+ public int a23184;
+ public int a23185;
+ public int a23186;
+ public int a23187;
+ public int a23188;
+ public int a23189;
+ public int a23190;
+ public int a23191;
+ public int a23192;
+ public int a23193;
+ public int a23194;
+ public int a23195;
+ public int a23196;
+ public int a23197;
+ public int a23198;
+ public int a23199;
+ public int a23200;
+ public int a23201;
+ public int a23202;
+ public int a23203;
+ public int a23204;
+ public int a23205;
+ public int a23206;
+ public int a23207;
+ public int a23208;
+ public int a23209;
+ public int a23210;
+ public int a23211;
+ public int a23212;
+ public int a23213;
+ public int a23214;
+ public int a23215;
+ public int a23216;
+ public int a23217;
+ public int a23218;
+ public int a23219;
+ public int a23220;
+ public int a23221;
+ public int a23222;
+ public int a23223;
+ public int a23224;
+ public int a23225;
+ public int a23226;
+ public int a23227;
+ public int a23228;
+ public int a23229;
+ public int a23230;
+ public int a23231;
+ public int a23232;
+ public int a23233;
+ public int a23234;
+ public int a23235;
+ public int a23236;
+ public int a23237;
+ public int a23238;
+ public int a23239;
+ public int a23240;
+ public int a23241;
+ public int a23242;
+ public int a23243;
+ public int a23244;
+ public int a23245;
+ public int a23246;
+ public int a23247;
+ public int a23248;
+ public int a23249;
+ public int a23250;
+ public int a23251;
+ public int a23252;
+ public int a23253;
+ public int a23254;
+ public int a23255;
+ public int a23256;
+ public int a23257;
+ public int a23258;
+ public int a23259;
+ public int a23260;
+ public int a23261;
+ public int a23262;
+ public int a23263;
+ public int a23264;
+ public int a23265;
+ public int a23266;
+ public int a23267;
+ public int a23268;
+ public int a23269;
+ public int a23270;
+ public int a23271;
+ public int a23272;
+ public int a23273;
+ public int a23274;
+ public int a23275;
+ public int a23276;
+ public int a23277;
+ public int a23278;
+ public int a23279;
+ public int a23280;
+ public int a23281;
+ public int a23282;
+ public int a23283;
+ public int a23284;
+ public int a23285;
+ public int a23286;
+ public int a23287;
+ public int a23288;
+ public int a23289;
+ public int a23290;
+ public int a23291;
+ public int a23292;
+ public int a23293;
+ public int a23294;
+ public int a23295;
+ public int a23296;
+ public int a23297;
+ public int a23298;
+ public int a23299;
+ public int a23300;
+ public int a23301;
+ public int a23302;
+ public int a23303;
+ public int a23304;
+ public int a23305;
+ public int a23306;
+ public int a23307;
+ public int a23308;
+ public int a23309;
+ public int a23310;
+ public int a23311;
+ public int a23312;
+ public int a23313;
+ public int a23314;
+ public int a23315;
+ public int a23316;
+ public int a23317;
+ public int a23318;
+ public int a23319;
+ public int a23320;
+ public int a23321;
+ public int a23322;
+ public int a23323;
+ public int a23324;
+ public int a23325;
+ public int a23326;
+ public int a23327;
+ public int a23328;
+ public int a23329;
+ public int a23330;
+ public int a23331;
+ public int a23332;
+ public int a23333;
+ public int a23334;
+ public int a23335;
+ public int a23336;
+ public int a23337;
+ public int a23338;
+ public int a23339;
+ public int a23340;
+ public int a23341;
+ public int a23342;
+ public int a23343;
+ public int a23344;
+ public int a23345;
+ public int a23346;
+ public int a23347;
+ public int a23348;
+ public int a23349;
+ public int a23350;
+ public int a23351;
+ public int a23352;
+ public int a23353;
+ public int a23354;
+ public int a23355;
+ public int a23356;
+ public int a23357;
+ public int a23358;
+ public int a23359;
+ public int a23360;
+ public int a23361;
+ public int a23362;
+ public int a23363;
+ public int a23364;
+ public int a23365;
+ public int a23366;
+ public int a23367;
+ public int a23368;
+ public int a23369;
+ public int a23370;
+ public int a23371;
+ public int a23372;
+ public int a23373;
+ public int a23374;
+ public int a23375;
+ public int a23376;
+ public int a23377;
+ public int a23378;
+ public int a23379;
+ public int a23380;
+ public int a23381;
+ public int a23382;
+ public int a23383;
+ public int a23384;
+ public int a23385;
+ public int a23386;
+ public int a23387;
+ public int a23388;
+ public int a23389;
+ public int a23390;
+ public int a23391;
+ public int a23392;
+ public int a23393;
+ public int a23394;
+ public int a23395;
+ public int a23396;
+ public int a23397;
+ public int a23398;
+ public int a23399;
+ public int a23400;
+ public int a23401;
+ public int a23402;
+ public int a23403;
+ public int a23404;
+ public int a23405;
+ public int a23406;
+ public int a23407;
+ public int a23408;
+ public int a23409;
+ public int a23410;
+ public int a23411;
+ public int a23412;
+ public int a23413;
+ public int a23414;
+ public int a23415;
+ public int a23416;
+ public int a23417;
+ public int a23418;
+ public int a23419;
+ public int a23420;
+ public int a23421;
+ public int a23422;
+ public int a23423;
+ public int a23424;
+ public int a23425;
+ public int a23426;
+ public int a23427;
+ public int a23428;
+ public int a23429;
+ public int a23430;
+ public int a23431;
+ public int a23432;
+ public int a23433;
+ public int a23434;
+ public int a23435;
+ public int a23436;
+ public int a23437;
+ public int a23438;
+ public int a23439;
+ public int a23440;
+ public int a23441;
+ public int a23442;
+ public int a23443;
+ public int a23444;
+ public int a23445;
+ public int a23446;
+ public int a23447;
+ public int a23448;
+ public int a23449;
+ public int a23450;
+ public int a23451;
+ public int a23452;
+ public int a23453;
+ public int a23454;
+ public int a23455;
+ public int a23456;
+ public int a23457;
+ public int a23458;
+ public int a23459;
+ public int a23460;
+ public int a23461;
+ public int a23462;
+ public int a23463;
+ public int a23464;
+ public int a23465;
+ public int a23466;
+ public int a23467;
+ public int a23468;
+ public int a23469;
+ public int a23470;
+ public int a23471;
+ public int a23472;
+ public int a23473;
+ public int a23474;
+ public int a23475;
+ public int a23476;
+ public int a23477;
+ public int a23478;
+ public int a23479;
+ public int a23480;
+ public int a23481;
+ public int a23482;
+ public int a23483;
+ public int a23484;
+ public int a23485;
+ public int a23486;
+ public int a23487;
+ public int a23488;
+ public int a23489;
+ public int a23490;
+ public int a23491;
+ public int a23492;
+ public int a23493;
+ public int a23494;
+ public int a23495;
+ public int a23496;
+ public int a23497;
+ public int a23498;
+ public int a23499;
+ public int a23500;
+ public int a23501;
+ public int a23502;
+ public int a23503;
+ public int a23504;
+ public int a23505;
+ public int a23506;
+ public int a23507;
+ public int a23508;
+ public int a23509;
+ public int a23510;
+ public int a23511;
+ public int a23512;
+ public int a23513;
+ public int a23514;
+ public int a23515;
+ public int a23516;
+ public int a23517;
+ public int a23518;
+ public int a23519;
+ public int a23520;
+ public int a23521;
+ public int a23522;
+ public int a23523;
+ public int a23524;
+ public int a23525;
+ public int a23526;
+ public int a23527;
+ public int a23528;
+ public int a23529;
+ public int a23530;
+ public int a23531;
+ public int a23532;
+ public int a23533;
+ public int a23534;
+ public int a23535;
+ public int a23536;
+ public int a23537;
+ public int a23538;
+ public int a23539;
+ public int a23540;
+ public int a23541;
+ public int a23542;
+ public int a23543;
+ public int a23544;
+ public int a23545;
+ public int a23546;
+ public int a23547;
+ public int a23548;
+ public int a23549;
+ public int a23550;
+ public int a23551;
+ public int a23552;
+ public int a23553;
+ public int a23554;
+ public int a23555;
+ public int a23556;
+ public int a23557;
+ public int a23558;
+ public int a23559;
+ public int a23560;
+ public int a23561;
+ public int a23562;
+ public int a23563;
+ public int a23564;
+ public int a23565;
+ public int a23566;
+ public int a23567;
+ public int a23568;
+ public int a23569;
+ public int a23570;
+ public int a23571;
+ public int a23572;
+ public int a23573;
+ public int a23574;
+ public int a23575;
+ public int a23576;
+ public int a23577;
+ public int a23578;
+ public int a23579;
+ public int a23580;
+ public int a23581;
+ public int a23582;
+ public int a23583;
+ public int a23584;
+ public int a23585;
+ public int a23586;
+ public int a23587;
+ public int a23588;
+ public int a23589;
+ public int a23590;
+ public int a23591;
+ public int a23592;
+ public int a23593;
+ public int a23594;
+ public int a23595;
+ public int a23596;
+ public int a23597;
+ public int a23598;
+ public int a23599;
+ public int a23600;
+ public int a23601;
+ public int a23602;
+ public int a23603;
+ public int a23604;
+ public int a23605;
+ public int a23606;
+ public int a23607;
+ public int a23608;
+ public int a23609;
+ public int a23610;
+ public int a23611;
+ public int a23612;
+ public int a23613;
+ public int a23614;
+ public int a23615;
+ public int a23616;
+ public int a23617;
+ public int a23618;
+ public int a23619;
+ public int a23620;
+ public int a23621;
+ public int a23622;
+ public int a23623;
+ public int a23624;
+ public int a23625;
+ public int a23626;
+ public int a23627;
+ public int a23628;
+ public int a23629;
+ public int a23630;
+ public int a23631;
+ public int a23632;
+ public int a23633;
+ public int a23634;
+ public int a23635;
+ public int a23636;
+ public int a23637;
+ public int a23638;
+ public int a23639;
+ public int a23640;
+ public int a23641;
+ public int a23642;
+ public int a23643;
+ public int a23644;
+ public int a23645;
+ public int a23646;
+ public int a23647;
+ public int a23648;
+ public int a23649;
+ public int a23650;
+ public int a23651;
+ public int a23652;
+ public int a23653;
+ public int a23654;
+ public int a23655;
+ public int a23656;
+ public int a23657;
+ public int a23658;
+ public int a23659;
+ public int a23660;
+ public int a23661;
+ public int a23662;
+ public int a23663;
+ public int a23664;
+ public int a23665;
+ public int a23666;
+ public int a23667;
+ public int a23668;
+ public int a23669;
+ public int a23670;
+ public int a23671;
+ public int a23672;
+ public int a23673;
+ public int a23674;
+ public int a23675;
+ public int a23676;
+ public int a23677;
+ public int a23678;
+ public int a23679;
+ public int a23680;
+ public int a23681;
+ public int a23682;
+ public int a23683;
+ public int a23684;
+ public int a23685;
+ public int a23686;
+ public int a23687;
+ public int a23688;
+ public int a23689;
+ public int a23690;
+ public int a23691;
+ public int a23692;
+ public int a23693;
+ public int a23694;
+ public int a23695;
+ public int a23696;
+ public int a23697;
+ public int a23698;
+ public int a23699;
+ public int a23700;
+ public int a23701;
+ public int a23702;
+ public int a23703;
+ public int a23704;
+ public int a23705;
+ public int a23706;
+ public int a23707;
+ public int a23708;
+ public int a23709;
+ public int a23710;
+ public int a23711;
+ public int a23712;
+ public int a23713;
+ public int a23714;
+ public int a23715;
+ public int a23716;
+ public int a23717;
+ public int a23718;
+ public int a23719;
+ public int a23720;
+ public int a23721;
+ public int a23722;
+ public int a23723;
+ public int a23724;
+ public int a23725;
+ public int a23726;
+ public int a23727;
+ public int a23728;
+ public int a23729;
+ public int a23730;
+ public int a23731;
+ public int a23732;
+ public int a23733;
+ public int a23734;
+ public int a23735;
+ public int a23736;
+ public int a23737;
+ public int a23738;
+ public int a23739;
+ public int a23740;
+ public int a23741;
+ public int a23742;
+ public int a23743;
+ public int a23744;
+ public int a23745;
+ public int a23746;
+ public int a23747;
+ public int a23748;
+ public int a23749;
+ public int a23750;
+ public int a23751;
+ public int a23752;
+ public int a23753;
+ public int a23754;
+ public int a23755;
+ public int a23756;
+ public int a23757;
+ public int a23758;
+ public int a23759;
+ public int a23760;
+ public int a23761;
+ public int a23762;
+ public int a23763;
+ public int a23764;
+ public int a23765;
+ public int a23766;
+ public int a23767;
+ public int a23768;
+ public int a23769;
+ public int a23770;
+ public int a23771;
+ public int a23772;
+ public int a23773;
+ public int a23774;
+ public int a23775;
+ public int a23776;
+ public int a23777;
+ public int a23778;
+ public int a23779;
+ public int a23780;
+ public int a23781;
+ public int a23782;
+ public int a23783;
+ public int a23784;
+ public int a23785;
+ public int a23786;
+ public int a23787;
+ public int a23788;
+ public int a23789;
+ public int a23790;
+ public int a23791;
+ public int a23792;
+ public int a23793;
+ public int a23794;
+ public int a23795;
+ public int a23796;
+ public int a23797;
+ public int a23798;
+ public int a23799;
+ public int a23800;
+ public int a23801;
+ public int a23802;
+ public int a23803;
+ public int a23804;
+ public int a23805;
+ public int a23806;
+ public int a23807;
+ public int a23808;
+ public int a23809;
+ public int a23810;
+ public int a23811;
+ public int a23812;
+ public int a23813;
+ public int a23814;
+ public int a23815;
+ public int a23816;
+ public int a23817;
+ public int a23818;
+ public int a23819;
+ public int a23820;
+ public int a23821;
+ public int a23822;
+ public int a23823;
+ public int a23824;
+ public int a23825;
+ public int a23826;
+ public int a23827;
+ public int a23828;
+ public int a23829;
+ public int a23830;
+ public int a23831;
+ public int a23832;
+ public int a23833;
+ public int a23834;
+ public int a23835;
+ public int a23836;
+ public int a23837;
+ public int a23838;
+ public int a23839;
+ public int a23840;
+ public int a23841;
+ public int a23842;
+ public int a23843;
+ public int a23844;
+ public int a23845;
+ public int a23846;
+ public int a23847;
+ public int a23848;
+ public int a23849;
+ public int a23850;
+ public int a23851;
+ public int a23852;
+ public int a23853;
+ public int a23854;
+ public int a23855;
+ public int a23856;
+ public int a23857;
+ public int a23858;
+ public int a23859;
+ public int a23860;
+ public int a23861;
+ public int a23862;
+ public int a23863;
+ public int a23864;
+ public int a23865;
+ public int a23866;
+ public int a23867;
+ public int a23868;
+ public int a23869;
+ public int a23870;
+ public int a23871;
+ public int a23872;
+ public int a23873;
+ public int a23874;
+ public int a23875;
+ public int a23876;
+ public int a23877;
+ public int a23878;
+ public int a23879;
+ public int a23880;
+ public int a23881;
+ public int a23882;
+ public int a23883;
+ public int a23884;
+ public int a23885;
+ public int a23886;
+ public int a23887;
+ public int a23888;
+ public int a23889;
+ public int a23890;
+ public int a23891;
+ public int a23892;
+ public int a23893;
+ public int a23894;
+ public int a23895;
+ public int a23896;
+ public int a23897;
+ public int a23898;
+ public int a23899;
+ public int a23900;
+ public int a23901;
+ public int a23902;
+ public int a23903;
+ public int a23904;
+ public int a23905;
+ public int a23906;
+ public int a23907;
+ public int a23908;
+ public int a23909;
+ public int a23910;
+ public int a23911;
+ public int a23912;
+ public int a23913;
+ public int a23914;
+ public int a23915;
+ public int a23916;
+ public int a23917;
+ public int a23918;
+ public int a23919;
+ public int a23920;
+ public int a23921;
+ public int a23922;
+ public int a23923;
+ public int a23924;
+ public int a23925;
+ public int a23926;
+ public int a23927;
+ public int a23928;
+ public int a23929;
+ public int a23930;
+ public int a23931;
+ public int a23932;
+ public int a23933;
+ public int a23934;
+ public int a23935;
+ public int a23936;
+ public int a23937;
+ public int a23938;
+ public int a23939;
+ public int a23940;
+ public int a23941;
+ public int a23942;
+ public int a23943;
+ public int a23944;
+ public int a23945;
+ public int a23946;
+ public int a23947;
+ public int a23948;
+ public int a23949;
+ public int a23950;
+ public int a23951;
+ public int a23952;
+ public int a23953;
+ public int a23954;
+ public int a23955;
+ public int a23956;
+ public int a23957;
+ public int a23958;
+ public int a23959;
+ public int a23960;
+ public int a23961;
+ public int a23962;
+ public int a23963;
+ public int a23964;
+ public int a23965;
+ public int a23966;
+ public int a23967;
+ public int a23968;
+ public int a23969;
+ public int a23970;
+ public int a23971;
+ public int a23972;
+ public int a23973;
+ public int a23974;
+ public int a23975;
+ public int a23976;
+ public int a23977;
+ public int a23978;
+ public int a23979;
+ public int a23980;
+ public int a23981;
+ public int a23982;
+ public int a23983;
+ public int a23984;
+ public int a23985;
+ public int a23986;
+ public int a23987;
+ public int a23988;
+ public int a23989;
+ public int a23990;
+ public int a23991;
+ public int a23992;
+ public int a23993;
+ public int a23994;
+ public int a23995;
+ public int a23996;
+ public int a23997;
+ public int a23998;
+ public int a23999;
+ public int a24000;
+ public int a24001;
+ public int a24002;
+ public int a24003;
+ public int a24004;
+ public int a24005;
+ public int a24006;
+ public int a24007;
+ public int a24008;
+ public int a24009;
+ public int a24010;
+ public int a24011;
+ public int a24012;
+ public int a24013;
+ public int a24014;
+ public int a24015;
+ public int a24016;
+ public int a24017;
+ public int a24018;
+ public int a24019;
+ public int a24020;
+ public int a24021;
+ public int a24022;
+ public int a24023;
+ public int a24024;
+ public int a24025;
+ public int a24026;
+ public int a24027;
+ public int a24028;
+ public int a24029;
+ public int a24030;
+ public int a24031;
+ public int a24032;
+ public int a24033;
+ public int a24034;
+ public int a24035;
+ public int a24036;
+ public int a24037;
+ public int a24038;
+ public int a24039;
+ public int a24040;
+ public int a24041;
+ public int a24042;
+ public int a24043;
+ public int a24044;
+ public int a24045;
+ public int a24046;
+ public int a24047;
+ public int a24048;
+ public int a24049;
+ public int a24050;
+ public int a24051;
+ public int a24052;
+ public int a24053;
+ public int a24054;
+ public int a24055;
+ public int a24056;
+ public int a24057;
+ public int a24058;
+ public int a24059;
+ public int a24060;
+ public int a24061;
+ public int a24062;
+ public int a24063;
+ public int a24064;
+ public int a24065;
+ public int a24066;
+ public int a24067;
+ public int a24068;
+ public int a24069;
+ public int a24070;
+ public int a24071;
+ public int a24072;
+ public int a24073;
+ public int a24074;
+ public int a24075;
+ public int a24076;
+ public int a24077;
+ public int a24078;
+ public int a24079;
+ public int a24080;
+ public int a24081;
+ public int a24082;
+ public int a24083;
+ public int a24084;
+ public int a24085;
+ public int a24086;
+ public int a24087;
+ public int a24088;
+ public int a24089;
+ public int a24090;
+ public int a24091;
+ public int a24092;
+ public int a24093;
+ public int a24094;
+ public int a24095;
+ public int a24096;
+ public int a24097;
+ public int a24098;
+ public int a24099;
+ public int a24100;
+ public int a24101;
+ public int a24102;
+ public int a24103;
+ public int a24104;
+ public int a24105;
+ public int a24106;
+ public int a24107;
+ public int a24108;
+ public int a24109;
+ public int a24110;
+ public int a24111;
+ public int a24112;
+ public int a24113;
+ public int a24114;
+ public int a24115;
+ public int a24116;
+ public int a24117;
+ public int a24118;
+ public int a24119;
+ public int a24120;
+ public int a24121;
+ public int a24122;
+ public int a24123;
+ public int a24124;
+ public int a24125;
+ public int a24126;
+ public int a24127;
+ public int a24128;
+ public int a24129;
+ public int a24130;
+ public int a24131;
+ public int a24132;
+ public int a24133;
+ public int a24134;
+ public int a24135;
+ public int a24136;
+ public int a24137;
+ public int a24138;
+ public int a24139;
+ public int a24140;
+ public int a24141;
+ public int a24142;
+ public int a24143;
+ public int a24144;
+ public int a24145;
+ public int a24146;
+ public int a24147;
+ public int a24148;
+ public int a24149;
+ public int a24150;
+ public int a24151;
+ public int a24152;
+ public int a24153;
+ public int a24154;
+ public int a24155;
+ public int a24156;
+ public int a24157;
+ public int a24158;
+ public int a24159;
+ public int a24160;
+ public int a24161;
+ public int a24162;
+ public int a24163;
+ public int a24164;
+ public int a24165;
+ public int a24166;
+ public int a24167;
+ public int a24168;
+ public int a24169;
+ public int a24170;
+ public int a24171;
+ public int a24172;
+ public int a24173;
+ public int a24174;
+ public int a24175;
+ public int a24176;
+ public int a24177;
+ public int a24178;
+ public int a24179;
+ public int a24180;
+ public int a24181;
+ public int a24182;
+ public int a24183;
+ public int a24184;
+ public int a24185;
+ public int a24186;
+ public int a24187;
+ public int a24188;
+ public int a24189;
+ public int a24190;
+ public int a24191;
+ public int a24192;
+ public int a24193;
+ public int a24194;
+ public int a24195;
+ public int a24196;
+ public int a24197;
+ public int a24198;
+ public int a24199;
+ public int a24200;
+ public int a24201;
+ public int a24202;
+ public int a24203;
+ public int a24204;
+ public int a24205;
+ public int a24206;
+ public int a24207;
+ public int a24208;
+ public int a24209;
+ public int a24210;
+ public int a24211;
+ public int a24212;
+ public int a24213;
+ public int a24214;
+ public int a24215;
+ public int a24216;
+ public int a24217;
+ public int a24218;
+ public int a24219;
+ public int a24220;
+ public int a24221;
+ public int a24222;
+ public int a24223;
+ public int a24224;
+ public int a24225;
+ public int a24226;
+ public int a24227;
+ public int a24228;
+ public int a24229;
+ public int a24230;
+ public int a24231;
+ public int a24232;
+ public int a24233;
+ public int a24234;
+ public int a24235;
+ public int a24236;
+ public int a24237;
+ public int a24238;
+ public int a24239;
+ public int a24240;
+ public int a24241;
+ public int a24242;
+ public int a24243;
+ public int a24244;
+ public int a24245;
+ public int a24246;
+ public int a24247;
+ public int a24248;
+ public int a24249;
+ public int a24250;
+ public int a24251;
+ public int a24252;
+ public int a24253;
+ public int a24254;
+ public int a24255;
+ public int a24256;
+ public int a24257;
+ public int a24258;
+ public int a24259;
+ public int a24260;
+ public int a24261;
+ public int a24262;
+ public int a24263;
+ public int a24264;
+ public int a24265;
+ public int a24266;
+ public int a24267;
+ public int a24268;
+ public int a24269;
+ public int a24270;
+ public int a24271;
+ public int a24272;
+ public int a24273;
+ public int a24274;
+ public int a24275;
+ public int a24276;
+ public int a24277;
+ public int a24278;
+ public int a24279;
+ public int a24280;
+ public int a24281;
+ public int a24282;
+ public int a24283;
+ public int a24284;
+ public int a24285;
+ public int a24286;
+ public int a24287;
+ public int a24288;
+ public int a24289;
+ public int a24290;
+ public int a24291;
+ public int a24292;
+ public int a24293;
+ public int a24294;
+ public int a24295;
+ public int a24296;
+ public int a24297;
+ public int a24298;
+ public int a24299;
+ public int a24300;
+ public int a24301;
+ public int a24302;
+ public int a24303;
+ public int a24304;
+ public int a24305;
+ public int a24306;
+ public int a24307;
+ public int a24308;
+ public int a24309;
+ public int a24310;
+ public int a24311;
+ public int a24312;
+ public int a24313;
+ public int a24314;
+ public int a24315;
+ public int a24316;
+ public int a24317;
+ public int a24318;
+ public int a24319;
+ public int a24320;
+ public int a24321;
+ public int a24322;
+ public int a24323;
+ public int a24324;
+ public int a24325;
+ public int a24326;
+ public int a24327;
+ public int a24328;
+ public int a24329;
+ public int a24330;
+ public int a24331;
+ public int a24332;
+ public int a24333;
+ public int a24334;
+ public int a24335;
+ public int a24336;
+ public int a24337;
+ public int a24338;
+ public int a24339;
+ public int a24340;
+ public int a24341;
+ public int a24342;
+ public int a24343;
+ public int a24344;
+ public int a24345;
+ public int a24346;
+ public int a24347;
+ public int a24348;
+ public int a24349;
+ public int a24350;
+ public int a24351;
+ public int a24352;
+ public int a24353;
+ public int a24354;
+ public int a24355;
+ public int a24356;
+ public int a24357;
+ public int a24358;
+ public int a24359;
+ public int a24360;
+ public int a24361;
+ public int a24362;
+ public int a24363;
+ public int a24364;
+ public int a24365;
+ public int a24366;
+ public int a24367;
+ public int a24368;
+ public int a24369;
+ public int a24370;
+ public int a24371;
+ public int a24372;
+ public int a24373;
+ public int a24374;
+ public int a24375;
+ public int a24376;
+ public int a24377;
+ public int a24378;
+ public int a24379;
+ public int a24380;
+ public int a24381;
+ public int a24382;
+ public int a24383;
+ public int a24384;
+ public int a24385;
+ public int a24386;
+ public int a24387;
+ public int a24388;
+ public int a24389;
+ public int a24390;
+ public int a24391;
+ public int a24392;
+ public int a24393;
+ public int a24394;
+ public int a24395;
+ public int a24396;
+ public int a24397;
+ public int a24398;
+ public int a24399;
+ public int a24400;
+ public int a24401;
+ public int a24402;
+ public int a24403;
+ public int a24404;
+ public int a24405;
+ public int a24406;
+ public int a24407;
+ public int a24408;
+ public int a24409;
+ public int a24410;
+ public int a24411;
+ public int a24412;
+ public int a24413;
+ public int a24414;
+ public int a24415;
+ public int a24416;
+ public int a24417;
+ public int a24418;
+ public int a24419;
+ public int a24420;
+ public int a24421;
+ public int a24422;
+ public int a24423;
+ public int a24424;
+ public int a24425;
+ public int a24426;
+ public int a24427;
+ public int a24428;
+ public int a24429;
+ public int a24430;
+ public int a24431;
+ public int a24432;
+ public int a24433;
+ public int a24434;
+ public int a24435;
+ public int a24436;
+ public int a24437;
+ public int a24438;
+ public int a24439;
+ public int a24440;
+ public int a24441;
+ public int a24442;
+ public int a24443;
+ public int a24444;
+ public int a24445;
+ public int a24446;
+ public int a24447;
+ public int a24448;
+ public int a24449;
+ public int a24450;
+ public int a24451;
+ public int a24452;
+ public int a24453;
+ public int a24454;
+ public int a24455;
+ public int a24456;
+ public int a24457;
+ public int a24458;
+ public int a24459;
+ public int a24460;
+ public int a24461;
+ public int a24462;
+ public int a24463;
+ public int a24464;
+ public int a24465;
+ public int a24466;
+ public int a24467;
+ public int a24468;
+ public int a24469;
+ public int a24470;
+ public int a24471;
+ public int a24472;
+ public int a24473;
+ public int a24474;
+ public int a24475;
+ public int a24476;
+ public int a24477;
+ public int a24478;
+ public int a24479;
+ public int a24480;
+ public int a24481;
+ public int a24482;
+ public int a24483;
+ public int a24484;
+ public int a24485;
+ public int a24486;
+ public int a24487;
+ public int a24488;
+ public int a24489;
+ public int a24490;
+ public int a24491;
+ public int a24492;
+ public int a24493;
+ public int a24494;
+ public int a24495;
+ public int a24496;
+ public int a24497;
+ public int a24498;
+ public int a24499;
+ public int a24500;
+ public int a24501;
+ public int a24502;
+ public int a24503;
+ public int a24504;
+ public int a24505;
+ public int a24506;
+ public int a24507;
+ public int a24508;
+ public int a24509;
+ public int a24510;
+ public int a24511;
+ public int a24512;
+ public int a24513;
+ public int a24514;
+ public int a24515;
+ public int a24516;
+ public int a24517;
+ public int a24518;
+ public int a24519;
+ public int a24520;
+ public int a24521;
+ public int a24522;
+ public int a24523;
+ public int a24524;
+ public int a24525;
+ public int a24526;
+ public int a24527;
+ public int a24528;
+ public int a24529;
+ public int a24530;
+ public int a24531;
+ public int a24532;
+ public int a24533;
+ public int a24534;
+ public int a24535;
+ public int a24536;
+ public int a24537;
+ public int a24538;
+ public int a24539;
+ public int a24540;
+ public int a24541;
+ public int a24542;
+ public int a24543;
+ public int a24544;
+ public int a24545;
+ public int a24546;
+ public int a24547;
+ public int a24548;
+ public int a24549;
+ public int a24550;
+ public int a24551;
+ public int a24552;
+ public int a24553;
+ public int a24554;
+ public int a24555;
+ public int a24556;
+ public int a24557;
+ public int a24558;
+ public int a24559;
+ public int a24560;
+ public int a24561;
+ public int a24562;
+ public int a24563;
+ public int a24564;
+ public int a24565;
+ public int a24566;
+ public int a24567;
+ public int a24568;
+ public int a24569;
+ public int a24570;
+ public int a24571;
+ public int a24572;
+ public int a24573;
+ public int a24574;
+ public int a24575;
+ public int a24576;
+ public int a24577;
+ public int a24578;
+ public int a24579;
+ public int a24580;
+ public int a24581;
+ public int a24582;
+ public int a24583;
+ public int a24584;
+ public int a24585;
+ public int a24586;
+ public int a24587;
+ public int a24588;
+ public int a24589;
+ public int a24590;
+ public int a24591;
+ public int a24592;
+ public int a24593;
+ public int a24594;
+ public int a24595;
+ public int a24596;
+ public int a24597;
+ public int a24598;
+ public int a24599;
+ public int a24600;
+ public int a24601;
+ public int a24602;
+ public int a24603;
+ public int a24604;
+ public int a24605;
+ public int a24606;
+ public int a24607;
+ public int a24608;
+ public int a24609;
+ public int a24610;
+ public int a24611;
+ public int a24612;
+ public int a24613;
+ public int a24614;
+ public int a24615;
+ public int a24616;
+ public int a24617;
+ public int a24618;
+ public int a24619;
+ public int a24620;
+ public int a24621;
+ public int a24622;
+ public int a24623;
+ public int a24624;
+ public int a24625;
+ public int a24626;
+ public int a24627;
+ public int a24628;
+ public int a24629;
+ public int a24630;
+ public int a24631;
+ public int a24632;
+ public int a24633;
+ public int a24634;
+ public int a24635;
+ public int a24636;
+ public int a24637;
+ public int a24638;
+ public int a24639;
+ public int a24640;
+ public int a24641;
+ public int a24642;
+ public int a24643;
+ public int a24644;
+ public int a24645;
+ public int a24646;
+ public int a24647;
+ public int a24648;
+ public int a24649;
+ public int a24650;
+ public int a24651;
+ public int a24652;
+ public int a24653;
+ public int a24654;
+ public int a24655;
+ public int a24656;
+ public int a24657;
+ public int a24658;
+ public int a24659;
+ public int a24660;
+ public int a24661;
+ public int a24662;
+ public int a24663;
+ public int a24664;
+ public int a24665;
+ public int a24666;
+ public int a24667;
+ public int a24668;
+ public int a24669;
+ public int a24670;
+ public int a24671;
+ public int a24672;
+ public int a24673;
+ public int a24674;
+ public int a24675;
+ public int a24676;
+ public int a24677;
+ public int a24678;
+ public int a24679;
+ public int a24680;
+ public int a24681;
+ public int a24682;
+ public int a24683;
+ public int a24684;
+ public int a24685;
+ public int a24686;
+ public int a24687;
+ public int a24688;
+ public int a24689;
+ public int a24690;
+ public int a24691;
+ public int a24692;
+ public int a24693;
+ public int a24694;
+ public int a24695;
+ public int a24696;
+ public int a24697;
+ public int a24698;
+ public int a24699;
+ public int a24700;
+ public int a24701;
+ public int a24702;
+ public int a24703;
+ public int a24704;
+ public int a24705;
+ public int a24706;
+ public int a24707;
+ public int a24708;
+ public int a24709;
+ public int a24710;
+ public int a24711;
+ public int a24712;
+ public int a24713;
+ public int a24714;
+ public int a24715;
+ public int a24716;
+ public int a24717;
+ public int a24718;
+ public int a24719;
+ public int a24720;
+ public int a24721;
+ public int a24722;
+ public int a24723;
+ public int a24724;
+ public int a24725;
+ public int a24726;
+ public int a24727;
+ public int a24728;
+ public int a24729;
+ public int a24730;
+ public int a24731;
+ public int a24732;
+ public int a24733;
+ public int a24734;
+ public int a24735;
+ public int a24736;
+ public int a24737;
+ public int a24738;
+ public int a24739;
+ public int a24740;
+ public int a24741;
+ public int a24742;
+ public int a24743;
+ public int a24744;
+ public int a24745;
+ public int a24746;
+ public int a24747;
+ public int a24748;
+ public int a24749;
+ public int a24750;
+ public int a24751;
+ public int a24752;
+ public int a24753;
+ public int a24754;
+ public int a24755;
+ public int a24756;
+ public int a24757;
+ public int a24758;
+ public int a24759;
+ public int a24760;
+ public int a24761;
+ public int a24762;
+ public int a24763;
+ public int a24764;
+ public int a24765;
+ public int a24766;
+ public int a24767;
+ public int a24768;
+ public int a24769;
+ public int a24770;
+ public int a24771;
+ public int a24772;
+ public int a24773;
+ public int a24774;
+ public int a24775;
+ public int a24776;
+ public int a24777;
+ public int a24778;
+ public int a24779;
+ public int a24780;
+ public int a24781;
+ public int a24782;
+ public int a24783;
+ public int a24784;
+ public int a24785;
+ public int a24786;
+ public int a24787;
+ public int a24788;
+ public int a24789;
+ public int a24790;
+ public int a24791;
+ public int a24792;
+ public int a24793;
+ public int a24794;
+ public int a24795;
+ public int a24796;
+ public int a24797;
+ public int a24798;
+ public int a24799;
+ public int a24800;
+ public int a24801;
+ public int a24802;
+ public int a24803;
+ public int a24804;
+ public int a24805;
+ public int a24806;
+ public int a24807;
+ public int a24808;
+ public int a24809;
+ public int a24810;
+ public int a24811;
+ public int a24812;
+ public int a24813;
+ public int a24814;
+ public int a24815;
+ public int a24816;
+ public int a24817;
+ public int a24818;
+ public int a24819;
+ public int a24820;
+ public int a24821;
+ public int a24822;
+ public int a24823;
+ public int a24824;
+ public int a24825;
+ public int a24826;
+ public int a24827;
+ public int a24828;
+ public int a24829;
+ public int a24830;
+ public int a24831;
+ public int a24832;
+ public int a24833;
+ public int a24834;
+ public int a24835;
+ public int a24836;
+ public int a24837;
+ public int a24838;
+ public int a24839;
+ public int a24840;
+ public int a24841;
+ public int a24842;
+ public int a24843;
+ public int a24844;
+ public int a24845;
+ public int a24846;
+ public int a24847;
+ public int a24848;
+ public int a24849;
+ public int a24850;
+ public int a24851;
+ public int a24852;
+ public int a24853;
+ public int a24854;
+ public int a24855;
+ public int a24856;
+ public int a24857;
+ public int a24858;
+ public int a24859;
+ public int a24860;
+ public int a24861;
+ public int a24862;
+ public int a24863;
+ public int a24864;
+ public int a24865;
+ public int a24866;
+ public int a24867;
+ public int a24868;
+ public int a24869;
+ public int a24870;
+ public int a24871;
+ public int a24872;
+ public int a24873;
+ public int a24874;
+ public int a24875;
+ public int a24876;
+ public int a24877;
+ public int a24878;
+ public int a24879;
+ public int a24880;
+ public int a24881;
+ public int a24882;
+ public int a24883;
+ public int a24884;
+ public int a24885;
+ public int a24886;
+ public int a24887;
+ public int a24888;
+ public int a24889;
+ public int a24890;
+ public int a24891;
+ public int a24892;
+ public int a24893;
+ public int a24894;
+ public int a24895;
+ public int a24896;
+ public int a24897;
+ public int a24898;
+ public int a24899;
+ public int a24900;
+ public int a24901;
+ public int a24902;
+ public int a24903;
+ public int a24904;
+ public int a24905;
+ public int a24906;
+ public int a24907;
+ public int a24908;
+ public int a24909;
+ public int a24910;
+ public int a24911;
+ public int a24912;
+ public int a24913;
+ public int a24914;
+ public int a24915;
+ public int a24916;
+ public int a24917;
+ public int a24918;
+ public int a24919;
+ public int a24920;
+ public int a24921;
+ public int a24922;
+ public int a24923;
+ public int a24924;
+ public int a24925;
+ public int a24926;
+ public int a24927;
+ public int a24928;
+ public int a24929;
+ public int a24930;
+ public int a24931;
+ public int a24932;
+ public int a24933;
+ public int a24934;
+ public int a24935;
+ public int a24936;
+ public int a24937;
+ public int a24938;
+ public int a24939;
+ public int a24940;
+ public int a24941;
+ public int a24942;
+ public int a24943;
+ public int a24944;
+ public int a24945;
+ public int a24946;
+ public int a24947;
+ public int a24948;
+ public int a24949;
+ public int a24950;
+ public int a24951;
+ public int a24952;
+ public int a24953;
+ public int a24954;
+ public int a24955;
+ public int a24956;
+ public int a24957;
+ public int a24958;
+ public int a24959;
+ public int a24960;
+ public int a24961;
+ public int a24962;
+ public int a24963;
+ public int a24964;
+ public int a24965;
+ public int a24966;
+ public int a24967;
+ public int a24968;
+ public int a24969;
+ public int a24970;
+ public int a24971;
+ public int a24972;
+ public int a24973;
+ public int a24974;
+ public int a24975;
+ public int a24976;
+ public int a24977;
+ public int a24978;
+ public int a24979;
+ public int a24980;
+ public int a24981;
+ public int a24982;
+ public int a24983;
+ public int a24984;
+ public int a24985;
+ public int a24986;
+ public int a24987;
+ public int a24988;
+ public int a24989;
+ public int a24990;
+ public int a24991;
+ public int a24992;
+ public int a24993;
+ public int a24994;
+ public int a24995;
+ public int a24996;
+ public int a24997;
+ public int a24998;
+ public int a24999;
+ public int a25000;
+ public int a25001;
+ public int a25002;
+ public int a25003;
+ public int a25004;
+ public int a25005;
+ public int a25006;
+ public int a25007;
+ public int a25008;
+ public int a25009;
+ public int a25010;
+ public int a25011;
+ public int a25012;
+ public int a25013;
+ public int a25014;
+ public int a25015;
+ public int a25016;
+ public int a25017;
+ public int a25018;
+ public int a25019;
+ public int a25020;
+ public int a25021;
+ public int a25022;
+ public int a25023;
+ public int a25024;
+ public int a25025;
+ public int a25026;
+ public int a25027;
+ public int a25028;
+ public int a25029;
+ public int a25030;
+ public int a25031;
+ public int a25032;
+ public int a25033;
+ public int a25034;
+ public int a25035;
+ public int a25036;
+ public int a25037;
+ public int a25038;
+ public int a25039;
+ public int a25040;
+ public int a25041;
+ public int a25042;
+ public int a25043;
+ public int a25044;
+ public int a25045;
+ public int a25046;
+ public int a25047;
+ public int a25048;
+ public int a25049;
+ public int a25050;
+ public int a25051;
+ public int a25052;
+ public int a25053;
+ public int a25054;
+ public int a25055;
+ public int a25056;
+ public int a25057;
+ public int a25058;
+ public int a25059;
+ public int a25060;
+ public int a25061;
+ public int a25062;
+ public int a25063;
+ public int a25064;
+ public int a25065;
+ public int a25066;
+ public int a25067;
+ public int a25068;
+ public int a25069;
+ public int a25070;
+ public int a25071;
+ public int a25072;
+ public int a25073;
+ public int a25074;
+ public int a25075;
+ public int a25076;
+ public int a25077;
+ public int a25078;
+ public int a25079;
+ public int a25080;
+ public int a25081;
+ public int a25082;
+ public int a25083;
+ public int a25084;
+ public int a25085;
+ public int a25086;
+ public int a25087;
+ public int a25088;
+ public int a25089;
+ public int a25090;
+ public int a25091;
+ public int a25092;
+ public int a25093;
+ public int a25094;
+ public int a25095;
+ public int a25096;
+ public int a25097;
+ public int a25098;
+ public int a25099;
+ public int a25100;
+ public int a25101;
+ public int a25102;
+ public int a25103;
+ public int a25104;
+ public int a25105;
+ public int a25106;
+ public int a25107;
+ public int a25108;
+ public int a25109;
+ public int a25110;
+ public int a25111;
+ public int a25112;
+ public int a25113;
+ public int a25114;
+ public int a25115;
+ public int a25116;
+ public int a25117;
+ public int a25118;
+ public int a25119;
+ public int a25120;
+ public int a25121;
+ public int a25122;
+ public int a25123;
+ public int a25124;
+ public int a25125;
+ public int a25126;
+ public int a25127;
+ public int a25128;
+ public int a25129;
+ public int a25130;
+ public int a25131;
+ public int a25132;
+ public int a25133;
+ public int a25134;
+ public int a25135;
+ public int a25136;
+ public int a25137;
+ public int a25138;
+ public int a25139;
+ public int a25140;
+ public int a25141;
+ public int a25142;
+ public int a25143;
+ public int a25144;
+ public int a25145;
+ public int a25146;
+ public int a25147;
+ public int a25148;
+ public int a25149;
+ public int a25150;
+ public int a25151;
+ public int a25152;
+ public int a25153;
+ public int a25154;
+ public int a25155;
+ public int a25156;
+ public int a25157;
+ public int a25158;
+ public int a25159;
+ public int a25160;
+ public int a25161;
+ public int a25162;
+ public int a25163;
+ public int a25164;
+ public int a25165;
+ public int a25166;
+ public int a25167;
+ public int a25168;
+ public int a25169;
+ public int a25170;
+ public int a25171;
+ public int a25172;
+ public int a25173;
+ public int a25174;
+ public int a25175;
+ public int a25176;
+ public int a25177;
+ public int a25178;
+ public int a25179;
+ public int a25180;
+ public int a25181;
+ public int a25182;
+ public int a25183;
+ public int a25184;
+ public int a25185;
+ public int a25186;
+ public int a25187;
+ public int a25188;
+ public int a25189;
+ public int a25190;
+ public int a25191;
+ public int a25192;
+ public int a25193;
+ public int a25194;
+ public int a25195;
+ public int a25196;
+ public int a25197;
+ public int a25198;
+ public int a25199;
+ public int a25200;
+ public int a25201;
+ public int a25202;
+ public int a25203;
+ public int a25204;
+ public int a25205;
+ public int a25206;
+ public int a25207;
+ public int a25208;
+ public int a25209;
+ public int a25210;
+ public int a25211;
+ public int a25212;
+ public int a25213;
+ public int a25214;
+ public int a25215;
+ public int a25216;
+ public int a25217;
+ public int a25218;
+ public int a25219;
+ public int a25220;
+ public int a25221;
+ public int a25222;
+ public int a25223;
+ public int a25224;
+ public int a25225;
+ public int a25226;
+ public int a25227;
+ public int a25228;
+ public int a25229;
+ public int a25230;
+ public int a25231;
+ public int a25232;
+ public int a25233;
+ public int a25234;
+ public int a25235;
+ public int a25236;
+ public int a25237;
+ public int a25238;
+ public int a25239;
+ public int a25240;
+ public int a25241;
+ public int a25242;
+ public int a25243;
+ public int a25244;
+ public int a25245;
+ public int a25246;
+ public int a25247;
+ public int a25248;
+ public int a25249;
+ public int a25250;
+ public int a25251;
+ public int a25252;
+ public int a25253;
+ public int a25254;
+ public int a25255;
+ public int a25256;
+ public int a25257;
+ public int a25258;
+ public int a25259;
+ public int a25260;
+ public int a25261;
+ public int a25262;
+ public int a25263;
+ public int a25264;
+ public int a25265;
+ public int a25266;
+ public int a25267;
+ public int a25268;
+ public int a25269;
+ public int a25270;
+ public int a25271;
+ public int a25272;
+ public int a25273;
+ public int a25274;
+ public int a25275;
+ public int a25276;
+ public int a25277;
+ public int a25278;
+ public int a25279;
+ public int a25280;
+ public int a25281;
+ public int a25282;
+ public int a25283;
+ public int a25284;
+ public int a25285;
+ public int a25286;
+ public int a25287;
+ public int a25288;
+ public int a25289;
+ public int a25290;
+ public int a25291;
+ public int a25292;
+ public int a25293;
+ public int a25294;
+ public int a25295;
+ public int a25296;
+ public int a25297;
+ public int a25298;
+ public int a25299;
+ public int a25300;
+ public int a25301;
+ public int a25302;
+ public int a25303;
+ public int a25304;
+ public int a25305;
+ public int a25306;
+ public int a25307;
+ public int a25308;
+ public int a25309;
+ public int a25310;
+ public int a25311;
+ public int a25312;
+ public int a25313;
+ public int a25314;
+ public int a25315;
+ public int a25316;
+ public int a25317;
+ public int a25318;
+ public int a25319;
+ public int a25320;
+ public int a25321;
+ public int a25322;
+ public int a25323;
+ public int a25324;
+ public int a25325;
+ public int a25326;
+ public int a25327;
+ public int a25328;
+ public int a25329;
+ public int a25330;
+ public int a25331;
+ public int a25332;
+ public int a25333;
+ public int a25334;
+ public int a25335;
+ public int a25336;
+ public int a25337;
+ public int a25338;
+ public int a25339;
+ public int a25340;
+ public int a25341;
+ public int a25342;
+ public int a25343;
+ public int a25344;
+ public int a25345;
+ public int a25346;
+ public int a25347;
+ public int a25348;
+ public int a25349;
+ public int a25350;
+ public int a25351;
+ public int a25352;
+ public int a25353;
+ public int a25354;
+ public int a25355;
+ public int a25356;
+ public int a25357;
+ public int a25358;
+ public int a25359;
+ public int a25360;
+ public int a25361;
+ public int a25362;
+ public int a25363;
+ public int a25364;
+ public int a25365;
+ public int a25366;
+ public int a25367;
+ public int a25368;
+ public int a25369;
+ public int a25370;
+ public int a25371;
+ public int a25372;
+ public int a25373;
+ public int a25374;
+ public int a25375;
+ public int a25376;
+ public int a25377;
+ public int a25378;
+ public int a25379;
+ public int a25380;
+ public int a25381;
+ public int a25382;
+ public int a25383;
+ public int a25384;
+ public int a25385;
+ public int a25386;
+ public int a25387;
+ public int a25388;
+ public int a25389;
+ public int a25390;
+ public int a25391;
+ public int a25392;
+ public int a25393;
+ public int a25394;
+ public int a25395;
+ public int a25396;
+ public int a25397;
+ public int a25398;
+ public int a25399;
+ public int a25400;
+ public int a25401;
+ public int a25402;
+ public int a25403;
+ public int a25404;
+ public int a25405;
+ public int a25406;
+ public int a25407;
+ public int a25408;
+ public int a25409;
+ public int a25410;
+ public int a25411;
+ public int a25412;
+ public int a25413;
+ public int a25414;
+ public int a25415;
+ public int a25416;
+ public int a25417;
+ public int a25418;
+ public int a25419;
+ public int a25420;
+ public int a25421;
+ public int a25422;
+ public int a25423;
+ public int a25424;
+ public int a25425;
+ public int a25426;
+ public int a25427;
+ public int a25428;
+ public int a25429;
+ public int a25430;
+ public int a25431;
+ public int a25432;
+ public int a25433;
+ public int a25434;
+ public int a25435;
+ public int a25436;
+ public int a25437;
+ public int a25438;
+ public int a25439;
+ public int a25440;
+ public int a25441;
+ public int a25442;
+ public int a25443;
+ public int a25444;
+ public int a25445;
+ public int a25446;
+ public int a25447;
+ public int a25448;
+ public int a25449;
+ public int a25450;
+ public int a25451;
+ public int a25452;
+ public int a25453;
+ public int a25454;
+ public int a25455;
+ public int a25456;
+ public int a25457;
+ public int a25458;
+ public int a25459;
+ public int a25460;
+ public int a25461;
+ public int a25462;
+ public int a25463;
+ public int a25464;
+ public int a25465;
+ public int a25466;
+ public int a25467;
+ public int a25468;
+ public int a25469;
+ public int a25470;
+ public int a25471;
+ public int a25472;
+ public int a25473;
+ public int a25474;
+ public int a25475;
+ public int a25476;
+ public int a25477;
+ public int a25478;
+ public int a25479;
+ public int a25480;
+ public int a25481;
+ public int a25482;
+ public int a25483;
+ public int a25484;
+ public int a25485;
+ public int a25486;
+ public int a25487;
+ public int a25488;
+ public int a25489;
+ public int a25490;
+ public int a25491;
+ public int a25492;
+ public int a25493;
+ public int a25494;
+ public int a25495;
+ public int a25496;
+ public int a25497;
+ public int a25498;
+ public int a25499;
+ public int a25500;
+ public int a25501;
+ public int a25502;
+ public int a25503;
+ public int a25504;
+ public int a25505;
+ public int a25506;
+ public int a25507;
+ public int a25508;
+ public int a25509;
+ public int a25510;
+ public int a25511;
+ public int a25512;
+ public int a25513;
+ public int a25514;
+ public int a25515;
+ public int a25516;
+ public int a25517;
+ public int a25518;
+ public int a25519;
+ public int a25520;
+ public int a25521;
+ public int a25522;
+ public int a25523;
+ public int a25524;
+ public int a25525;
+ public int a25526;
+ public int a25527;
+ public int a25528;
+ public int a25529;
+ public int a25530;
+ public int a25531;
+ public int a25532;
+ public int a25533;
+ public int a25534;
+ public int a25535;
+ public int a25536;
+ public int a25537;
+ public int a25538;
+ public int a25539;
+ public int a25540;
+ public int a25541;
+ public int a25542;
+ public int a25543;
+ public int a25544;
+ public int a25545;
+ public int a25546;
+ public int a25547;
+ public int a25548;
+ public int a25549;
+ public int a25550;
+ public int a25551;
+ public int a25552;
+ public int a25553;
+ public int a25554;
+ public int a25555;
+ public int a25556;
+ public int a25557;
+ public int a25558;
+ public int a25559;
+ public int a25560;
+ public int a25561;
+ public int a25562;
+ public int a25563;
+ public int a25564;
+ public int a25565;
+ public int a25566;
+ public int a25567;
+ public int a25568;
+ public int a25569;
+ public int a25570;
+ public int a25571;
+ public int a25572;
+ public int a25573;
+ public int a25574;
+ public int a25575;
+ public int a25576;
+ public int a25577;
+ public int a25578;
+ public int a25579;
+ public int a25580;
+ public int a25581;
+ public int a25582;
+ public int a25583;
+ public int a25584;
+ public int a25585;
+ public int a25586;
+ public int a25587;
+ public int a25588;
+ public int a25589;
+ public int a25590;
+ public int a25591;
+ public int a25592;
+ public int a25593;
+ public int a25594;
+ public int a25595;
+ public int a25596;
+ public int a25597;
+ public int a25598;
+ public int a25599;
+ public int a25600;
+ public int a25601;
+ public int a25602;
+ public int a25603;
+ public int a25604;
+ public int a25605;
+ public int a25606;
+ public int a25607;
+ public int a25608;
+ public int a25609;
+ public int a25610;
+ public int a25611;
+ public int a25612;
+ public int a25613;
+ public int a25614;
+ public int a25615;
+ public int a25616;
+ public int a25617;
+ public int a25618;
+ public int a25619;
+ public int a25620;
+ public int a25621;
+ public int a25622;
+ public int a25623;
+ public int a25624;
+ public int a25625;
+ public int a25626;
+ public int a25627;
+ public int a25628;
+ public int a25629;
+ public int a25630;
+ public int a25631;
+ public int a25632;
+ public int a25633;
+ public int a25634;
+ public int a25635;
+ public int a25636;
+ public int a25637;
+ public int a25638;
+ public int a25639;
+ public int a25640;
+ public int a25641;
+ public int a25642;
+ public int a25643;
+ public int a25644;
+ public int a25645;
+ public int a25646;
+ public int a25647;
+ public int a25648;
+ public int a25649;
+ public int a25650;
+ public int a25651;
+ public int a25652;
+ public int a25653;
+ public int a25654;
+ public int a25655;
+ public int a25656;
+ public int a25657;
+ public int a25658;
+ public int a25659;
+ public int a25660;
+ public int a25661;
+ public int a25662;
+ public int a25663;
+ public int a25664;
+ public int a25665;
+ public int a25666;
+ public int a25667;
+ public int a25668;
+ public int a25669;
+ public int a25670;
+ public int a25671;
+ public int a25672;
+ public int a25673;
+ public int a25674;
+ public int a25675;
+ public int a25676;
+ public int a25677;
+ public int a25678;
+ public int a25679;
+ public int a25680;
+ public int a25681;
+ public int a25682;
+ public int a25683;
+ public int a25684;
+ public int a25685;
+ public int a25686;
+ public int a25687;
+ public int a25688;
+ public int a25689;
+ public int a25690;
+ public int a25691;
+ public int a25692;
+ public int a25693;
+ public int a25694;
+ public int a25695;
+ public int a25696;
+ public int a25697;
+ public int a25698;
+ public int a25699;
+ public int a25700;
+ public int a25701;
+ public int a25702;
+ public int a25703;
+ public int a25704;
+ public int a25705;
+ public int a25706;
+ public int a25707;
+ public int a25708;
+ public int a25709;
+ public int a25710;
+ public int a25711;
+ public int a25712;
+ public int a25713;
+ public int a25714;
+ public int a25715;
+ public int a25716;
+ public int a25717;
+ public int a25718;
+ public int a25719;
+ public int a25720;
+ public int a25721;
+ public int a25722;
+ public int a25723;
+ public int a25724;
+ public int a25725;
+ public int a25726;
+ public int a25727;
+ public int a25728;
+ public int a25729;
+ public int a25730;
+ public int a25731;
+ public int a25732;
+ public int a25733;
+ public int a25734;
+ public int a25735;
+ public int a25736;
+ public int a25737;
+ public int a25738;
+ public int a25739;
+ public int a25740;
+ public int a25741;
+ public int a25742;
+ public int a25743;
+ public int a25744;
+ public int a25745;
+ public int a25746;
+ public int a25747;
+ public int a25748;
+ public int a25749;
+ public int a25750;
+ public int a25751;
+ public int a25752;
+ public int a25753;
+ public int a25754;
+ public int a25755;
+ public int a25756;
+ public int a25757;
+ public int a25758;
+ public int a25759;
+ public int a25760;
+ public int a25761;
+ public int a25762;
+ public int a25763;
+ public int a25764;
+ public int a25765;
+ public int a25766;
+ public int a25767;
+ public int a25768;
+ public int a25769;
+ public int a25770;
+ public int a25771;
+ public int a25772;
+ public int a25773;
+ public int a25774;
+ public int a25775;
+ public int a25776;
+ public int a25777;
+ public int a25778;
+ public int a25779;
+ public int a25780;
+ public int a25781;
+ public int a25782;
+ public int a25783;
+ public int a25784;
+ public int a25785;
+ public int a25786;
+ public int a25787;
+ public int a25788;
+ public int a25789;
+ public int a25790;
+ public int a25791;
+ public int a25792;
+ public int a25793;
+ public int a25794;
+ public int a25795;
+ public int a25796;
+ public int a25797;
+ public int a25798;
+ public int a25799;
+ public int a25800;
+ public int a25801;
+ public int a25802;
+ public int a25803;
+ public int a25804;
+ public int a25805;
+ public int a25806;
+ public int a25807;
+ public int a25808;
+ public int a25809;
+ public int a25810;
+ public int a25811;
+ public int a25812;
+ public int a25813;
+ public int a25814;
+ public int a25815;
+ public int a25816;
+ public int a25817;
+ public int a25818;
+ public int a25819;
+ public int a25820;
+ public int a25821;
+ public int a25822;
+ public int a25823;
+ public int a25824;
+ public int a25825;
+ public int a25826;
+ public int a25827;
+ public int a25828;
+ public int a25829;
+ public int a25830;
+ public int a25831;
+ public int a25832;
+ public int a25833;
+ public int a25834;
+ public int a25835;
+ public int a25836;
+ public int a25837;
+ public int a25838;
+ public int a25839;
+ public int a25840;
+ public int a25841;
+ public int a25842;
+ public int a25843;
+ public int a25844;
+ public int a25845;
+ public int a25846;
+ public int a25847;
+ public int a25848;
+ public int a25849;
+ public int a25850;
+ public int a25851;
+ public int a25852;
+ public int a25853;
+ public int a25854;
+ public int a25855;
+ public int a25856;
+ public int a25857;
+ public int a25858;
+ public int a25859;
+ public int a25860;
+ public int a25861;
+ public int a25862;
+ public int a25863;
+ public int a25864;
+ public int a25865;
+ public int a25866;
+ public int a25867;
+ public int a25868;
+ public int a25869;
+ public int a25870;
+ public int a25871;
+ public int a25872;
+ public int a25873;
+ public int a25874;
+ public int a25875;
+ public int a25876;
+ public int a25877;
+ public int a25878;
+ public int a25879;
+ public int a25880;
+ public int a25881;
+ public int a25882;
+ public int a25883;
+ public int a25884;
+ public int a25885;
+ public int a25886;
+ public int a25887;
+ public int a25888;
+ public int a25889;
+ public int a25890;
+ public int a25891;
+ public int a25892;
+ public int a25893;
+ public int a25894;
+ public int a25895;
+ public int a25896;
+ public int a25897;
+ public int a25898;
+ public int a25899;
+ public int a25900;
+ public int a25901;
+ public int a25902;
+ public int a25903;
+ public int a25904;
+ public int a25905;
+ public int a25906;
+ public int a25907;
+ public int a25908;
+ public int a25909;
+ public int a25910;
+ public int a25911;
+ public int a25912;
+ public int a25913;
+ public int a25914;
+ public int a25915;
+ public int a25916;
+ public int a25917;
+ public int a25918;
+ public int a25919;
+ public int a25920;
+ public int a25921;
+ public int a25922;
+ public int a25923;
+ public int a25924;
+ public int a25925;
+ public int a25926;
+ public int a25927;
+ public int a25928;
+ public int a25929;
+ public int a25930;
+ public int a25931;
+ public int a25932;
+ public int a25933;
+ public int a25934;
+ public int a25935;
+ public int a25936;
+ public int a25937;
+ public int a25938;
+ public int a25939;
+ public int a25940;
+ public int a25941;
+ public int a25942;
+ public int a25943;
+ public int a25944;
+ public int a25945;
+ public int a25946;
+ public int a25947;
+ public int a25948;
+ public int a25949;
+ public int a25950;
+ public int a25951;
+ public int a25952;
+ public int a25953;
+ public int a25954;
+ public int a25955;
+ public int a25956;
+ public int a25957;
+ public int a25958;
+ public int a25959;
+ public int a25960;
+ public int a25961;
+ public int a25962;
+ public int a25963;
+ public int a25964;
+ public int a25965;
+ public int a25966;
+ public int a25967;
+ public int a25968;
+ public int a25969;
+ public int a25970;
+ public int a25971;
+ public int a25972;
+ public int a25973;
+ public int a25974;
+ public int a25975;
+ public int a25976;
+ public int a25977;
+ public int a25978;
+ public int a25979;
+ public int a25980;
+ public int a25981;
+ public int a25982;
+ public int a25983;
+ public int a25984;
+ public int a25985;
+ public int a25986;
+ public int a25987;
+ public int a25988;
+ public int a25989;
+ public int a25990;
+ public int a25991;
+ public int a25992;
+ public int a25993;
+ public int a25994;
+ public int a25995;
+ public int a25996;
+ public int a25997;
+ public int a25998;
+ public int a25999;
+ public int a26000;
+ public int a26001;
+ public int a26002;
+ public int a26003;
+ public int a26004;
+ public int a26005;
+ public int a26006;
+ public int a26007;
+ public int a26008;
+ public int a26009;
+ public int a26010;
+ public int a26011;
+ public int a26012;
+ public int a26013;
+ public int a26014;
+ public int a26015;
+ public int a26016;
+ public int a26017;
+ public int a26018;
+ public int a26019;
+ public int a26020;
+ public int a26021;
+ public int a26022;
+ public int a26023;
+ public int a26024;
+ public int a26025;
+ public int a26026;
+ public int a26027;
+ public int a26028;
+ public int a26029;
+ public int a26030;
+ public int a26031;
+ public int a26032;
+ public int a26033;
+ public int a26034;
+ public int a26035;
+ public int a26036;
+ public int a26037;
+ public int a26038;
+ public int a26039;
+ public int a26040;
+ public int a26041;
+ public int a26042;
+ public int a26043;
+ public int a26044;
+ public int a26045;
+ public int a26046;
+ public int a26047;
+ public int a26048;
+ public int a26049;
+ public int a26050;
+ public int a26051;
+ public int a26052;
+ public int a26053;
+ public int a26054;
+ public int a26055;
+ public int a26056;
+ public int a26057;
+ public int a26058;
+ public int a26059;
+ public int a26060;
+ public int a26061;
+ public int a26062;
+ public int a26063;
+ public int a26064;
+ public int a26065;
+ public int a26066;
+ public int a26067;
+ public int a26068;
+ public int a26069;
+ public int a26070;
+ public int a26071;
+ public int a26072;
+ public int a26073;
+ public int a26074;
+ public int a26075;
+ public int a26076;
+ public int a26077;
+ public int a26078;
+ public int a26079;
+ public int a26080;
+ public int a26081;
+ public int a26082;
+ public int a26083;
+ public int a26084;
+ public int a26085;
+ public int a26086;
+ public int a26087;
+ public int a26088;
+ public int a26089;
+ public int a26090;
+ public int a26091;
+ public int a26092;
+ public int a26093;
+ public int a26094;
+ public int a26095;
+ public int a26096;
+ public int a26097;
+ public int a26098;
+ public int a26099;
+ public int a26100;
+ public int a26101;
+ public int a26102;
+ public int a26103;
+ public int a26104;
+ public int a26105;
+ public int a26106;
+ public int a26107;
+ public int a26108;
+ public int a26109;
+ public int a26110;
+ public int a26111;
+ public int a26112;
+ public int a26113;
+ public int a26114;
+ public int a26115;
+ public int a26116;
+ public int a26117;
+ public int a26118;
+ public int a26119;
+ public int a26120;
+ public int a26121;
+ public int a26122;
+ public int a26123;
+ public int a26124;
+ public int a26125;
+ public int a26126;
+ public int a26127;
+ public int a26128;
+ public int a26129;
+ public int a26130;
+ public int a26131;
+ public int a26132;
+ public int a26133;
+ public int a26134;
+ public int a26135;
+ public int a26136;
+ public int a26137;
+ public int a26138;
+ public int a26139;
+ public int a26140;
+ public int a26141;
+ public int a26142;
+ public int a26143;
+ public int a26144;
+ public int a26145;
+ public int a26146;
+ public int a26147;
+ public int a26148;
+ public int a26149;
+ public int a26150;
+ public int a26151;
+ public int a26152;
+ public int a26153;
+ public int a26154;
+ public int a26155;
+ public int a26156;
+ public int a26157;
+ public int a26158;
+ public int a26159;
+ public int a26160;
+ public int a26161;
+ public int a26162;
+ public int a26163;
+ public int a26164;
+ public int a26165;
+ public int a26166;
+ public int a26167;
+ public int a26168;
+ public int a26169;
+ public int a26170;
+ public int a26171;
+ public int a26172;
+ public int a26173;
+ public int a26174;
+ public int a26175;
+ public int a26176;
+ public int a26177;
+ public int a26178;
+ public int a26179;
+ public int a26180;
+ public int a26181;
+ public int a26182;
+ public int a26183;
+ public int a26184;
+ public int a26185;
+ public int a26186;
+ public int a26187;
+ public int a26188;
+ public int a26189;
+ public int a26190;
+ public int a26191;
+ public int a26192;
+ public int a26193;
+ public int a26194;
+ public int a26195;
+ public int a26196;
+ public int a26197;
+ public int a26198;
+ public int a26199;
+ public int a26200;
+ public int a26201;
+ public int a26202;
+ public int a26203;
+ public int a26204;
+ public int a26205;
+ public int a26206;
+ public int a26207;
+ public int a26208;
+ public int a26209;
+ public int a26210;
+ public int a26211;
+ public int a26212;
+ public int a26213;
+ public int a26214;
+ public int a26215;
+ public int a26216;
+ public int a26217;
+ public int a26218;
+ public int a26219;
+ public int a26220;
+ public int a26221;
+ public int a26222;
+ public int a26223;
+ public int a26224;
+ public int a26225;
+ public int a26226;
+ public int a26227;
+ public int a26228;
+ public int a26229;
+ public int a26230;
+ public int a26231;
+ public int a26232;
+ public int a26233;
+ public int a26234;
+ public int a26235;
+ public int a26236;
+ public int a26237;
+ public int a26238;
+ public int a26239;
+ public int a26240;
+ public int a26241;
+ public int a26242;
+ public int a26243;
+ public int a26244;
+ public int a26245;
+ public int a26246;
+ public int a26247;
+ public int a26248;
+ public int a26249;
+ public int a26250;
+ public int a26251;
+ public int a26252;
+ public int a26253;
+ public int a26254;
+ public int a26255;
+ public int a26256;
+ public int a26257;
+ public int a26258;
+ public int a26259;
+ public int a26260;
+ public int a26261;
+ public int a26262;
+ public int a26263;
+ public int a26264;
+ public int a26265;
+ public int a26266;
+ public int a26267;
+ public int a26268;
+ public int a26269;
+ public int a26270;
+ public int a26271;
+ public int a26272;
+ public int a26273;
+ public int a26274;
+ public int a26275;
+ public int a26276;
+ public int a26277;
+ public int a26278;
+ public int a26279;
+ public int a26280;
+ public int a26281;
+ public int a26282;
+ public int a26283;
+ public int a26284;
+ public int a26285;
+ public int a26286;
+ public int a26287;
+ public int a26288;
+ public int a26289;
+ public int a26290;
+ public int a26291;
+ public int a26292;
+ public int a26293;
+ public int a26294;
+ public int a26295;
+ public int a26296;
+ public int a26297;
+ public int a26298;
+ public int a26299;
+ public int a26300;
+ public int a26301;
+ public int a26302;
+ public int a26303;
+ public int a26304;
+ public int a26305;
+ public int a26306;
+ public int a26307;
+ public int a26308;
+ public int a26309;
+ public int a26310;
+ public int a26311;
+ public int a26312;
+ public int a26313;
+ public int a26314;
+ public int a26315;
+ public int a26316;
+ public int a26317;
+ public int a26318;
+ public int a26319;
+ public int a26320;
+ public int a26321;
+ public int a26322;
+ public int a26323;
+ public int a26324;
+ public int a26325;
+ public int a26326;
+ public int a26327;
+ public int a26328;
+ public int a26329;
+ public int a26330;
+ public int a26331;
+ public int a26332;
+ public int a26333;
+ public int a26334;
+ public int a26335;
+ public int a26336;
+ public int a26337;
+ public int a26338;
+ public int a26339;
+ public int a26340;
+ public int a26341;
+ public int a26342;
+ public int a26343;
+ public int a26344;
+ public int a26345;
+ public int a26346;
+ public int a26347;
+ public int a26348;
+ public int a26349;
+ public int a26350;
+ public int a26351;
+ public int a26352;
+ public int a26353;
+ public int a26354;
+ public int a26355;
+ public int a26356;
+ public int a26357;
+ public int a26358;
+ public int a26359;
+ public int a26360;
+ public int a26361;
+ public int a26362;
+ public int a26363;
+ public int a26364;
+ public int a26365;
+ public int a26366;
+ public int a26367;
+ public int a26368;
+ public int a26369;
+ public int a26370;
+ public int a26371;
+ public int a26372;
+ public int a26373;
+ public int a26374;
+ public int a26375;
+ public int a26376;
+ public int a26377;
+ public int a26378;
+ public int a26379;
+ public int a26380;
+ public int a26381;
+ public int a26382;
+ public int a26383;
+ public int a26384;
+ public int a26385;
+ public int a26386;
+ public int a26387;
+ public int a26388;
+ public int a26389;
+ public int a26390;
+ public int a26391;
+ public int a26392;
+ public int a26393;
+ public int a26394;
+ public int a26395;
+ public int a26396;
+ public int a26397;
+ public int a26398;
+ public int a26399;
+ public int a26400;
+ public int a26401;
+ public int a26402;
+ public int a26403;
+ public int a26404;
+ public int a26405;
+ public int a26406;
+ public int a26407;
+ public int a26408;
+ public int a26409;
+ public int a26410;
+ public int a26411;
+ public int a26412;
+ public int a26413;
+ public int a26414;
+ public int a26415;
+ public int a26416;
+ public int a26417;
+ public int a26418;
+ public int a26419;
+ public int a26420;
+ public int a26421;
+ public int a26422;
+ public int a26423;
+ public int a26424;
+ public int a26425;
+ public int a26426;
+ public int a26427;
+ public int a26428;
+ public int a26429;
+ public int a26430;
+ public int a26431;
+ public int a26432;
+ public int a26433;
+ public int a26434;
+ public int a26435;
+ public int a26436;
+ public int a26437;
+ public int a26438;
+ public int a26439;
+ public int a26440;
+ public int a26441;
+ public int a26442;
+ public int a26443;
+ public int a26444;
+ public int a26445;
+ public int a26446;
+ public int a26447;
+ public int a26448;
+ public int a26449;
+ public int a26450;
+ public int a26451;
+ public int a26452;
+ public int a26453;
+ public int a26454;
+ public int a26455;
+ public int a26456;
+ public int a26457;
+ public int a26458;
+ public int a26459;
+ public int a26460;
+ public int a26461;
+ public int a26462;
+ public int a26463;
+ public int a26464;
+ public int a26465;
+ public int a26466;
+ public int a26467;
+ public int a26468;
+ public int a26469;
+ public int a26470;
+ public int a26471;
+ public int a26472;
+ public int a26473;
+ public int a26474;
+ public int a26475;
+ public int a26476;
+ public int a26477;
+ public int a26478;
+ public int a26479;
+ public int a26480;
+ public int a26481;
+ public int a26482;
+ public int a26483;
+ public int a26484;
+ public int a26485;
+ public int a26486;
+ public int a26487;
+ public int a26488;
+ public int a26489;
+ public int a26490;
+ public int a26491;
+ public int a26492;
+ public int a26493;
+ public int a26494;
+ public int a26495;
+ public int a26496;
+ public int a26497;
+ public int a26498;
+ public int a26499;
+ public int a26500;
+ public int a26501;
+ public int a26502;
+ public int a26503;
+ public int a26504;
+ public int a26505;
+ public int a26506;
+ public int a26507;
+ public int a26508;
+ public int a26509;
+ public int a26510;
+ public int a26511;
+ public int a26512;
+ public int a26513;
+ public int a26514;
+ public int a26515;
+ public int a26516;
+ public int a26517;
+ public int a26518;
+ public int a26519;
+ public int a26520;
+ public int a26521;
+ public int a26522;
+ public int a26523;
+ public int a26524;
+ public int a26525;
+ public int a26526;
+ public int a26527;
+ public int a26528;
+ public int a26529;
+ public int a26530;
+ public int a26531;
+ public int a26532;
+ public int a26533;
+ public int a26534;
+ public int a26535;
+ public int a26536;
+ public int a26537;
+ public int a26538;
+ public int a26539;
+ public int a26540;
+ public int a26541;
+ public int a26542;
+ public int a26543;
+ public int a26544;
+ public int a26545;
+ public int a26546;
+ public int a26547;
+ public int a26548;
+ public int a26549;
+ public int a26550;
+ public int a26551;
+ public int a26552;
+ public int a26553;
+ public int a26554;
+ public int a26555;
+ public int a26556;
+ public int a26557;
+ public int a26558;
+ public int a26559;
+ public int a26560;
+ public int a26561;
+ public int a26562;
+ public int a26563;
+ public int a26564;
+ public int a26565;
+ public int a26566;
+ public int a26567;
+ public int a26568;
+ public int a26569;
+ public int a26570;
+ public int a26571;
+ public int a26572;
+ public int a26573;
+ public int a26574;
+ public int a26575;
+ public int a26576;
+ public int a26577;
+ public int a26578;
+ public int a26579;
+ public int a26580;
+ public int a26581;
+ public int a26582;
+ public int a26583;
+ public int a26584;
+ public int a26585;
+ public int a26586;
+ public int a26587;
+ public int a26588;
+ public int a26589;
+ public int a26590;
+ public int a26591;
+ public int a26592;
+ public int a26593;
+ public int a26594;
+ public int a26595;
+ public int a26596;
+ public int a26597;
+ public int a26598;
+ public int a26599;
+ public int a26600;
+ public int a26601;
+ public int a26602;
+ public int a26603;
+ public int a26604;
+ public int a26605;
+ public int a26606;
+ public int a26607;
+ public int a26608;
+ public int a26609;
+ public int a26610;
+ public int a26611;
+ public int a26612;
+ public int a26613;
+ public int a26614;
+ public int a26615;
+ public int a26616;
+ public int a26617;
+ public int a26618;
+ public int a26619;
+ public int a26620;
+ public int a26621;
+ public int a26622;
+ public int a26623;
+ public int a26624;
+ public int a26625;
+ public int a26626;
+ public int a26627;
+ public int a26628;
+ public int a26629;
+ public int a26630;
+ public int a26631;
+ public int a26632;
+ public int a26633;
+ public int a26634;
+ public int a26635;
+ public int a26636;
+ public int a26637;
+ public int a26638;
+ public int a26639;
+ public int a26640;
+ public int a26641;
+ public int a26642;
+ public int a26643;
+ public int a26644;
+ public int a26645;
+ public int a26646;
+ public int a26647;
+ public int a26648;
+ public int a26649;
+ public int a26650;
+ public int a26651;
+ public int a26652;
+ public int a26653;
+ public int a26654;
+ public int a26655;
+ public int a26656;
+ public int a26657;
+ public int a26658;
+ public int a26659;
+ public int a26660;
+ public int a26661;
+ public int a26662;
+ public int a26663;
+ public int a26664;
+ public int a26665;
+ public int a26666;
+ public int a26667;
+ public int a26668;
+ public int a26669;
+ public int a26670;
+ public int a26671;
+ public int a26672;
+ public int a26673;
+ public int a26674;
+ public int a26675;
+ public int a26676;
+ public int a26677;
+ public int a26678;
+ public int a26679;
+ public int a26680;
+ public int a26681;
+ public int a26682;
+ public int a26683;
+ public int a26684;
+ public int a26685;
+ public int a26686;
+ public int a26687;
+ public int a26688;
+ public int a26689;
+ public int a26690;
+ public int a26691;
+ public int a26692;
+ public int a26693;
+ public int a26694;
+ public int a26695;
+ public int a26696;
+ public int a26697;
+ public int a26698;
+ public int a26699;
+ public int a26700;
+ public int a26701;
+ public int a26702;
+ public int a26703;
+ public int a26704;
+ public int a26705;
+ public int a26706;
+ public int a26707;
+ public int a26708;
+ public int a26709;
+ public int a26710;
+ public int a26711;
+ public int a26712;
+ public int a26713;
+ public int a26714;
+ public int a26715;
+ public int a26716;
+ public int a26717;
+ public int a26718;
+ public int a26719;
+ public int a26720;
+ public int a26721;
+ public int a26722;
+ public int a26723;
+ public int a26724;
+ public int a26725;
+ public int a26726;
+ public int a26727;
+ public int a26728;
+ public int a26729;
+ public int a26730;
+ public int a26731;
+ public int a26732;
+ public int a26733;
+ public int a26734;
+ public int a26735;
+ public int a26736;
+ public int a26737;
+ public int a26738;
+ public int a26739;
+ public int a26740;
+ public int a26741;
+ public int a26742;
+ public int a26743;
+ public int a26744;
+ public int a26745;
+ public int a26746;
+ public int a26747;
+ public int a26748;
+ public int a26749;
+ public int a26750;
+ public int a26751;
+ public int a26752;
+ public int a26753;
+ public int a26754;
+ public int a26755;
+ public int a26756;
+ public int a26757;
+ public int a26758;
+ public int a26759;
+ public int a26760;
+ public int a26761;
+ public int a26762;
+ public int a26763;
+ public int a26764;
+ public int a26765;
+ public int a26766;
+ public int a26767;
+ public int a26768;
+ public int a26769;
+ public int a26770;
+ public int a26771;
+ public int a26772;
+ public int a26773;
+ public int a26774;
+ public int a26775;
+ public int a26776;
+ public int a26777;
+ public int a26778;
+ public int a26779;
+ public int a26780;
+ public int a26781;
+ public int a26782;
+ public int a26783;
+ public int a26784;
+ public int a26785;
+ public int a26786;
+ public int a26787;
+ public int a26788;
+ public int a26789;
+ public int a26790;
+ public int a26791;
+ public int a26792;
+ public int a26793;
+ public int a26794;
+ public int a26795;
+ public int a26796;
+ public int a26797;
+ public int a26798;
+ public int a26799;
+ public int a26800;
+ public int a26801;
+ public int a26802;
+ public int a26803;
+ public int a26804;
+ public int a26805;
+ public int a26806;
+ public int a26807;
+ public int a26808;
+ public int a26809;
+ public int a26810;
+ public int a26811;
+ public int a26812;
+ public int a26813;
+ public int a26814;
+ public int a26815;
+ public int a26816;
+ public int a26817;
+ public int a26818;
+ public int a26819;
+ public int a26820;
+ public int a26821;
+ public int a26822;
+ public int a26823;
+ public int a26824;
+ public int a26825;
+ public int a26826;
+ public int a26827;
+ public int a26828;
+ public int a26829;
+ public int a26830;
+ public int a26831;
+ public int a26832;
+ public int a26833;
+ public int a26834;
+ public int a26835;
+ public int a26836;
+ public int a26837;
+ public int a26838;
+ public int a26839;
+ public int a26840;
+ public int a26841;
+ public int a26842;
+ public int a26843;
+ public int a26844;
+ public int a26845;
+ public int a26846;
+ public int a26847;
+ public int a26848;
+ public int a26849;
+ public int a26850;
+ public int a26851;
+ public int a26852;
+ public int a26853;
+ public int a26854;
+ public int a26855;
+ public int a26856;
+ public int a26857;
+ public int a26858;
+ public int a26859;
+ public int a26860;
+ public int a26861;
+ public int a26862;
+ public int a26863;
+ public int a26864;
+ public int a26865;
+ public int a26866;
+ public int a26867;
+ public int a26868;
+ public int a26869;
+ public int a26870;
+ public int a26871;
+ public int a26872;
+ public int a26873;
+ public int a26874;
+ public int a26875;
+ public int a26876;
+ public int a26877;
+ public int a26878;
+ public int a26879;
+ public int a26880;
+ public int a26881;
+ public int a26882;
+ public int a26883;
+ public int a26884;
+ public int a26885;
+ public int a26886;
+ public int a26887;
+ public int a26888;
+ public int a26889;
+ public int a26890;
+ public int a26891;
+ public int a26892;
+ public int a26893;
+ public int a26894;
+ public int a26895;
+ public int a26896;
+ public int a26897;
+ public int a26898;
+ public int a26899;
+ public int a26900;
+ public int a26901;
+ public int a26902;
+ public int a26903;
+ public int a26904;
+ public int a26905;
+ public int a26906;
+ public int a26907;
+ public int a26908;
+ public int a26909;
+ public int a26910;
+ public int a26911;
+ public int a26912;
+ public int a26913;
+ public int a26914;
+ public int a26915;
+ public int a26916;
+ public int a26917;
+ public int a26918;
+ public int a26919;
+ public int a26920;
+ public int a26921;
+ public int a26922;
+ public int a26923;
+ public int a26924;
+ public int a26925;
+ public int a26926;
+ public int a26927;
+ public int a26928;
+ public int a26929;
+ public int a26930;
+ public int a26931;
+ public int a26932;
+ public int a26933;
+ public int a26934;
+ public int a26935;
+ public int a26936;
+ public int a26937;
+ public int a26938;
+ public int a26939;
+ public int a26940;
+ public int a26941;
+ public int a26942;
+ public int a26943;
+ public int a26944;
+ public int a26945;
+ public int a26946;
+ public int a26947;
+ public int a26948;
+ public int a26949;
+ public int a26950;
+ public int a26951;
+ public int a26952;
+ public int a26953;
+ public int a26954;
+ public int a26955;
+ public int a26956;
+ public int a26957;
+ public int a26958;
+ public int a26959;
+ public int a26960;
+ public int a26961;
+ public int a26962;
+ public int a26963;
+ public int a26964;
+ public int a26965;
+ public int a26966;
+ public int a26967;
+ public int a26968;
+ public int a26969;
+ public int a26970;
+ public int a26971;
+ public int a26972;
+ public int a26973;
+ public int a26974;
+ public int a26975;
+ public int a26976;
+ public int a26977;
+ public int a26978;
+ public int a26979;
+ public int a26980;
+ public int a26981;
+ public int a26982;
+ public int a26983;
+ public int a26984;
+ public int a26985;
+ public int a26986;
+ public int a26987;
+ public int a26988;
+ public int a26989;
+ public int a26990;
+ public int a26991;
+ public int a26992;
+ public int a26993;
+ public int a26994;
+ public int a26995;
+ public int a26996;
+ public int a26997;
+ public int a26998;
+ public int a26999;
+ public int a27000;
+ public int a27001;
+ public int a27002;
+ public int a27003;
+ public int a27004;
+ public int a27005;
+ public int a27006;
+ public int a27007;
+ public int a27008;
+ public int a27009;
+ public int a27010;
+ public int a27011;
+ public int a27012;
+ public int a27013;
+ public int a27014;
+ public int a27015;
+ public int a27016;
+ public int a27017;
+ public int a27018;
+ public int a27019;
+ public int a27020;
+ public int a27021;
+ public int a27022;
+ public int a27023;
+ public int a27024;
+ public int a27025;
+ public int a27026;
+ public int a27027;
+ public int a27028;
+ public int a27029;
+ public int a27030;
+ public int a27031;
+ public int a27032;
+ public int a27033;
+ public int a27034;
+ public int a27035;
+ public int a27036;
+ public int a27037;
+ public int a27038;
+ public int a27039;
+ public int a27040;
+ public int a27041;
+ public int a27042;
+ public int a27043;
+ public int a27044;
+ public int a27045;
+ public int a27046;
+ public int a27047;
+ public int a27048;
+ public int a27049;
+ public int a27050;
+ public int a27051;
+ public int a27052;
+ public int a27053;
+ public int a27054;
+ public int a27055;
+ public int a27056;
+ public int a27057;
+ public int a27058;
+ public int a27059;
+ public int a27060;
+ public int a27061;
+ public int a27062;
+ public int a27063;
+ public int a27064;
+ public int a27065;
+ public int a27066;
+ public int a27067;
+ public int a27068;
+ public int a27069;
+ public int a27070;
+ public int a27071;
+ public int a27072;
+ public int a27073;
+ public int a27074;
+ public int a27075;
+ public int a27076;
+ public int a27077;
+ public int a27078;
+ public int a27079;
+ public int a27080;
+ public int a27081;
+ public int a27082;
+ public int a27083;
+ public int a27084;
+ public int a27085;
+ public int a27086;
+ public int a27087;
+ public int a27088;
+ public int a27089;
+ public int a27090;
+ public int a27091;
+ public int a27092;
+ public int a27093;
+ public int a27094;
+ public int a27095;
+ public int a27096;
+ public int a27097;
+ public int a27098;
+ public int a27099;
+ public int a27100;
+ public int a27101;
+ public int a27102;
+ public int a27103;
+ public int a27104;
+ public int a27105;
+ public int a27106;
+ public int a27107;
+ public int a27108;
+ public int a27109;
+ public int a27110;
+ public int a27111;
+ public int a27112;
+ public int a27113;
+ public int a27114;
+ public int a27115;
+ public int a27116;
+ public int a27117;
+ public int a27118;
+ public int a27119;
+ public int a27120;
+ public int a27121;
+ public int a27122;
+ public int a27123;
+ public int a27124;
+ public int a27125;
+ public int a27126;
+ public int a27127;
+ public int a27128;
+ public int a27129;
+ public int a27130;
+ public int a27131;
+ public int a27132;
+ public int a27133;
+ public int a27134;
+ public int a27135;
+ public int a27136;
+ public int a27137;
+ public int a27138;
+ public int a27139;
+ public int a27140;
+ public int a27141;
+ public int a27142;
+ public int a27143;
+ public int a27144;
+ public int a27145;
+ public int a27146;
+ public int a27147;
+ public int a27148;
+ public int a27149;
+ public int a27150;
+ public int a27151;
+ public int a27152;
+ public int a27153;
+ public int a27154;
+ public int a27155;
+ public int a27156;
+ public int a27157;
+ public int a27158;
+ public int a27159;
+ public int a27160;
+ public int a27161;
+ public int a27162;
+ public int a27163;
+ public int a27164;
+ public int a27165;
+ public int a27166;
+ public int a27167;
+ public int a27168;
+ public int a27169;
+ public int a27170;
+ public int a27171;
+ public int a27172;
+ public int a27173;
+ public int a27174;
+ public int a27175;
+ public int a27176;
+ public int a27177;
+ public int a27178;
+ public int a27179;
+ public int a27180;
+ public int a27181;
+ public int a27182;
+ public int a27183;
+ public int a27184;
+ public int a27185;
+ public int a27186;
+ public int a27187;
+ public int a27188;
+ public int a27189;
+ public int a27190;
+ public int a27191;
+ public int a27192;
+ public int a27193;
+ public int a27194;
+ public int a27195;
+ public int a27196;
+ public int a27197;
+ public int a27198;
+ public int a27199;
+ public int a27200;
+ public int a27201;
+ public int a27202;
+ public int a27203;
+ public int a27204;
+ public int a27205;
+ public int a27206;
+ public int a27207;
+ public int a27208;
+ public int a27209;
+ public int a27210;
+ public int a27211;
+ public int a27212;
+ public int a27213;
+ public int a27214;
+ public int a27215;
+ public int a27216;
+ public int a27217;
+ public int a27218;
+ public int a27219;
+ public int a27220;
+ public int a27221;
+ public int a27222;
+ public int a27223;
+ public int a27224;
+ public int a27225;
+ public int a27226;
+ public int a27227;
+ public int a27228;
+ public int a27229;
+ public int a27230;
+ public int a27231;
+ public int a27232;
+ public int a27233;
+ public int a27234;
+ public int a27235;
+ public int a27236;
+ public int a27237;
+ public int a27238;
+ public int a27239;
+ public int a27240;
+ public int a27241;
+ public int a27242;
+ public int a27243;
+ public int a27244;
+ public int a27245;
+ public int a27246;
+ public int a27247;
+ public int a27248;
+ public int a27249;
+ public int a27250;
+ public int a27251;
+ public int a27252;
+ public int a27253;
+ public int a27254;
+ public int a27255;
+ public int a27256;
+ public int a27257;
+ public int a27258;
+ public int a27259;
+ public int a27260;
+ public int a27261;
+ public int a27262;
+ public int a27263;
+ public int a27264;
+ public int a27265;
+ public int a27266;
+ public int a27267;
+ public int a27268;
+ public int a27269;
+ public int a27270;
+ public int a27271;
+ public int a27272;
+ public int a27273;
+ public int a27274;
+ public int a27275;
+ public int a27276;
+ public int a27277;
+ public int a27278;
+ public int a27279;
+ public int a27280;
+ public int a27281;
+ public int a27282;
+ public int a27283;
+ public int a27284;
+ public int a27285;
+ public int a27286;
+ public int a27287;
+ public int a27288;
+ public int a27289;
+ public int a27290;
+ public int a27291;
+ public int a27292;
+ public int a27293;
+ public int a27294;
+ public int a27295;
+ public int a27296;
+ public int a27297;
+ public int a27298;
+ public int a27299;
+ public int a27300;
+ public int a27301;
+ public int a27302;
+ public int a27303;
+ public int a27304;
+ public int a27305;
+ public int a27306;
+ public int a27307;
+ public int a27308;
+ public int a27309;
+ public int a27310;
+ public int a27311;
+ public int a27312;
+ public int a27313;
+ public int a27314;
+ public int a27315;
+ public int a27316;
+ public int a27317;
+ public int a27318;
+ public int a27319;
+ public int a27320;
+ public int a27321;
+ public int a27322;
+ public int a27323;
+ public int a27324;
+ public int a27325;
+ public int a27326;
+ public int a27327;
+ public int a27328;
+ public int a27329;
+ public int a27330;
+ public int a27331;
+ public int a27332;
+ public int a27333;
+ public int a27334;
+ public int a27335;
+ public int a27336;
+ public int a27337;
+ public int a27338;
+ public int a27339;
+ public int a27340;
+ public int a27341;
+ public int a27342;
+ public int a27343;
+ public int a27344;
+ public int a27345;
+ public int a27346;
+ public int a27347;
+ public int a27348;
+ public int a27349;
+ public int a27350;
+ public int a27351;
+ public int a27352;
+ public int a27353;
+ public int a27354;
+ public int a27355;
+ public int a27356;
+ public int a27357;
+ public int a27358;
+ public int a27359;
+ public int a27360;
+ public int a27361;
+ public int a27362;
+ public int a27363;
+ public int a27364;
+ public int a27365;
+ public int a27366;
+ public int a27367;
+ public int a27368;
+ public int a27369;
+ public int a27370;
+ public int a27371;
+ public int a27372;
+ public int a27373;
+ public int a27374;
+ public int a27375;
+ public int a27376;
+ public int a27377;
+ public int a27378;
+ public int a27379;
+ public int a27380;
+ public int a27381;
+ public int a27382;
+ public int a27383;
+ public int a27384;
+ public int a27385;
+ public int a27386;
+ public int a27387;
+ public int a27388;
+ public int a27389;
+ public int a27390;
+ public int a27391;
+ public int a27392;
+ public int a27393;
+ public int a27394;
+ public int a27395;
+ public int a27396;
+ public int a27397;
+ public int a27398;
+ public int a27399;
+ public int a27400;
+ public int a27401;
+ public int a27402;
+ public int a27403;
+ public int a27404;
+ public int a27405;
+ public int a27406;
+ public int a27407;
+ public int a27408;
+ public int a27409;
+ public int a27410;
+ public int a27411;
+ public int a27412;
+ public int a27413;
+ public int a27414;
+ public int a27415;
+ public int a27416;
+ public int a27417;
+ public int a27418;
+ public int a27419;
+ public int a27420;
+ public int a27421;
+ public int a27422;
+ public int a27423;
+ public int a27424;
+ public int a27425;
+ public int a27426;
+ public int a27427;
+ public int a27428;
+ public int a27429;
+ public int a27430;
+ public int a27431;
+ public int a27432;
+ public int a27433;
+ public int a27434;
+ public int a27435;
+ public int a27436;
+ public int a27437;
+ public int a27438;
+ public int a27439;
+ public int a27440;
+ public int a27441;
+ public int a27442;
+ public int a27443;
+ public int a27444;
+ public int a27445;
+ public int a27446;
+ public int a27447;
+ public int a27448;
+ public int a27449;
+ public int a27450;
+ public int a27451;
+ public int a27452;
+ public int a27453;
+ public int a27454;
+ public int a27455;
+ public int a27456;
+ public int a27457;
+ public int a27458;
+ public int a27459;
+ public int a27460;
+ public int a27461;
+ public int a27462;
+ public int a27463;
+ public int a27464;
+ public int a27465;
+ public int a27466;
+ public int a27467;
+ public int a27468;
+ public int a27469;
+ public int a27470;
+ public int a27471;
+ public int a27472;
+ public int a27473;
+ public int a27474;
+ public int a27475;
+ public int a27476;
+ public int a27477;
+ public int a27478;
+ public int a27479;
+ public int a27480;
+ public int a27481;
+ public int a27482;
+ public int a27483;
+ public int a27484;
+ public int a27485;
+ public int a27486;
+ public int a27487;
+ public int a27488;
+ public int a27489;
+ public int a27490;
+ public int a27491;
+ public int a27492;
+ public int a27493;
+ public int a27494;
+ public int a27495;
+ public int a27496;
+ public int a27497;
+ public int a27498;
+ public int a27499;
+ public int a27500;
+ public int a27501;
+ public int a27502;
+ public int a27503;
+ public int a27504;
+ public int a27505;
+ public int a27506;
+ public int a27507;
+ public int a27508;
+ public int a27509;
+ public int a27510;
+ public int a27511;
+ public int a27512;
+ public int a27513;
+ public int a27514;
+ public int a27515;
+ public int a27516;
+ public int a27517;
+ public int a27518;
+ public int a27519;
+ public int a27520;
+ public int a27521;
+ public int a27522;
+ public int a27523;
+ public int a27524;
+ public int a27525;
+ public int a27526;
+ public int a27527;
+ public int a27528;
+ public int a27529;
+ public int a27530;
+ public int a27531;
+ public int a27532;
+ public int a27533;
+ public int a27534;
+ public int a27535;
+ public int a27536;
+ public int a27537;
+ public int a27538;
+ public int a27539;
+ public int a27540;
+ public int a27541;
+ public int a27542;
+ public int a27543;
+ public int a27544;
+ public int a27545;
+ public int a27546;
+ public int a27547;
+ public int a27548;
+ public int a27549;
+ public int a27550;
+ public int a27551;
+ public int a27552;
+ public int a27553;
+ public int a27554;
+ public int a27555;
+ public int a27556;
+ public int a27557;
+ public int a27558;
+ public int a27559;
+ public int a27560;
+ public int a27561;
+ public int a27562;
+ public int a27563;
+ public int a27564;
+ public int a27565;
+ public int a27566;
+ public int a27567;
+ public int a27568;
+ public int a27569;
+ public int a27570;
+ public int a27571;
+ public int a27572;
+ public int a27573;
+ public int a27574;
+ public int a27575;
+ public int a27576;
+ public int a27577;
+ public int a27578;
+ public int a27579;
+ public int a27580;
+ public int a27581;
+ public int a27582;
+ public int a27583;
+ public int a27584;
+ public int a27585;
+ public int a27586;
+ public int a27587;
+ public int a27588;
+ public int a27589;
+ public int a27590;
+ public int a27591;
+ public int a27592;
+ public int a27593;
+ public int a27594;
+ public int a27595;
+ public int a27596;
+ public int a27597;
+ public int a27598;
+ public int a27599;
+ public int a27600;
+ public int a27601;
+ public int a27602;
+ public int a27603;
+ public int a27604;
+ public int a27605;
+ public int a27606;
+ public int a27607;
+ public int a27608;
+ public int a27609;
+ public int a27610;
+ public int a27611;
+ public int a27612;
+ public int a27613;
+ public int a27614;
+ public int a27615;
+ public int a27616;
+ public int a27617;
+ public int a27618;
+ public int a27619;
+ public int a27620;
+ public int a27621;
+ public int a27622;
+ public int a27623;
+ public int a27624;
+ public int a27625;
+ public int a27626;
+ public int a27627;
+ public int a27628;
+ public int a27629;
+ public int a27630;
+ public int a27631;
+ public int a27632;
+ public int a27633;
+ public int a27634;
+ public int a27635;
+ public int a27636;
+ public int a27637;
+ public int a27638;
+ public int a27639;
+ public int a27640;
+ public int a27641;
+ public int a27642;
+ public int a27643;
+ public int a27644;
+ public int a27645;
+ public int a27646;
+ public int a27647;
+ public int a27648;
+ public int a27649;
+ public int a27650;
+ public int a27651;
+ public int a27652;
+ public int a27653;
+ public int a27654;
+ public int a27655;
+ public int a27656;
+ public int a27657;
+ public int a27658;
+ public int a27659;
+ public int a27660;
+ public int a27661;
+ public int a27662;
+ public int a27663;
+ public int a27664;
+ public int a27665;
+ public int a27666;
+ public int a27667;
+ public int a27668;
+ public int a27669;
+ public int a27670;
+ public int a27671;
+ public int a27672;
+ public int a27673;
+ public int a27674;
+ public int a27675;
+ public int a27676;
+ public int a27677;
+ public int a27678;
+ public int a27679;
+ public int a27680;
+ public int a27681;
+ public int a27682;
+ public int a27683;
+ public int a27684;
+ public int a27685;
+ public int a27686;
+ public int a27687;
+ public int a27688;
+ public int a27689;
+ public int a27690;
+ public int a27691;
+ public int a27692;
+ public int a27693;
+ public int a27694;
+ public int a27695;
+ public int a27696;
+ public int a27697;
+ public int a27698;
+ public int a27699;
+ public int a27700;
+ public int a27701;
+ public int a27702;
+ public int a27703;
+ public int a27704;
+ public int a27705;
+ public int a27706;
+ public int a27707;
+ public int a27708;
+ public int a27709;
+ public int a27710;
+ public int a27711;
+ public int a27712;
+ public int a27713;
+ public int a27714;
+ public int a27715;
+ public int a27716;
+ public int a27717;
+ public int a27718;
+ public int a27719;
+ public int a27720;
+ public int a27721;
+ public int a27722;
+ public int a27723;
+ public int a27724;
+ public int a27725;
+ public int a27726;
+ public int a27727;
+ public int a27728;
+ public int a27729;
+ public int a27730;
+ public int a27731;
+ public int a27732;
+ public int a27733;
+ public int a27734;
+ public int a27735;
+ public int a27736;
+ public int a27737;
+ public int a27738;
+ public int a27739;
+ public int a27740;
+ public int a27741;
+ public int a27742;
+ public int a27743;
+ public int a27744;
+ public int a27745;
+ public int a27746;
+ public int a27747;
+ public int a27748;
+ public int a27749;
+ public int a27750;
+ public int a27751;
+ public int a27752;
+ public int a27753;
+ public int a27754;
+ public int a27755;
+ public int a27756;
+ public int a27757;
+ public int a27758;
+ public int a27759;
+ public int a27760;
+ public int a27761;
+ public int a27762;
+ public int a27763;
+ public int a27764;
+ public int a27765;
+ public int a27766;
+ public int a27767;
+ public int a27768;
+ public int a27769;
+ public int a27770;
+ public int a27771;
+ public int a27772;
+ public int a27773;
+ public int a27774;
+ public int a27775;
+ public int a27776;
+ public int a27777;
+ public int a27778;
+ public int a27779;
+ public int a27780;
+ public int a27781;
+ public int a27782;
+ public int a27783;
+ public int a27784;
+ public int a27785;
+ public int a27786;
+ public int a27787;
+ public int a27788;
+ public int a27789;
+ public int a27790;
+ public int a27791;
+ public int a27792;
+ public int a27793;
+ public int a27794;
+ public int a27795;
+ public int a27796;
+ public int a27797;
+ public int a27798;
+ public int a27799;
+ public int a27800;
+ public int a27801;
+ public int a27802;
+ public int a27803;
+ public int a27804;
+ public int a27805;
+ public int a27806;
+ public int a27807;
+ public int a27808;
+ public int a27809;
+ public int a27810;
+ public int a27811;
+ public int a27812;
+ public int a27813;
+ public int a27814;
+ public int a27815;
+ public int a27816;
+ public int a27817;
+ public int a27818;
+ public int a27819;
+ public int a27820;
+ public int a27821;
+ public int a27822;
+ public int a27823;
+ public int a27824;
+ public int a27825;
+ public int a27826;
+ public int a27827;
+ public int a27828;
+ public int a27829;
+ public int a27830;
+ public int a27831;
+ public int a27832;
+ public int a27833;
+ public int a27834;
+ public int a27835;
+ public int a27836;
+ public int a27837;
+ public int a27838;
+ public int a27839;
+ public int a27840;
+ public int a27841;
+ public int a27842;
+ public int a27843;
+ public int a27844;
+ public int a27845;
+ public int a27846;
+ public int a27847;
+ public int a27848;
+ public int a27849;
+ public int a27850;
+ public int a27851;
+ public int a27852;
+ public int a27853;
+ public int a27854;
+ public int a27855;
+ public int a27856;
+ public int a27857;
+ public int a27858;
+ public int a27859;
+ public int a27860;
+ public int a27861;
+ public int a27862;
+ public int a27863;
+ public int a27864;
+ public int a27865;
+ public int a27866;
+ public int a27867;
+ public int a27868;
+ public int a27869;
+ public int a27870;
+ public int a27871;
+ public int a27872;
+ public int a27873;
+ public int a27874;
+ public int a27875;
+ public int a27876;
+ public int a27877;
+ public int a27878;
+ public int a27879;
+ public int a27880;
+ public int a27881;
+ public int a27882;
+ public int a27883;
+ public int a27884;
+ public int a27885;
+ public int a27886;
+ public int a27887;
+ public int a27888;
+ public int a27889;
+ public int a27890;
+ public int a27891;
+ public int a27892;
+ public int a27893;
+ public int a27894;
+ public int a27895;
+ public int a27896;
+ public int a27897;
+ public int a27898;
+ public int a27899;
+ public int a27900;
+ public int a27901;
+ public int a27902;
+ public int a27903;
+ public int a27904;
+ public int a27905;
+ public int a27906;
+ public int a27907;
+ public int a27908;
+ public int a27909;
+ public int a27910;
+ public int a27911;
+ public int a27912;
+ public int a27913;
+ public int a27914;
+ public int a27915;
+ public int a27916;
+ public int a27917;
+ public int a27918;
+ public int a27919;
+ public int a27920;
+ public int a27921;
+ public int a27922;
+ public int a27923;
+ public int a27924;
+ public int a27925;
+ public int a27926;
+ public int a27927;
+ public int a27928;
+ public int a27929;
+ public int a27930;
+ public int a27931;
+ public int a27932;
+ public int a27933;
+ public int a27934;
+ public int a27935;
+ public int a27936;
+ public int a27937;
+ public int a27938;
+ public int a27939;
+ public int a27940;
+ public int a27941;
+ public int a27942;
+ public int a27943;
+ public int a27944;
+ public int a27945;
+ public int a27946;
+ public int a27947;
+ public int a27948;
+ public int a27949;
+ public int a27950;
+ public int a27951;
+ public int a27952;
+ public int a27953;
+ public int a27954;
+ public int a27955;
+ public int a27956;
+ public int a27957;
+ public int a27958;
+ public int a27959;
+ public int a27960;
+ public int a27961;
+ public int a27962;
+ public int a27963;
+ public int a27964;
+ public int a27965;
+ public int a27966;
+ public int a27967;
+ public int a27968;
+ public int a27969;
+ public int a27970;
+ public int a27971;
+ public int a27972;
+ public int a27973;
+ public int a27974;
+ public int a27975;
+ public int a27976;
+ public int a27977;
+ public int a27978;
+ public int a27979;
+ public int a27980;
+ public int a27981;
+ public int a27982;
+ public int a27983;
+ public int a27984;
+ public int a27985;
+ public int a27986;
+ public int a27987;
+ public int a27988;
+ public int a27989;
+ public int a27990;
+ public int a27991;
+ public int a27992;
+ public int a27993;
+ public int a27994;
+ public int a27995;
+ public int a27996;
+ public int a27997;
+ public int a27998;
+ public int a27999;
+ public int a28000;
+ public int a28001;
+ public int a28002;
+ public int a28003;
+ public int a28004;
+ public int a28005;
+ public int a28006;
+ public int a28007;
+ public int a28008;
+ public int a28009;
+ public int a28010;
+ public int a28011;
+ public int a28012;
+ public int a28013;
+ public int a28014;
+ public int a28015;
+ public int a28016;
+ public int a28017;
+ public int a28018;
+ public int a28019;
+ public int a28020;
+ public int a28021;
+ public int a28022;
+ public int a28023;
+ public int a28024;
+ public int a28025;
+ public int a28026;
+ public int a28027;
+ public int a28028;
+ public int a28029;
+ public int a28030;
+ public int a28031;
+ public int a28032;
+ public int a28033;
+ public int a28034;
+ public int a28035;
+ public int a28036;
+ public int a28037;
+ public int a28038;
+ public int a28039;
+ public int a28040;
+ public int a28041;
+ public int a28042;
+ public int a28043;
+ public int a28044;
+ public int a28045;
+ public int a28046;
+ public int a28047;
+ public int a28048;
+ public int a28049;
+ public int a28050;
+ public int a28051;
+ public int a28052;
+ public int a28053;
+ public int a28054;
+ public int a28055;
+ public int a28056;
+ public int a28057;
+ public int a28058;
+ public int a28059;
+ public int a28060;
+ public int a28061;
+ public int a28062;
+ public int a28063;
+ public int a28064;
+ public int a28065;
+ public int a28066;
+ public int a28067;
+ public int a28068;
+ public int a28069;
+ public int a28070;
+ public int a28071;
+ public int a28072;
+ public int a28073;
+ public int a28074;
+ public int a28075;
+ public int a28076;
+ public int a28077;
+ public int a28078;
+ public int a28079;
+ public int a28080;
+ public int a28081;
+ public int a28082;
+ public int a28083;
+ public int a28084;
+ public int a28085;
+ public int a28086;
+ public int a28087;
+ public int a28088;
+ public int a28089;
+ public int a28090;
+ public int a28091;
+ public int a28092;
+ public int a28093;
+ public int a28094;
+ public int a28095;
+ public int a28096;
+ public int a28097;
+ public int a28098;
+ public int a28099;
+ public int a28100;
+ public int a28101;
+ public int a28102;
+ public int a28103;
+ public int a28104;
+ public int a28105;
+ public int a28106;
+ public int a28107;
+ public int a28108;
+ public int a28109;
+ public int a28110;
+ public int a28111;
+ public int a28112;
+ public int a28113;
+ public int a28114;
+ public int a28115;
+ public int a28116;
+ public int a28117;
+ public int a28118;
+ public int a28119;
+ public int a28120;
+ public int a28121;
+ public int a28122;
+ public int a28123;
+ public int a28124;
+ public int a28125;
+ public int a28126;
+ public int a28127;
+ public int a28128;
+ public int a28129;
+ public int a28130;
+ public int a28131;
+ public int a28132;
+ public int a28133;
+ public int a28134;
+ public int a28135;
+ public int a28136;
+ public int a28137;
+ public int a28138;
+ public int a28139;
+ public int a28140;
+ public int a28141;
+ public int a28142;
+ public int a28143;
+ public int a28144;
+ public int a28145;
+ public int a28146;
+ public int a28147;
+ public int a28148;
+ public int a28149;
+ public int a28150;
+ public int a28151;
+ public int a28152;
+ public int a28153;
+ public int a28154;
+ public int a28155;
+ public int a28156;
+ public int a28157;
+ public int a28158;
+ public int a28159;
+ public int a28160;
+ public int a28161;
+ public int a28162;
+ public int a28163;
+ public int a28164;
+ public int a28165;
+ public int a28166;
+ public int a28167;
+ public int a28168;
+ public int a28169;
+ public int a28170;
+ public int a28171;
+ public int a28172;
+ public int a28173;
+ public int a28174;
+ public int a28175;
+ public int a28176;
+ public int a28177;
+ public int a28178;
+ public int a28179;
+ public int a28180;
+ public int a28181;
+ public int a28182;
+ public int a28183;
+ public int a28184;
+ public int a28185;
+ public int a28186;
+ public int a28187;
+ public int a28188;
+ public int a28189;
+ public int a28190;
+ public int a28191;
+ public int a28192;
+ public int a28193;
+ public int a28194;
+ public int a28195;
+ public int a28196;
+ public int a28197;
+ public int a28198;
+ public int a28199;
+ public int a28200;
+ public int a28201;
+ public int a28202;
+ public int a28203;
+ public int a28204;
+ public int a28205;
+ public int a28206;
+ public int a28207;
+ public int a28208;
+ public int a28209;
+ public int a28210;
+ public int a28211;
+ public int a28212;
+ public int a28213;
+ public int a28214;
+ public int a28215;
+ public int a28216;
+ public int a28217;
+ public int a28218;
+ public int a28219;
+ public int a28220;
+ public int a28221;
+ public int a28222;
+ public int a28223;
+ public int a28224;
+ public int a28225;
+ public int a28226;
+ public int a28227;
+ public int a28228;
+ public int a28229;
+ public int a28230;
+ public int a28231;
+ public int a28232;
+ public int a28233;
+ public int a28234;
+ public int a28235;
+ public int a28236;
+ public int a28237;
+ public int a28238;
+ public int a28239;
+ public int a28240;
+ public int a28241;
+ public int a28242;
+ public int a28243;
+ public int a28244;
+ public int a28245;
+ public int a28246;
+ public int a28247;
+ public int a28248;
+ public int a28249;
+ public int a28250;
+ public int a28251;
+ public int a28252;
+ public int a28253;
+ public int a28254;
+ public int a28255;
+ public int a28256;
+ public int a28257;
+ public int a28258;
+ public int a28259;
+ public int a28260;
+ public int a28261;
+ public int a28262;
+ public int a28263;
+ public int a28264;
+ public int a28265;
+ public int a28266;
+ public int a28267;
+ public int a28268;
+ public int a28269;
+ public int a28270;
+ public int a28271;
+ public int a28272;
+ public int a28273;
+ public int a28274;
+ public int a28275;
+ public int a28276;
+ public int a28277;
+ public int a28278;
+ public int a28279;
+ public int a28280;
+ public int a28281;
+ public int a28282;
+ public int a28283;
+ public int a28284;
+ public int a28285;
+ public int a28286;
+ public int a28287;
+ public int a28288;
+ public int a28289;
+ public int a28290;
+ public int a28291;
+ public int a28292;
+ public int a28293;
+ public int a28294;
+ public int a28295;
+ public int a28296;
+ public int a28297;
+ public int a28298;
+ public int a28299;
+ public int a28300;
+ public int a28301;
+ public int a28302;
+ public int a28303;
+ public int a28304;
+ public int a28305;
+ public int a28306;
+ public int a28307;
+ public int a28308;
+ public int a28309;
+ public int a28310;
+ public int a28311;
+ public int a28312;
+ public int a28313;
+ public int a28314;
+ public int a28315;
+ public int a28316;
+ public int a28317;
+ public int a28318;
+ public int a28319;
+ public int a28320;
+ public int a28321;
+ public int a28322;
+ public int a28323;
+ public int a28324;
+ public int a28325;
+ public int a28326;
+ public int a28327;
+ public int a28328;
+ public int a28329;
+ public int a28330;
+ public int a28331;
+ public int a28332;
+ public int a28333;
+ public int a28334;
+ public int a28335;
+ public int a28336;
+ public int a28337;
+ public int a28338;
+ public int a28339;
+ public int a28340;
+ public int a28341;
+ public int a28342;
+ public int a28343;
+ public int a28344;
+ public int a28345;
+ public int a28346;
+ public int a28347;
+ public int a28348;
+ public int a28349;
+ public int a28350;
+ public int a28351;
+ public int a28352;
+ public int a28353;
+ public int a28354;
+ public int a28355;
+ public int a28356;
+ public int a28357;
+ public int a28358;
+ public int a28359;
+ public int a28360;
+ public int a28361;
+ public int a28362;
+ public int a28363;
+ public int a28364;
+ public int a28365;
+ public int a28366;
+ public int a28367;
+ public int a28368;
+ public int a28369;
+ public int a28370;
+ public int a28371;
+ public int a28372;
+ public int a28373;
+ public int a28374;
+ public int a28375;
+ public int a28376;
+ public int a28377;
+ public int a28378;
+ public int a28379;
+ public int a28380;
+ public int a28381;
+ public int a28382;
+ public int a28383;
+ public int a28384;
+ public int a28385;
+ public int a28386;
+ public int a28387;
+ public int a28388;
+ public int a28389;
+ public int a28390;
+ public int a28391;
+ public int a28392;
+ public int a28393;
+ public int a28394;
+ public int a28395;
+ public int a28396;
+ public int a28397;
+ public int a28398;
+ public int a28399;
+ public int a28400;
+ public int a28401;
+ public int a28402;
+ public int a28403;
+ public int a28404;
+ public int a28405;
+ public int a28406;
+ public int a28407;
+ public int a28408;
+ public int a28409;
+ public int a28410;
+ public int a28411;
+ public int a28412;
+ public int a28413;
+ public int a28414;
+ public int a28415;
+ public int a28416;
+ public int a28417;
+ public int a28418;
+ public int a28419;
+ public int a28420;
+ public int a28421;
+ public int a28422;
+ public int a28423;
+ public int a28424;
+ public int a28425;
+ public int a28426;
+ public int a28427;
+ public int a28428;
+ public int a28429;
+ public int a28430;
+ public int a28431;
+ public int a28432;
+ public int a28433;
+ public int a28434;
+ public int a28435;
+ public int a28436;
+ public int a28437;
+ public int a28438;
+ public int a28439;
+ public int a28440;
+ public int a28441;
+ public int a28442;
+ public int a28443;
+ public int a28444;
+ public int a28445;
+ public int a28446;
+ public int a28447;
+ public int a28448;
+ public int a28449;
+ public int a28450;
+ public int a28451;
+ public int a28452;
+ public int a28453;
+ public int a28454;
+ public int a28455;
+ public int a28456;
+ public int a28457;
+ public int a28458;
+ public int a28459;
+ public int a28460;
+ public int a28461;
+ public int a28462;
+ public int a28463;
+ public int a28464;
+ public int a28465;
+ public int a28466;
+ public int a28467;
+ public int a28468;
+ public int a28469;
+ public int a28470;
+ public int a28471;
+ public int a28472;
+ public int a28473;
+ public int a28474;
+ public int a28475;
+ public int a28476;
+ public int a28477;
+ public int a28478;
+ public int a28479;
+ public int a28480;
+ public int a28481;
+ public int a28482;
+ public int a28483;
+ public int a28484;
+ public int a28485;
+ public int a28486;
+ public int a28487;
+ public int a28488;
+ public int a28489;
+ public int a28490;
+ public int a28491;
+ public int a28492;
+ public int a28493;
+ public int a28494;
+ public int a28495;
+ public int a28496;
+ public int a28497;
+ public int a28498;
+ public int a28499;
+ public int a28500;
+ public int a28501;
+ public int a28502;
+ public int a28503;
+ public int a28504;
+ public int a28505;
+ public int a28506;
+ public int a28507;
+ public int a28508;
+ public int a28509;
+ public int a28510;
+ public int a28511;
+ public int a28512;
+ public int a28513;
+ public int a28514;
+ public int a28515;
+ public int a28516;
+ public int a28517;
+ public int a28518;
+ public int a28519;
+ public int a28520;
+ public int a28521;
+ public int a28522;
+ public int a28523;
+ public int a28524;
+ public int a28525;
+ public int a28526;
+ public int a28527;
+ public int a28528;
+ public int a28529;
+ public int a28530;
+ public int a28531;
+ public int a28532;
+ public int a28533;
+ public int a28534;
+ public int a28535;
+ public int a28536;
+ public int a28537;
+ public int a28538;
+ public int a28539;
+ public int a28540;
+ public int a28541;
+ public int a28542;
+ public int a28543;
+ public int a28544;
+ public int a28545;
+ public int a28546;
+ public int a28547;
+ public int a28548;
+ public int a28549;
+ public int a28550;
+ public int a28551;
+ public int a28552;
+ public int a28553;
+ public int a28554;
+ public int a28555;
+ public int a28556;
+ public int a28557;
+ public int a28558;
+ public int a28559;
+ public int a28560;
+ public int a28561;
+ public int a28562;
+ public int a28563;
+ public int a28564;
+ public int a28565;
+ public int a28566;
+ public int a28567;
+ public int a28568;
+ public int a28569;
+ public int a28570;
+ public int a28571;
+ public int a28572;
+ public int a28573;
+ public int a28574;
+ public int a28575;
+ public int a28576;
+ public int a28577;
+ public int a28578;
+ public int a28579;
+ public int a28580;
+ public int a28581;
+ public int a28582;
+ public int a28583;
+ public int a28584;
+ public int a28585;
+ public int a28586;
+ public int a28587;
+ public int a28588;
+ public int a28589;
+ public int a28590;
+ public int a28591;
+ public int a28592;
+ public int a28593;
+ public int a28594;
+ public int a28595;
+ public int a28596;
+ public int a28597;
+ public int a28598;
+ public int a28599;
+ public int a28600;
+ public int a28601;
+ public int a28602;
+ public int a28603;
+ public int a28604;
+ public int a28605;
+ public int a28606;
+ public int a28607;
+ public int a28608;
+ public int a28609;
+ public int a28610;
+ public int a28611;
+ public int a28612;
+ public int a28613;
+ public int a28614;
+ public int a28615;
+ public int a28616;
+ public int a28617;
+ public int a28618;
+ public int a28619;
+ public int a28620;
+ public int a28621;
+ public int a28622;
+ public int a28623;
+ public int a28624;
+ public int a28625;
+ public int a28626;
+ public int a28627;
+ public int a28628;
+ public int a28629;
+ public int a28630;
+ public int a28631;
+ public int a28632;
+ public int a28633;
+ public int a28634;
+ public int a28635;
+ public int a28636;
+ public int a28637;
+ public int a28638;
+ public int a28639;
+ public int a28640;
+ public int a28641;
+ public int a28642;
+ public int a28643;
+ public int a28644;
+ public int a28645;
+ public int a28646;
+ public int a28647;
+ public int a28648;
+ public int a28649;
+ public int a28650;
+ public int a28651;
+ public int a28652;
+ public int a28653;
+ public int a28654;
+ public int a28655;
+ public int a28656;
+ public int a28657;
+ public int a28658;
+ public int a28659;
+ public int a28660;
+ public int a28661;
+ public int a28662;
+ public int a28663;
+ public int a28664;
+ public int a28665;
+ public int a28666;
+ public int a28667;
+ public int a28668;
+ public int a28669;
+ public int a28670;
+ public int a28671;
+ public int a28672;
+ public int a28673;
+ public int a28674;
+ public int a28675;
+ public int a28676;
+ public int a28677;
+ public int a28678;
+ public int a28679;
+ public int a28680;
+ public int a28681;
+ public int a28682;
+ public int a28683;
+ public int a28684;
+ public int a28685;
+ public int a28686;
+ public int a28687;
+ public int a28688;
+ public int a28689;
+ public int a28690;
+ public int a28691;
+ public int a28692;
+ public int a28693;
+ public int a28694;
+ public int a28695;
+ public int a28696;
+ public int a28697;
+ public int a28698;
+ public int a28699;
+ public int a28700;
+ public int a28701;
+ public int a28702;
+ public int a28703;
+ public int a28704;
+ public int a28705;
+ public int a28706;
+ public int a28707;
+ public int a28708;
+ public int a28709;
+ public int a28710;
+ public int a28711;
+ public int a28712;
+ public int a28713;
+ public int a28714;
+ public int a28715;
+ public int a28716;
+ public int a28717;
+ public int a28718;
+ public int a28719;
+ public int a28720;
+ public int a28721;
+ public int a28722;
+ public int a28723;
+ public int a28724;
+ public int a28725;
+ public int a28726;
+ public int a28727;
+ public int a28728;
+ public int a28729;
+ public int a28730;
+ public int a28731;
+ public int a28732;
+ public int a28733;
+ public int a28734;
+ public int a28735;
+ public int a28736;
+ public int a28737;
+ public int a28738;
+ public int a28739;
+ public int a28740;
+ public int a28741;
+ public int a28742;
+ public int a28743;
+ public int a28744;
+ public int a28745;
+ public int a28746;
+ public int a28747;
+ public int a28748;
+ public int a28749;
+ public int a28750;
+ public int a28751;
+ public int a28752;
+ public int a28753;
+ public int a28754;
+ public int a28755;
+ public int a28756;
+ public int a28757;
+ public int a28758;
+ public int a28759;
+ public int a28760;
+ public int a28761;
+ public int a28762;
+ public int a28763;
+ public int a28764;
+ public int a28765;
+ public int a28766;
+ public int a28767;
+ public int a28768;
+ public int a28769;
+ public int a28770;
+ public int a28771;
+ public int a28772;
+ public int a28773;
+ public int a28774;
+ public int a28775;
+ public int a28776;
+ public int a28777;
+ public int a28778;
+ public int a28779;
+ public int a28780;
+ public int a28781;
+ public int a28782;
+ public int a28783;
+ public int a28784;
+ public int a28785;
+ public int a28786;
+ public int a28787;
+ public int a28788;
+ public int a28789;
+ public int a28790;
+ public int a28791;
+ public int a28792;
+ public int a28793;
+ public int a28794;
+ public int a28795;
+ public int a28796;
+ public int a28797;
+ public int a28798;
+ public int a28799;
+ public int a28800;
+ public int a28801;
+ public int a28802;
+ public int a28803;
+ public int a28804;
+ public int a28805;
+ public int a28806;
+ public int a28807;
+ public int a28808;
+ public int a28809;
+ public int a28810;
+ public int a28811;
+ public int a28812;
+ public int a28813;
+ public int a28814;
+ public int a28815;
+ public int a28816;
+ public int a28817;
+ public int a28818;
+ public int a28819;
+ public int a28820;
+ public int a28821;
+ public int a28822;
+ public int a28823;
+ public int a28824;
+ public int a28825;
+ public int a28826;
+ public int a28827;
+ public int a28828;
+ public int a28829;
+ public int a28830;
+ public int a28831;
+ public int a28832;
+ public int a28833;
+ public int a28834;
+ public int a28835;
+ public int a28836;
+ public int a28837;
+ public int a28838;
+ public int a28839;
+ public int a28840;
+ public int a28841;
+ public int a28842;
+ public int a28843;
+ public int a28844;
+ public int a28845;
+ public int a28846;
+ public int a28847;
+ public int a28848;
+ public int a28849;
+ public int a28850;
+ public int a28851;
+ public int a28852;
+ public int a28853;
+ public int a28854;
+ public int a28855;
+ public int a28856;
+ public int a28857;
+ public int a28858;
+ public int a28859;
+ public int a28860;
+ public int a28861;
+ public int a28862;
+ public int a28863;
+ public int a28864;
+ public int a28865;
+ public int a28866;
+ public int a28867;
+ public int a28868;
+ public int a28869;
+ public int a28870;
+ public int a28871;
+ public int a28872;
+ public int a28873;
+ public int a28874;
+ public int a28875;
+ public int a28876;
+ public int a28877;
+ public int a28878;
+ public int a28879;
+ public int a28880;
+ public int a28881;
+ public int a28882;
+ public int a28883;
+ public int a28884;
+ public int a28885;
+ public int a28886;
+ public int a28887;
+ public int a28888;
+ public int a28889;
+ public int a28890;
+ public int a28891;
+ public int a28892;
+ public int a28893;
+ public int a28894;
+ public int a28895;
+ public int a28896;
+ public int a28897;
+ public int a28898;
+ public int a28899;
+ public int a28900;
+ public int a28901;
+ public int a28902;
+ public int a28903;
+ public int a28904;
+ public int a28905;
+ public int a28906;
+ public int a28907;
+ public int a28908;
+ public int a28909;
+ public int a28910;
+ public int a28911;
+ public int a28912;
+ public int a28913;
+ public int a28914;
+ public int a28915;
+ public int a28916;
+ public int a28917;
+ public int a28918;
+ public int a28919;
+ public int a28920;
+ public int a28921;
+ public int a28922;
+ public int a28923;
+ public int a28924;
+ public int a28925;
+ public int a28926;
+ public int a28927;
+ public int a28928;
+ public int a28929;
+ public int a28930;
+ public int a28931;
+ public int a28932;
+ public int a28933;
+ public int a28934;
+ public int a28935;
+ public int a28936;
+ public int a28937;
+ public int a28938;
+ public int a28939;
+ public int a28940;
+ public int a28941;
+ public int a28942;
+ public int a28943;
+ public int a28944;
+ public int a28945;
+ public int a28946;
+ public int a28947;
+ public int a28948;
+ public int a28949;
+ public int a28950;
+ public int a28951;
+ public int a28952;
+ public int a28953;
+ public int a28954;
+ public int a28955;
+ public int a28956;
+ public int a28957;
+ public int a28958;
+ public int a28959;
+ public int a28960;
+ public int a28961;
+ public int a28962;
+ public int a28963;
+ public int a28964;
+ public int a28965;
+ public int a28966;
+ public int a28967;
+ public int a28968;
+ public int a28969;
+ public int a28970;
+ public int a28971;
+ public int a28972;
+ public int a28973;
+ public int a28974;
+ public int a28975;
+ public int a28976;
+ public int a28977;
+ public int a28978;
+ public int a28979;
+ public int a28980;
+ public int a28981;
+ public int a28982;
+ public int a28983;
+ public int a28984;
+ public int a28985;
+ public int a28986;
+ public int a28987;
+ public int a28988;
+ public int a28989;
+ public int a28990;
+ public int a28991;
+ public int a28992;
+ public int a28993;
+ public int a28994;
+ public int a28995;
+ public int a28996;
+ public int a28997;
+ public int a28998;
+ public int a28999;
+ public int a29000;
+ public int a29001;
+ public int a29002;
+ public int a29003;
+ public int a29004;
+ public int a29005;
+ public int a29006;
+ public int a29007;
+ public int a29008;
+ public int a29009;
+ public int a29010;
+ public int a29011;
+ public int a29012;
+ public int a29013;
+ public int a29014;
+ public int a29015;
+ public int a29016;
+ public int a29017;
+ public int a29018;
+ public int a29019;
+ public int a29020;
+ public int a29021;
+ public int a29022;
+ public int a29023;
+ public int a29024;
+ public int a29025;
+ public int a29026;
+ public int a29027;
+ public int a29028;
+ public int a29029;
+ public int a29030;
+ public int a29031;
+ public int a29032;
+ public int a29033;
+ public int a29034;
+ public int a29035;
+ public int a29036;
+ public int a29037;
+ public int a29038;
+ public int a29039;
+ public int a29040;
+ public int a29041;
+ public int a29042;
+ public int a29043;
+ public int a29044;
+ public int a29045;
+ public int a29046;
+ public int a29047;
+ public int a29048;
+ public int a29049;
+ public int a29050;
+ public int a29051;
+ public int a29052;
+ public int a29053;
+ public int a29054;
+ public int a29055;
+ public int a29056;
+ public int a29057;
+ public int a29058;
+ public int a29059;
+ public int a29060;
+ public int a29061;
+ public int a29062;
+ public int a29063;
+ public int a29064;
+ public int a29065;
+ public int a29066;
+ public int a29067;
+ public int a29068;
+ public int a29069;
+ public int a29070;
+ public int a29071;
+ public int a29072;
+ public int a29073;
+ public int a29074;
+ public int a29075;
+ public int a29076;
+ public int a29077;
+ public int a29078;
+ public int a29079;
+ public int a29080;
+ public int a29081;
+ public int a29082;
+ public int a29083;
+ public int a29084;
+ public int a29085;
+ public int a29086;
+ public int a29087;
+ public int a29088;
+ public int a29089;
+ public int a29090;
+ public int a29091;
+ public int a29092;
+ public int a29093;
+ public int a29094;
+ public int a29095;
+ public int a29096;
+ public int a29097;
+ public int a29098;
+ public int a29099;
+ public int a29100;
+ public int a29101;
+ public int a29102;
+ public int a29103;
+ public int a29104;
+ public int a29105;
+ public int a29106;
+ public int a29107;
+ public int a29108;
+ public int a29109;
+ public int a29110;
+ public int a29111;
+ public int a29112;
+ public int a29113;
+ public int a29114;
+ public int a29115;
+ public int a29116;
+ public int a29117;
+ public int a29118;
+ public int a29119;
+ public int a29120;
+ public int a29121;
+ public int a29122;
+ public int a29123;
+ public int a29124;
+ public int a29125;
+ public int a29126;
+ public int a29127;
+ public int a29128;
+ public int a29129;
+ public int a29130;
+ public int a29131;
+ public int a29132;
+ public int a29133;
+ public int a29134;
+ public int a29135;
+ public int a29136;
+ public int a29137;
+ public int a29138;
+ public int a29139;
+ public int a29140;
+ public int a29141;
+ public int a29142;
+ public int a29143;
+ public int a29144;
+ public int a29145;
+ public int a29146;
+ public int a29147;
+ public int a29148;
+ public int a29149;
+ public int a29150;
+ public int a29151;
+ public int a29152;
+ public int a29153;
+ public int a29154;
+ public int a29155;
+ public int a29156;
+ public int a29157;
+ public int a29158;
+ public int a29159;
+ public int a29160;
+ public int a29161;
+ public int a29162;
+ public int a29163;
+ public int a29164;
+ public int a29165;
+ public int a29166;
+ public int a29167;
+ public int a29168;
+ public int a29169;
+ public int a29170;
+ public int a29171;
+ public int a29172;
+ public int a29173;
+ public int a29174;
+ public int a29175;
+ public int a29176;
+ public int a29177;
+ public int a29178;
+ public int a29179;
+ public int a29180;
+ public int a29181;
+ public int a29182;
+ public int a29183;
+ public int a29184;
+ public int a29185;
+ public int a29186;
+ public int a29187;
+ public int a29188;
+ public int a29189;
+ public int a29190;
+ public int a29191;
+ public int a29192;
+ public int a29193;
+ public int a29194;
+ public int a29195;
+ public int a29196;
+ public int a29197;
+ public int a29198;
+ public int a29199;
+ public int a29200;
+ public int a29201;
+ public int a29202;
+ public int a29203;
+ public int a29204;
+ public int a29205;
+ public int a29206;
+ public int a29207;
+ public int a29208;
+ public int a29209;
+ public int a29210;
+ public int a29211;
+ public int a29212;
+ public int a29213;
+ public int a29214;
+ public int a29215;
+ public int a29216;
+ public int a29217;
+ public int a29218;
+ public int a29219;
+ public int a29220;
+ public int a29221;
+ public int a29222;
+ public int a29223;
+ public int a29224;
+ public int a29225;
+ public int a29226;
+ public int a29227;
+ public int a29228;
+ public int a29229;
+ public int a29230;
+ public int a29231;
+ public int a29232;
+ public int a29233;
+ public int a29234;
+ public int a29235;
+ public int a29236;
+ public int a29237;
+ public int a29238;
+ public int a29239;
+ public int a29240;
+ public int a29241;
+ public int a29242;
+ public int a29243;
+ public int a29244;
+ public int a29245;
+ public int a29246;
+ public int a29247;
+ public int a29248;
+ public int a29249;
+ public int a29250;
+ public int a29251;
+ public int a29252;
+ public int a29253;
+ public int a29254;
+ public int a29255;
+ public int a29256;
+ public int a29257;
+ public int a29258;
+ public int a29259;
+ public int a29260;
+ public int a29261;
+ public int a29262;
+ public int a29263;
+ public int a29264;
+ public int a29265;
+ public int a29266;
+ public int a29267;
+ public int a29268;
+ public int a29269;
+ public int a29270;
+ public int a29271;
+ public int a29272;
+ public int a29273;
+ public int a29274;
+ public int a29275;
+ public int a29276;
+ public int a29277;
+ public int a29278;
+ public int a29279;
+ public int a29280;
+ public int a29281;
+ public int a29282;
+ public int a29283;
+ public int a29284;
+ public int a29285;
+ public int a29286;
+ public int a29287;
+ public int a29288;
+ public int a29289;
+ public int a29290;
+ public int a29291;
+ public int a29292;
+ public int a29293;
+ public int a29294;
+ public int a29295;
+ public int a29296;
+ public int a29297;
+ public int a29298;
+ public int a29299;
+ public int a29300;
+ public int a29301;
+ public int a29302;
+ public int a29303;
+ public int a29304;
+ public int a29305;
+ public int a29306;
+ public int a29307;
+ public int a29308;
+ public int a29309;
+ public int a29310;
+ public int a29311;
+ public int a29312;
+ public int a29313;
+ public int a29314;
+ public int a29315;
+ public int a29316;
+ public int a29317;
+ public int a29318;
+ public int a29319;
+ public int a29320;
+ public int a29321;
+ public int a29322;
+ public int a29323;
+ public int a29324;
+ public int a29325;
+ public int a29326;
+ public int a29327;
+ public int a29328;
+ public int a29329;
+ public int a29330;
+ public int a29331;
+ public int a29332;
+ public int a29333;
+ public int a29334;
+ public int a29335;
+ public int a29336;
+ public int a29337;
+ public int a29338;
+ public int a29339;
+ public int a29340;
+ public int a29341;
+ public int a29342;
+ public int a29343;
+ public int a29344;
+ public int a29345;
+ public int a29346;
+ public int a29347;
+ public int a29348;
+ public int a29349;
+ public int a29350;
+ public int a29351;
+ public int a29352;
+ public int a29353;
+ public int a29354;
+ public int a29355;
+ public int a29356;
+ public int a29357;
+ public int a29358;
+ public int a29359;
+ public int a29360;
+ public int a29361;
+ public int a29362;
+ public int a29363;
+ public int a29364;
+ public int a29365;
+ public int a29366;
+ public int a29367;
+ public int a29368;
+ public int a29369;
+ public int a29370;
+ public int a29371;
+ public int a29372;
+ public int a29373;
+ public int a29374;
+ public int a29375;
+ public int a29376;
+ public int a29377;
+ public int a29378;
+ public int a29379;
+ public int a29380;
+ public int a29381;
+ public int a29382;
+ public int a29383;
+ public int a29384;
+ public int a29385;
+ public int a29386;
+ public int a29387;
+ public int a29388;
+ public int a29389;
+ public int a29390;
+ public int a29391;
+ public int a29392;
+ public int a29393;
+ public int a29394;
+ public int a29395;
+ public int a29396;
+ public int a29397;
+ public int a29398;
+ public int a29399;
+ public int a29400;
+ public int a29401;
+ public int a29402;
+ public int a29403;
+ public int a29404;
+ public int a29405;
+ public int a29406;
+ public int a29407;
+ public int a29408;
+ public int a29409;
+ public int a29410;
+ public int a29411;
+ public int a29412;
+ public int a29413;
+ public int a29414;
+ public int a29415;
+ public int a29416;
+ public int a29417;
+ public int a29418;
+ public int a29419;
+ public int a29420;
+ public int a29421;
+ public int a29422;
+ public int a29423;
+ public int a29424;
+ public int a29425;
+ public int a29426;
+ public int a29427;
+ public int a29428;
+ public int a29429;
+ public int a29430;
+ public int a29431;
+ public int a29432;
+ public int a29433;
+ public int a29434;
+ public int a29435;
+ public int a29436;
+ public int a29437;
+ public int a29438;
+ public int a29439;
+ public int a29440;
+ public int a29441;
+ public int a29442;
+ public int a29443;
+ public int a29444;
+ public int a29445;
+ public int a29446;
+ public int a29447;
+ public int a29448;
+ public int a29449;
+ public int a29450;
+ public int a29451;
+ public int a29452;
+ public int a29453;
+ public int a29454;
+ public int a29455;
+ public int a29456;
+ public int a29457;
+ public int a29458;
+ public int a29459;
+ public int a29460;
+ public int a29461;
+ public int a29462;
+ public int a29463;
+ public int a29464;
+ public int a29465;
+ public int a29466;
+ public int a29467;
+ public int a29468;
+ public int a29469;
+ public int a29470;
+ public int a29471;
+ public int a29472;
+ public int a29473;
+ public int a29474;
+ public int a29475;
+ public int a29476;
+ public int a29477;
+ public int a29478;
+ public int a29479;
+ public int a29480;
+ public int a29481;
+ public int a29482;
+ public int a29483;
+ public int a29484;
+ public int a29485;
+ public int a29486;
+ public int a29487;
+ public int a29488;
+ public int a29489;
+ public int a29490;
+ public int a29491;
+ public int a29492;
+ public int a29493;
+ public int a29494;
+ public int a29495;
+ public int a29496;
+ public int a29497;
+ public int a29498;
+ public int a29499;
+ public int a29500;
+ public int a29501;
+ public int a29502;
+ public int a29503;
+ public int a29504;
+ public int a29505;
+ public int a29506;
+ public int a29507;
+ public int a29508;
+ public int a29509;
+ public int a29510;
+ public int a29511;
+ public int a29512;
+ public int a29513;
+ public int a29514;
+ public int a29515;
+ public int a29516;
+ public int a29517;
+ public int a29518;
+ public int a29519;
+ public int a29520;
+ public int a29521;
+ public int a29522;
+ public int a29523;
+ public int a29524;
+ public int a29525;
+ public int a29526;
+ public int a29527;
+ public int a29528;
+ public int a29529;
+ public int a29530;
+ public int a29531;
+ public int a29532;
+ public int a29533;
+ public int a29534;
+ public int a29535;
+ public int a29536;
+ public int a29537;
+ public int a29538;
+ public int a29539;
+ public int a29540;
+ public int a29541;
+ public int a29542;
+ public int a29543;
+ public int a29544;
+ public int a29545;
+ public int a29546;
+ public int a29547;
+ public int a29548;
+ public int a29549;
+ public int a29550;
+ public int a29551;
+ public int a29552;
+ public int a29553;
+ public int a29554;
+ public int a29555;
+ public int a29556;
+ public int a29557;
+ public int a29558;
+ public int a29559;
+ public int a29560;
+ public int a29561;
+ public int a29562;
+ public int a29563;
+ public int a29564;
+ public int a29565;
+ public int a29566;
+ public int a29567;
+ public int a29568;
+ public int a29569;
+ public int a29570;
+ public int a29571;
+ public int a29572;
+ public int a29573;
+ public int a29574;
+ public int a29575;
+ public int a29576;
+ public int a29577;
+ public int a29578;
+ public int a29579;
+ public int a29580;
+ public int a29581;
+ public int a29582;
+ public int a29583;
+ public int a29584;
+ public int a29585;
+ public int a29586;
+ public int a29587;
+ public int a29588;
+ public int a29589;
+ public int a29590;
+ public int a29591;
+ public int a29592;
+ public int a29593;
+ public int a29594;
+ public int a29595;
+ public int a29596;
+ public int a29597;
+ public int a29598;
+ public int a29599;
+ public int a29600;
+ public int a29601;
+ public int a29602;
+ public int a29603;
+ public int a29604;
+ public int a29605;
+ public int a29606;
+ public int a29607;
+ public int a29608;
+ public int a29609;
+ public int a29610;
+ public int a29611;
+ public int a29612;
+ public int a29613;
+ public int a29614;
+ public int a29615;
+ public int a29616;
+ public int a29617;
+ public int a29618;
+ public int a29619;
+ public int a29620;
+ public int a29621;
+ public int a29622;
+ public int a29623;
+ public int a29624;
+ public int a29625;
+ public int a29626;
+ public int a29627;
+ public int a29628;
+ public int a29629;
+ public int a29630;
+ public int a29631;
+ public int a29632;
+ public int a29633;
+ public int a29634;
+ public int a29635;
+ public int a29636;
+ public int a29637;
+ public int a29638;
+ public int a29639;
+ public int a29640;
+ public int a29641;
+ public int a29642;
+ public int a29643;
+ public int a29644;
+ public int a29645;
+ public int a29646;
+ public int a29647;
+ public int a29648;
+ public int a29649;
+ public int a29650;
+ public int a29651;
+ public int a29652;
+ public int a29653;
+ public int a29654;
+ public int a29655;
+ public int a29656;
+ public int a29657;
+ public int a29658;
+ public int a29659;
+ public int a29660;
+ public int a29661;
+ public int a29662;
+ public int a29663;
+ public int a29664;
+ public int a29665;
+ public int a29666;
+ public int a29667;
+ public int a29668;
+ public int a29669;
+ public int a29670;
+ public int a29671;
+ public int a29672;
+ public int a29673;
+ public int a29674;
+ public int a29675;
+ public int a29676;
+ public int a29677;
+ public int a29678;
+ public int a29679;
+ public int a29680;
+ public int a29681;
+ public int a29682;
+ public int a29683;
+ public int a29684;
+ public int a29685;
+ public int a29686;
+ public int a29687;
+ public int a29688;
+ public int a29689;
+ public int a29690;
+ public int a29691;
+ public int a29692;
+ public int a29693;
+ public int a29694;
+ public int a29695;
+ public int a29696;
+ public int a29697;
+ public int a29698;
+ public int a29699;
+ public int a29700;
+ public int a29701;
+ public int a29702;
+ public int a29703;
+ public int a29704;
+ public int a29705;
+ public int a29706;
+ public int a29707;
+ public int a29708;
+ public int a29709;
+ public int a29710;
+ public int a29711;
+ public int a29712;
+ public int a29713;
+ public int a29714;
+ public int a29715;
+ public int a29716;
+ public int a29717;
+ public int a29718;
+ public int a29719;
+ public int a29720;
+ public int a29721;
+ public int a29722;
+ public int a29723;
+ public int a29724;
+ public int a29725;
+ public int a29726;
+ public int a29727;
+ public int a29728;
+ public int a29729;
+ public int a29730;
+ public int a29731;
+ public int a29732;
+ public int a29733;
+ public int a29734;
+ public int a29735;
+ public int a29736;
+ public int a29737;
+ public int a29738;
+ public int a29739;
+ public int a29740;
+ public int a29741;
+ public int a29742;
+ public int a29743;
+ public int a29744;
+ public int a29745;
+ public int a29746;
+ public int a29747;
+ public int a29748;
+ public int a29749;
+ public int a29750;
+ public int a29751;
+ public int a29752;
+ public int a29753;
+ public int a29754;
+ public int a29755;
+ public int a29756;
+ public int a29757;
+ public int a29758;
+ public int a29759;
+ public int a29760;
+ public int a29761;
+ public int a29762;
+ public int a29763;
+ public int a29764;
+ public int a29765;
+ public int a29766;
+ public int a29767;
+ public int a29768;
+ public int a29769;
+ public int a29770;
+ public int a29771;
+ public int a29772;
+ public int a29773;
+ public int a29774;
+ public int a29775;
+ public int a29776;
+ public int a29777;
+ public int a29778;
+ public int a29779;
+ public int a29780;
+ public int a29781;
+ public int a29782;
+ public int a29783;
+ public int a29784;
+ public int a29785;
+ public int a29786;
+ public int a29787;
+ public int a29788;
+ public int a29789;
+ public int a29790;
+ public int a29791;
+ public int a29792;
+ public int a29793;
+ public int a29794;
+ public int a29795;
+ public int a29796;
+ public int a29797;
+ public int a29798;
+ public int a29799;
+ public int a29800;
+ public int a29801;
+ public int a29802;
+ public int a29803;
+ public int a29804;
+ public int a29805;
+ public int a29806;
+ public int a29807;
+ public int a29808;
+ public int a29809;
+ public int a29810;
+ public int a29811;
+ public int a29812;
+ public int a29813;
+ public int a29814;
+ public int a29815;
+ public int a29816;
+ public int a29817;
+ public int a29818;
+ public int a29819;
+ public int a29820;
+ public int a29821;
+ public int a29822;
+ public int a29823;
+ public int a29824;
+ public int a29825;
+ public int a29826;
+ public int a29827;
+ public int a29828;
+ public int a29829;
+ public int a29830;
+ public int a29831;
+ public int a29832;
+ public int a29833;
+ public int a29834;
+ public int a29835;
+ public int a29836;
+ public int a29837;
+ public int a29838;
+ public int a29839;
+ public int a29840;
+ public int a29841;
+ public int a29842;
+ public int a29843;
+ public int a29844;
+ public int a29845;
+ public int a29846;
+ public int a29847;
+ public int a29848;
+ public int a29849;
+ public int a29850;
+ public int a29851;
+ public int a29852;
+ public int a29853;
+ public int a29854;
+ public int a29855;
+ public int a29856;
+ public int a29857;
+ public int a29858;
+ public int a29859;
+ public int a29860;
+ public int a29861;
+ public int a29862;
+ public int a29863;
+ public int a29864;
+ public int a29865;
+ public int a29866;
+ public int a29867;
+ public int a29868;
+ public int a29869;
+ public int a29870;
+ public int a29871;
+ public int a29872;
+ public int a29873;
+ public int a29874;
+ public int a29875;
+ public int a29876;
+ public int a29877;
+ public int a29878;
+ public int a29879;
+ public int a29880;
+ public int a29881;
+ public int a29882;
+ public int a29883;
+ public int a29884;
+ public int a29885;
+ public int a29886;
+ public int a29887;
+ public int a29888;
+ public int a29889;
+ public int a29890;
+ public int a29891;
+ public int a29892;
+ public int a29893;
+ public int a29894;
+ public int a29895;
+ public int a29896;
+ public int a29897;
+ public int a29898;
+ public int a29899;
+ public int a29900;
+ public int a29901;
+ public int a29902;
+ public int a29903;
+ public int a29904;
+ public int a29905;
+ public int a29906;
+ public int a29907;
+ public int a29908;
+ public int a29909;
+ public int a29910;
+ public int a29911;
+ public int a29912;
+ public int a29913;
+ public int a29914;
+ public int a29915;
+ public int a29916;
+ public int a29917;
+ public int a29918;
+ public int a29919;
+ public int a29920;
+ public int a29921;
+ public int a29922;
+ public int a29923;
+ public int a29924;
+ public int a29925;
+ public int a29926;
+ public int a29927;
+ public int a29928;
+ public int a29929;
+ public int a29930;
+ public int a29931;
+ public int a29932;
+ public int a29933;
+ public int a29934;
+ public int a29935;
+ public int a29936;
+ public int a29937;
+ public int a29938;
+ public int a29939;
+ public int a29940;
+ public int a29941;
+ public int a29942;
+ public int a29943;
+ public int a29944;
+ public int a29945;
+ public int a29946;
+ public int a29947;
+ public int a29948;
+ public int a29949;
+ public int a29950;
+ public int a29951;
+ public int a29952;
+ public int a29953;
+ public int a29954;
+ public int a29955;
+ public int a29956;
+ public int a29957;
+ public int a29958;
+ public int a29959;
+ public int a29960;
+ public int a29961;
+ public int a29962;
+ public int a29963;
+ public int a29964;
+ public int a29965;
+ public int a29966;
+ public int a29967;
+ public int a29968;
+ public int a29969;
+ public int a29970;
+ public int a29971;
+ public int a29972;
+ public int a29973;
+ public int a29974;
+ public int a29975;
+ public int a29976;
+ public int a29977;
+ public int a29978;
+ public int a29979;
+ public int a29980;
+ public int a29981;
+ public int a29982;
+ public int a29983;
+ public int a29984;
+ public int a29985;
+ public int a29986;
+ public int a29987;
+ public int a29988;
+ public int a29989;
+ public int a29990;
+ public int a29991;
+ public int a29992;
+ public int a29993;
+ public int a29994;
+ public int a29995;
+ public int a29996;
+ public int a29997;
+ public int a29998;
+ public int a29999;
+ public int a30000;
+ public int a30001;
+ public int a30002;
+ public int a30003;
+ public int a30004;
+ public int a30005;
+ public int a30006;
+ public int a30007;
+ public int a30008;
+ public int a30009;
+ public int a30010;
+ public int a30011;
+ public int a30012;
+ public int a30013;
+ public int a30014;
+ public int a30015;
+ public int a30016;
+ public int a30017;
+ public int a30018;
+ public int a30019;
+ public int a30020;
+ public int a30021;
+ public int a30022;
+ public int a30023;
+ public int a30024;
+ public int a30025;
+ public int a30026;
+ public int a30027;
+ public int a30028;
+ public int a30029;
+ public int a30030;
+ public int a30031;
+ public int a30032;
+ public int a30033;
+ public int a30034;
+ public int a30035;
+ public int a30036;
+ public int a30037;
+ public int a30038;
+ public int a30039;
+ public int a30040;
+ public int a30041;
+ public int a30042;
+ public int a30043;
+ public int a30044;
+ public int a30045;
+ public int a30046;
+ public int a30047;
+ public int a30048;
+ public int a30049;
+ public int a30050;
+ public int a30051;
+ public int a30052;
+ public int a30053;
+ public int a30054;
+ public int a30055;
+ public int a30056;
+ public int a30057;
+ public int a30058;
+ public int a30059;
+ public int a30060;
+ public int a30061;
+ public int a30062;
+ public int a30063;
+ public int a30064;
+ public int a30065;
+ public int a30066;
+ public int a30067;
+ public int a30068;
+ public int a30069;
+ public int a30070;
+ public int a30071;
+ public int a30072;
+ public int a30073;
+ public int a30074;
+ public int a30075;
+ public int a30076;
+ public int a30077;
+ public int a30078;
+ public int a30079;
+ public int a30080;
+ public int a30081;
+ public int a30082;
+ public int a30083;
+ public int a30084;
+ public int a30085;
+ public int a30086;
+ public int a30087;
+ public int a30088;
+ public int a30089;
+ public int a30090;
+ public int a30091;
+ public int a30092;
+ public int a30093;
+ public int a30094;
+ public int a30095;
+ public int a30096;
+ public int a30097;
+ public int a30098;
+ public int a30099;
+ public int a30100;
+ public int a30101;
+ public int a30102;
+ public int a30103;
+ public int a30104;
+ public int a30105;
+ public int a30106;
+ public int a30107;
+ public int a30108;
+ public int a30109;
+ public int a30110;
+ public int a30111;
+ public int a30112;
+ public int a30113;
+ public int a30114;
+ public int a30115;
+ public int a30116;
+ public int a30117;
+ public int a30118;
+ public int a30119;
+ public int a30120;
+ public int a30121;
+ public int a30122;
+ public int a30123;
+ public int a30124;
+ public int a30125;
+ public int a30126;
+ public int a30127;
+ public int a30128;
+ public int a30129;
+ public int a30130;
+ public int a30131;
+ public int a30132;
+ public int a30133;
+ public int a30134;
+ public int a30135;
+ public int a30136;
+ public int a30137;
+ public int a30138;
+ public int a30139;
+ public int a30140;
+ public int a30141;
+ public int a30142;
+ public int a30143;
+ public int a30144;
+ public int a30145;
+ public int a30146;
+ public int a30147;
+ public int a30148;
+ public int a30149;
+ public int a30150;
+ public int a30151;
+ public int a30152;
+ public int a30153;
+ public int a30154;
+ public int a30155;
+ public int a30156;
+ public int a30157;
+ public int a30158;
+ public int a30159;
+ public int a30160;
+ public int a30161;
+ public int a30162;
+ public int a30163;
+ public int a30164;
+ public int a30165;
+ public int a30166;
+ public int a30167;
+ public int a30168;
+ public int a30169;
+ public int a30170;
+ public int a30171;
+ public int a30172;
+ public int a30173;
+ public int a30174;
+ public int a30175;
+ public int a30176;
+ public int a30177;
+ public int a30178;
+ public int a30179;
+ public int a30180;
+ public int a30181;
+ public int a30182;
+ public int a30183;
+ public int a30184;
+ public int a30185;
+ public int a30186;
+ public int a30187;
+ public int a30188;
+ public int a30189;
+ public int a30190;
+ public int a30191;
+ public int a30192;
+ public int a30193;
+ public int a30194;
+ public int a30195;
+ public int a30196;
+ public int a30197;
+ public int a30198;
+ public int a30199;
+ public int a30200;
+ public int a30201;
+ public int a30202;
+ public int a30203;
+ public int a30204;
+ public int a30205;
+ public int a30206;
+ public int a30207;
+ public int a30208;
+ public int a30209;
+ public int a30210;
+ public int a30211;
+ public int a30212;
+ public int a30213;
+ public int a30214;
+ public int a30215;
+ public int a30216;
+ public int a30217;
+ public int a30218;
+ public int a30219;
+ public int a30220;
+ public int a30221;
+ public int a30222;
+ public int a30223;
+ public int a30224;
+ public int a30225;
+ public int a30226;
+ public int a30227;
+ public int a30228;
+ public int a30229;
+ public int a30230;
+ public int a30231;
+ public int a30232;
+ public int a30233;
+ public int a30234;
+ public int a30235;
+ public int a30236;
+ public int a30237;
+ public int a30238;
+ public int a30239;
+ public int a30240;
+ public int a30241;
+ public int a30242;
+ public int a30243;
+ public int a30244;
+ public int a30245;
+ public int a30246;
+ public int a30247;
+ public int a30248;
+ public int a30249;
+ public int a30250;
+ public int a30251;
+ public int a30252;
+ public int a30253;
+ public int a30254;
+ public int a30255;
+ public int a30256;
+ public int a30257;
+ public int a30258;
+ public int a30259;
+ public int a30260;
+ public int a30261;
+ public int a30262;
+ public int a30263;
+ public int a30264;
+ public int a30265;
+ public int a30266;
+ public int a30267;
+ public int a30268;
+ public int a30269;
+ public int a30270;
+ public int a30271;
+ public int a30272;
+ public int a30273;
+ public int a30274;
+ public int a30275;
+ public int a30276;
+ public int a30277;
+ public int a30278;
+ public int a30279;
+ public int a30280;
+ public int a30281;
+ public int a30282;
+ public int a30283;
+ public int a30284;
+ public int a30285;
+ public int a30286;
+ public int a30287;
+ public int a30288;
+ public int a30289;
+ public int a30290;
+ public int a30291;
+ public int a30292;
+ public int a30293;
+ public int a30294;
+ public int a30295;
+ public int a30296;
+ public int a30297;
+ public int a30298;
+ public int a30299;
+ public int a30300;
+ public int a30301;
+ public int a30302;
+ public int a30303;
+ public int a30304;
+ public int a30305;
+ public int a30306;
+ public int a30307;
+ public int a30308;
+ public int a30309;
+ public int a30310;
+ public int a30311;
+ public int a30312;
+ public int a30313;
+ public int a30314;
+ public int a30315;
+ public int a30316;
+ public int a30317;
+ public int a30318;
+ public int a30319;
+ public int a30320;
+ public int a30321;
+ public int a30322;
+ public int a30323;
+ public int a30324;
+ public int a30325;
+ public int a30326;
+ public int a30327;
+ public int a30328;
+ public int a30329;
+ public int a30330;
+ public int a30331;
+ public int a30332;
+ public int a30333;
+ public int a30334;
+ public int a30335;
+ public int a30336;
+ public int a30337;
+ public int a30338;
+ public int a30339;
+ public int a30340;
+ public int a30341;
+ public int a30342;
+ public int a30343;
+ public int a30344;
+ public int a30345;
+ public int a30346;
+ public int a30347;
+ public int a30348;
+ public int a30349;
+ public int a30350;
+ public int a30351;
+ public int a30352;
+ public int a30353;
+ public int a30354;
+ public int a30355;
+ public int a30356;
+ public int a30357;
+ public int a30358;
+ public int a30359;
+ public int a30360;
+ public int a30361;
+ public int a30362;
+ public int a30363;
+ public int a30364;
+ public int a30365;
+ public int a30366;
+ public int a30367;
+ public int a30368;
+ public int a30369;
+ public int a30370;
+ public int a30371;
+ public int a30372;
+ public int a30373;
+ public int a30374;
+ public int a30375;
+ public int a30376;
+ public int a30377;
+ public int a30378;
+ public int a30379;
+ public int a30380;
+ public int a30381;
+ public int a30382;
+ public int a30383;
+ public int a30384;
+ public int a30385;
+ public int a30386;
+ public int a30387;
+ public int a30388;
+ public int a30389;
+ public int a30390;
+ public int a30391;
+ public int a30392;
+ public int a30393;
+ public int a30394;
+ public int a30395;
+ public int a30396;
+ public int a30397;
+ public int a30398;
+ public int a30399;
+ public int a30400;
+ public int a30401;
+ public int a30402;
+ public int a30403;
+ public int a30404;
+ public int a30405;
+ public int a30406;
+ public int a30407;
+ public int a30408;
+ public int a30409;
+ public int a30410;
+ public int a30411;
+ public int a30412;
+ public int a30413;
+ public int a30414;
+ public int a30415;
+ public int a30416;
+ public int a30417;
+ public int a30418;
+ public int a30419;
+ public int a30420;
+ public int a30421;
+ public int a30422;
+ public int a30423;
+ public int a30424;
+ public int a30425;
+ public int a30426;
+ public int a30427;
+ public int a30428;
+ public int a30429;
+ public int a30430;
+ public int a30431;
+ public int a30432;
+ public int a30433;
+ public int a30434;
+ public int a30435;
+ public int a30436;
+ public int a30437;
+ public int a30438;
+ public int a30439;
+ public int a30440;
+ public int a30441;
+ public int a30442;
+ public int a30443;
+ public int a30444;
+ public int a30445;
+ public int a30446;
+ public int a30447;
+ public int a30448;
+ public int a30449;
+ public int a30450;
+ public int a30451;
+ public int a30452;
+ public int a30453;
+ public int a30454;
+ public int a30455;
+ public int a30456;
+ public int a30457;
+ public int a30458;
+ public int a30459;
+ public int a30460;
+ public int a30461;
+ public int a30462;
+ public int a30463;
+ public int a30464;
+ public int a30465;
+ public int a30466;
+ public int a30467;
+ public int a30468;
+ public int a30469;
+ public int a30470;
+ public int a30471;
+ public int a30472;
+ public int a30473;
+ public int a30474;
+ public int a30475;
+ public int a30476;
+ public int a30477;
+ public int a30478;
+ public int a30479;
+ public int a30480;
+ public int a30481;
+ public int a30482;
+ public int a30483;
+ public int a30484;
+ public int a30485;
+ public int a30486;
+ public int a30487;
+ public int a30488;
+ public int a30489;
+ public int a30490;
+ public int a30491;
+ public int a30492;
+ public int a30493;
+ public int a30494;
+ public int a30495;
+ public int a30496;
+ public int a30497;
+ public int a30498;
+ public int a30499;
+ public int a30500;
+ public int a30501;
+ public int a30502;
+ public int a30503;
+ public int a30504;
+ public int a30505;
+ public int a30506;
+ public int a30507;
+ public int a30508;
+ public int a30509;
+ public int a30510;
+ public int a30511;
+ public int a30512;
+ public int a30513;
+ public int a30514;
+ public int a30515;
+ public int a30516;
+ public int a30517;
+ public int a30518;
+ public int a30519;
+ public int a30520;
+ public int a30521;
+ public int a30522;
+ public int a30523;
+ public int a30524;
+ public int a30525;
+ public int a30526;
+ public int a30527;
+ public int a30528;
+ public int a30529;
+ public int a30530;
+ public int a30531;
+ public int a30532;
+ public int a30533;
+ public int a30534;
+ public int a30535;
+ public int a30536;
+ public int a30537;
+ public int a30538;
+ public int a30539;
+ public int a30540;
+ public int a30541;
+ public int a30542;
+ public int a30543;
+ public int a30544;
+ public int a30545;
+ public int a30546;
+ public int a30547;
+ public int a30548;
+ public int a30549;
+ public int a30550;
+ public int a30551;
+ public int a30552;
+ public int a30553;
+ public int a30554;
+ public int a30555;
+ public int a30556;
+ public int a30557;
+ public int a30558;
+ public int a30559;
+ public int a30560;
+ public int a30561;
+ public int a30562;
+ public int a30563;
+ public int a30564;
+ public int a30565;
+ public int a30566;
+ public int a30567;
+ public int a30568;
+ public int a30569;
+ public int a30570;
+ public int a30571;
+ public int a30572;
+ public int a30573;
+ public int a30574;
+ public int a30575;
+ public int a30576;
+ public int a30577;
+ public int a30578;
+ public int a30579;
+ public int a30580;
+ public int a30581;
+ public int a30582;
+ public int a30583;
+ public int a30584;
+ public int a30585;
+ public int a30586;
+ public int a30587;
+ public int a30588;
+ public int a30589;
+ public int a30590;
+ public int a30591;
+ public int a30592;
+ public int a30593;
+ public int a30594;
+ public int a30595;
+ public int a30596;
+ public int a30597;
+ public int a30598;
+ public int a30599;
+ public int a30600;
+ public int a30601;
+ public int a30602;
+ public int a30603;
+ public int a30604;
+ public int a30605;
+ public int a30606;
+ public int a30607;
+ public int a30608;
+ public int a30609;
+ public int a30610;
+ public int a30611;
+ public int a30612;
+ public int a30613;
+ public int a30614;
+ public int a30615;
+ public int a30616;
+ public int a30617;
+ public int a30618;
+ public int a30619;
+ public int a30620;
+ public int a30621;
+ public int a30622;
+ public int a30623;
+ public int a30624;
+ public int a30625;
+ public int a30626;
+ public int a30627;
+ public int a30628;
+ public int a30629;
+ public int a30630;
+ public int a30631;
+ public int a30632;
+ public int a30633;
+ public int a30634;
+ public int a30635;
+ public int a30636;
+ public int a30637;
+ public int a30638;
+ public int a30639;
+ public int a30640;
+ public int a30641;
+ public int a30642;
+ public int a30643;
+ public int a30644;
+ public int a30645;
+ public int a30646;
+ public int a30647;
+ public int a30648;
+ public int a30649;
+ public int a30650;
+ public int a30651;
+ public int a30652;
+ public int a30653;
+ public int a30654;
+ public int a30655;
+ public int a30656;
+ public int a30657;
+ public int a30658;
+ public int a30659;
+ public int a30660;
+ public int a30661;
+ public int a30662;
+ public int a30663;
+ public int a30664;
+ public int a30665;
+ public int a30666;
+ public int a30667;
+ public int a30668;
+ public int a30669;
+ public int a30670;
+ public int a30671;
+ public int a30672;
+ public int a30673;
+ public int a30674;
+ public int a30675;
+ public int a30676;
+ public int a30677;
+ public int a30678;
+ public int a30679;
+ public int a30680;
+ public int a30681;
+ public int a30682;
+ public int a30683;
+ public int a30684;
+ public int a30685;
+ public int a30686;
+ public int a30687;
+ public int a30688;
+ public int a30689;
+ public int a30690;
+ public int a30691;
+ public int a30692;
+ public int a30693;
+ public int a30694;
+ public int a30695;
+ public int a30696;
+ public int a30697;
+ public int a30698;
+ public int a30699;
+ public int a30700;
+ public int a30701;
+ public int a30702;
+ public int a30703;
+ public int a30704;
+ public int a30705;
+ public int a30706;
+ public int a30707;
+ public int a30708;
+ public int a30709;
+ public int a30710;
+ public int a30711;
+ public int a30712;
+ public int a30713;
+ public int a30714;
+ public int a30715;
+ public int a30716;
+ public int a30717;
+ public int a30718;
+ public int a30719;
+ public int a30720;
+ public int a30721;
+ public int a30722;
+ public int a30723;
+ public int a30724;
+ public int a30725;
+ public int a30726;
+ public int a30727;
+ public int a30728;
+ public int a30729;
+ public int a30730;
+ public int a30731;
+ public int a30732;
+ public int a30733;
+ public int a30734;
+ public int a30735;
+ public int a30736;
+ public int a30737;
+ public int a30738;
+ public int a30739;
+ public int a30740;
+ public int a30741;
+ public int a30742;
+ public int a30743;
+ public int a30744;
+ public int a30745;
+ public int a30746;
+ public int a30747;
+ public int a30748;
+ public int a30749;
+ public int a30750;
+ public int a30751;
+ public int a30752;
+ public int a30753;
+ public int a30754;
+ public int a30755;
+ public int a30756;
+ public int a30757;
+ public int a30758;
+ public int a30759;
+ public int a30760;
+ public int a30761;
+ public int a30762;
+ public int a30763;
+ public int a30764;
+ public int a30765;
+ public int a30766;
+ public int a30767;
+ public int a30768;
+ public int a30769;
+ public int a30770;
+ public int a30771;
+ public int a30772;
+ public int a30773;
+ public int a30774;
+ public int a30775;
+ public int a30776;
+ public int a30777;
+ public int a30778;
+ public int a30779;
+ public int a30780;
+ public int a30781;
+ public int a30782;
+ public int a30783;
+ public int a30784;
+ public int a30785;
+ public int a30786;
+ public int a30787;
+ public int a30788;
+ public int a30789;
+ public int a30790;
+ public int a30791;
+ public int a30792;
+ public int a30793;
+ public int a30794;
+ public int a30795;
+ public int a30796;
+ public int a30797;
+ public int a30798;
+ public int a30799;
+ public int a30800;
+ public int a30801;
+ public int a30802;
+ public int a30803;
+ public int a30804;
+ public int a30805;
+ public int a30806;
+ public int a30807;
+ public int a30808;
+ public int a30809;
+ public int a30810;
+ public int a30811;
+ public int a30812;
+ public int a30813;
+ public int a30814;
+ public int a30815;
+ public int a30816;
+ public int a30817;
+ public int a30818;
+ public int a30819;
+ public int a30820;
+ public int a30821;
+ public int a30822;
+ public int a30823;
+ public int a30824;
+ public int a30825;
+ public int a30826;
+ public int a30827;
+ public int a30828;
+ public int a30829;
+ public int a30830;
+ public int a30831;
+ public int a30832;
+ public int a30833;
+ public int a30834;
+ public int a30835;
+ public int a30836;
+ public int a30837;
+ public int a30838;
+ public int a30839;
+ public int a30840;
+ public int a30841;
+ public int a30842;
+ public int a30843;
+ public int a30844;
+ public int a30845;
+ public int a30846;
+ public int a30847;
+ public int a30848;
+ public int a30849;
+ public int a30850;
+ public int a30851;
+ public int a30852;
+ public int a30853;
+ public int a30854;
+ public int a30855;
+ public int a30856;
+ public int a30857;
+ public int a30858;
+ public int a30859;
+ public int a30860;
+ public int a30861;
+ public int a30862;
+ public int a30863;
+ public int a30864;
+ public int a30865;
+ public int a30866;
+ public int a30867;
+ public int a30868;
+ public int a30869;
+ public int a30870;
+ public int a30871;
+ public int a30872;
+ public int a30873;
+ public int a30874;
+ public int a30875;
+ public int a30876;
+ public int a30877;
+ public int a30878;
+ public int a30879;
+ public int a30880;
+ public int a30881;
+ public int a30882;
+ public int a30883;
+ public int a30884;
+ public int a30885;
+ public int a30886;
+ public int a30887;
+ public int a30888;
+ public int a30889;
+ public int a30890;
+ public int a30891;
+ public int a30892;
+ public int a30893;
+ public int a30894;
+ public int a30895;
+ public int a30896;
+ public int a30897;
+ public int a30898;
+ public int a30899;
+ public int a30900;
+ public int a30901;
+ public int a30902;
+ public int a30903;
+ public int a30904;
+ public int a30905;
+ public int a30906;
+ public int a30907;
+ public int a30908;
+ public int a30909;
+ public int a30910;
+ public int a30911;
+ public int a30912;
+ public int a30913;
+ public int a30914;
+ public int a30915;
+ public int a30916;
+ public int a30917;
+ public int a30918;
+ public int a30919;
+ public int a30920;
+ public int a30921;
+ public int a30922;
+ public int a30923;
+ public int a30924;
+ public int a30925;
+ public int a30926;
+ public int a30927;
+ public int a30928;
+ public int a30929;
+ public int a30930;
+ public int a30931;
+ public int a30932;
+ public int a30933;
+ public int a30934;
+ public int a30935;
+ public int a30936;
+ public int a30937;
+ public int a30938;
+ public int a30939;
+ public int a30940;
+ public int a30941;
+ public int a30942;
+ public int a30943;
+ public int a30944;
+ public int a30945;
+ public int a30946;
+ public int a30947;
+ public int a30948;
+ public int a30949;
+ public int a30950;
+ public int a30951;
+ public int a30952;
+ public int a30953;
+ public int a30954;
+ public int a30955;
+ public int a30956;
+ public int a30957;
+ public int a30958;
+ public int a30959;
+ public int a30960;
+ public int a30961;
+ public int a30962;
+ public int a30963;
+ public int a30964;
+ public int a30965;
+ public int a30966;
+ public int a30967;
+ public int a30968;
+ public int a30969;
+ public int a30970;
+ public int a30971;
+ public int a30972;
+ public int a30973;
+ public int a30974;
+ public int a30975;
+ public int a30976;
+ public int a30977;
+ public int a30978;
+ public int a30979;
+ public int a30980;
+ public int a30981;
+ public int a30982;
+ public int a30983;
+ public int a30984;
+ public int a30985;
+ public int a30986;
+ public int a30987;
+ public int a30988;
+ public int a30989;
+ public int a30990;
+ public int a30991;
+ public int a30992;
+ public int a30993;
+ public int a30994;
+ public int a30995;
+ public int a30996;
+ public int a30997;
+ public int a30998;
+ public int a30999;
+ public int a31000;
+ public int a31001;
+ public int a31002;
+ public int a31003;
+ public int a31004;
+ public int a31005;
+ public int a31006;
+ public int a31007;
+ public int a31008;
+ public int a31009;
+ public int a31010;
+ public int a31011;
+ public int a31012;
+ public int a31013;
+ public int a31014;
+ public int a31015;
+ public int a31016;
+ public int a31017;
+ public int a31018;
+ public int a31019;
+ public int a31020;
+ public int a31021;
+ public int a31022;
+ public int a31023;
+ public int a31024;
+ public int a31025;
+ public int a31026;
+ public int a31027;
+ public int a31028;
+ public int a31029;
+ public int a31030;
+ public int a31031;
+ public int a31032;
+ public int a31033;
+ public int a31034;
+ public int a31035;
+ public int a31036;
+ public int a31037;
+ public int a31038;
+ public int a31039;
+ public int a31040;
+ public int a31041;
+ public int a31042;
+ public int a31043;
+ public int a31044;
+ public int a31045;
+ public int a31046;
+ public int a31047;
+ public int a31048;
+ public int a31049;
+ public int a31050;
+ public int a31051;
+ public int a31052;
+ public int a31053;
+ public int a31054;
+ public int a31055;
+ public int a31056;
+ public int a31057;
+ public int a31058;
+ public int a31059;
+ public int a31060;
+ public int a31061;
+ public int a31062;
+ public int a31063;
+ public int a31064;
+ public int a31065;
+ public int a31066;
+ public int a31067;
+ public int a31068;
+ public int a31069;
+ public int a31070;
+ public int a31071;
+ public int a31072;
+ public int a31073;
+ public int a31074;
+ public int a31075;
+ public int a31076;
+ public int a31077;
+ public int a31078;
+ public int a31079;
+ public int a31080;
+ public int a31081;
+ public int a31082;
+ public int a31083;
+ public int a31084;
+ public int a31085;
+ public int a31086;
+ public int a31087;
+ public int a31088;
+ public int a31089;
+ public int a31090;
+ public int a31091;
+ public int a31092;
+ public int a31093;
+ public int a31094;
+ public int a31095;
+ public int a31096;
+ public int a31097;
+ public int a31098;
+ public int a31099;
+ public int a31100;
+ public int a31101;
+ public int a31102;
+ public int a31103;
+ public int a31104;
+ public int a31105;
+ public int a31106;
+ public int a31107;
+ public int a31108;
+ public int a31109;
+ public int a31110;
+ public int a31111;
+ public int a31112;
+ public int a31113;
+ public int a31114;
+ public int a31115;
+ public int a31116;
+ public int a31117;
+ public int a31118;
+ public int a31119;
+ public int a31120;
+ public int a31121;
+ public int a31122;
+ public int a31123;
+ public int a31124;
+ public int a31125;
+ public int a31126;
+ public int a31127;
+ public int a31128;
+ public int a31129;
+ public int a31130;
+ public int a31131;
+ public int a31132;
+ public int a31133;
+ public int a31134;
+ public int a31135;
+ public int a31136;
+ public int a31137;
+ public int a31138;
+ public int a31139;
+ public int a31140;
+ public int a31141;
+ public int a31142;
+ public int a31143;
+ public int a31144;
+ public int a31145;
+ public int a31146;
+ public int a31147;
+ public int a31148;
+ public int a31149;
+ public int a31150;
+ public int a31151;
+ public int a31152;
+ public int a31153;
+ public int a31154;
+ public int a31155;
+ public int a31156;
+ public int a31157;
+ public int a31158;
+ public int a31159;
+ public int a31160;
+ public int a31161;
+ public int a31162;
+ public int a31163;
+ public int a31164;
+ public int a31165;
+ public int a31166;
+ public int a31167;
+ public int a31168;
+ public int a31169;
+ public int a31170;
+ public int a31171;
+ public int a31172;
+ public int a31173;
+ public int a31174;
+ public int a31175;
+ public int a31176;
+ public int a31177;
+ public int a31178;
+ public int a31179;
+ public int a31180;
+ public int a31181;
+ public int a31182;
+ public int a31183;
+ public int a31184;
+ public int a31185;
+ public int a31186;
+ public int a31187;
+ public int a31188;
+ public int a31189;
+ public int a31190;
+ public int a31191;
+ public int a31192;
+ public int a31193;
+ public int a31194;
+ public int a31195;
+ public int a31196;
+ public int a31197;
+ public int a31198;
+ public int a31199;
+ public int a31200;
+ public int a31201;
+ public int a31202;
+ public int a31203;
+ public int a31204;
+ public int a31205;
+ public int a31206;
+ public int a31207;
+ public int a31208;
+ public int a31209;
+ public int a31210;
+ public int a31211;
+ public int a31212;
+ public int a31213;
+ public int a31214;
+ public int a31215;
+ public int a31216;
+ public int a31217;
+ public int a31218;
+ public int a31219;
+ public int a31220;
+ public int a31221;
+ public int a31222;
+ public int a31223;
+ public int a31224;
+ public int a31225;
+ public int a31226;
+ public int a31227;
+ public int a31228;
+ public int a31229;
+ public int a31230;
+ public int a31231;
+ public int a31232;
+ public int a31233;
+ public int a31234;
+ public int a31235;
+ public int a31236;
+ public int a31237;
+ public int a31238;
+ public int a31239;
+ public int a31240;
+ public int a31241;
+ public int a31242;
+ public int a31243;
+ public int a31244;
+ public int a31245;
+ public int a31246;
+ public int a31247;
+ public int a31248;
+ public int a31249;
+ public int a31250;
+ public int a31251;
+ public int a31252;
+ public int a31253;
+ public int a31254;
+ public int a31255;
+ public int a31256;
+ public int a31257;
+ public int a31258;
+ public int a31259;
+ public int a31260;
+ public int a31261;
+ public int a31262;
+ public int a31263;
+ public int a31264;
+ public int a31265;
+ public int a31266;
+ public int a31267;
+ public int a31268;
+ public int a31269;
+ public int a31270;
+ public int a31271;
+ public int a31272;
+ public int a31273;
+ public int a31274;
+ public int a31275;
+ public int a31276;
+ public int a31277;
+ public int a31278;
+ public int a31279;
+ public int a31280;
+ public int a31281;
+ public int a31282;
+ public int a31283;
+ public int a31284;
+ public int a31285;
+ public int a31286;
+ public int a31287;
+ public int a31288;
+ public int a31289;
+ public int a31290;
+ public int a31291;
+ public int a31292;
+ public int a31293;
+ public int a31294;
+ public int a31295;
+ public int a31296;
+ public int a31297;
+ public int a31298;
+ public int a31299;
+ public int a31300;
+ public int a31301;
+ public int a31302;
+ public int a31303;
+ public int a31304;
+ public int a31305;
+ public int a31306;
+ public int a31307;
+ public int a31308;
+ public int a31309;
+ public int a31310;
+ public int a31311;
+ public int a31312;
+ public int a31313;
+ public int a31314;
+ public int a31315;
+ public int a31316;
+ public int a31317;
+ public int a31318;
+ public int a31319;
+ public int a31320;
+ public int a31321;
+ public int a31322;
+ public int a31323;
+ public int a31324;
+ public int a31325;
+ public int a31326;
+ public int a31327;
+ public int a31328;
+ public int a31329;
+ public int a31330;
+ public int a31331;
+ public int a31332;
+ public int a31333;
+ public int a31334;
+ public int a31335;
+ public int a31336;
+ public int a31337;
+ public int a31338;
+ public int a31339;
+ public int a31340;
+ public int a31341;
+ public int a31342;
+ public int a31343;
+ public int a31344;
+ public int a31345;
+ public int a31346;
+ public int a31347;
+ public int a31348;
+ public int a31349;
+ public int a31350;
+ public int a31351;
+ public int a31352;
+ public int a31353;
+ public int a31354;
+ public int a31355;
+ public int a31356;
+ public int a31357;
+ public int a31358;
+ public int a31359;
+ public int a31360;
+ public int a31361;
+ public int a31362;
+ public int a31363;
+ public int a31364;
+ public int a31365;
+ public int a31366;
+ public int a31367;
+ public int a31368;
+ public int a31369;
+ public int a31370;
+ public int a31371;
+ public int a31372;
+ public int a31373;
+ public int a31374;
+ public int a31375;
+ public int a31376;
+ public int a31377;
+ public int a31378;
+ public int a31379;
+ public int a31380;
+ public int a31381;
+ public int a31382;
+ public int a31383;
+ public int a31384;
+ public int a31385;
+ public int a31386;
+ public int a31387;
+ public int a31388;
+ public int a31389;
+ public int a31390;
+ public int a31391;
+ public int a31392;
+ public int a31393;
+ public int a31394;
+ public int a31395;
+ public int a31396;
+ public int a31397;
+ public int a31398;
+ public int a31399;
+ public int a31400;
+ public int a31401;
+ public int a31402;
+ public int a31403;
+ public int a31404;
+ public int a31405;
+ public int a31406;
+ public int a31407;
+ public int a31408;
+ public int a31409;
+ public int a31410;
+ public int a31411;
+ public int a31412;
+ public int a31413;
+ public int a31414;
+ public int a31415;
+ public int a31416;
+ public int a31417;
+ public int a31418;
+ public int a31419;
+ public int a31420;
+ public int a31421;
+ public int a31422;
+ public int a31423;
+ public int a31424;
+ public int a31425;
+ public int a31426;
+ public int a31427;
+ public int a31428;
+ public int a31429;
+ public int a31430;
+ public int a31431;
+ public int a31432;
+ public int a31433;
+ public int a31434;
+ public int a31435;
+ public int a31436;
+ public int a31437;
+ public int a31438;
+ public int a31439;
+ public int a31440;
+ public int a31441;
+ public int a31442;
+ public int a31443;
+ public int a31444;
+ public int a31445;
+ public int a31446;
+ public int a31447;
+ public int a31448;
+ public int a31449;
+ public int a31450;
+ public int a31451;
+ public int a31452;
+ public int a31453;
+ public int a31454;
+ public int a31455;
+ public int a31456;
+ public int a31457;
+ public int a31458;
+ public int a31459;
+ public int a31460;
+ public int a31461;
+ public int a31462;
+ public int a31463;
+ public int a31464;
+ public int a31465;
+ public int a31466;
+ public int a31467;
+ public int a31468;
+ public int a31469;
+ public int a31470;
+ public int a31471;
+ public int a31472;
+ public int a31473;
+ public int a31474;
+ public int a31475;
+ public int a31476;
+ public int a31477;
+ public int a31478;
+ public int a31479;
+ public int a31480;
+ public int a31481;
+ public int a31482;
+ public int a31483;
+ public int a31484;
+ public int a31485;
+ public int a31486;
+ public int a31487;
+ public int a31488;
+ public int a31489;
+ public int a31490;
+ public int a31491;
+ public int a31492;
+ public int a31493;
+ public int a31494;
+ public int a31495;
+ public int a31496;
+ public int a31497;
+ public int a31498;
+ public int a31499;
+ public int a31500;
+ public int a31501;
+ public int a31502;
+ public int a31503;
+ public int a31504;
+ public int a31505;
+ public int a31506;
+ public int a31507;
+ public int a31508;
+ public int a31509;
+ public int a31510;
+ public int a31511;
+ public int a31512;
+ public int a31513;
+ public int a31514;
+ public int a31515;
+ public int a31516;
+ public int a31517;
+ public int a31518;
+ public int a31519;
+ public int a31520;
+ public int a31521;
+ public int a31522;
+ public int a31523;
+ public int a31524;
+ public int a31525;
+ public int a31526;
+ public int a31527;
+ public int a31528;
+ public int a31529;
+ public int a31530;
+ public int a31531;
+ public int a31532;
+ public int a31533;
+ public int a31534;
+ public int a31535;
+ public int a31536;
+ public int a31537;
+ public int a31538;
+ public int a31539;
+ public int a31540;
+ public int a31541;
+ public int a31542;
+ public int a31543;
+ public int a31544;
+ public int a31545;
+ public int a31546;
+ public int a31547;
+ public int a31548;
+ public int a31549;
+ public int a31550;
+ public int a31551;
+ public int a31552;
+ public int a31553;
+ public int a31554;
+ public int a31555;
+ public int a31556;
+ public int a31557;
+ public int a31558;
+ public int a31559;
+ public int a31560;
+ public int a31561;
+ public int a31562;
+ public int a31563;
+ public int a31564;
+ public int a31565;
+ public int a31566;
+ public int a31567;
+ public int a31568;
+ public int a31569;
+ public int a31570;
+ public int a31571;
+ public int a31572;
+ public int a31573;
+ public int a31574;
+ public int a31575;
+ public int a31576;
+ public int a31577;
+ public int a31578;
+ public int a31579;
+ public int a31580;
+ public int a31581;
+ public int a31582;
+ public int a31583;
+ public int a31584;
+ public int a31585;
+ public int a31586;
+ public int a31587;
+ public int a31588;
+ public int a31589;
+ public int a31590;
+ public int a31591;
+ public int a31592;
+ public int a31593;
+ public int a31594;
+ public int a31595;
+ public int a31596;
+ public int a31597;
+ public int a31598;
+ public int a31599;
+ public int a31600;
+ public int a31601;
+ public int a31602;
+ public int a31603;
+ public int a31604;
+ public int a31605;
+ public int a31606;
+ public int a31607;
+ public int a31608;
+ public int a31609;
+ public int a31610;
+ public int a31611;
+ public int a31612;
+ public int a31613;
+ public int a31614;
+ public int a31615;
+ public int a31616;
+ public int a31617;
+ public int a31618;
+ public int a31619;
+ public int a31620;
+ public int a31621;
+ public int a31622;
+ public int a31623;
+ public int a31624;
+ public int a31625;
+ public int a31626;
+ public int a31627;
+ public int a31628;
+ public int a31629;
+ public int a31630;
+ public int a31631;
+ public int a31632;
+ public int a31633;
+ public int a31634;
+ public int a31635;
+ public int a31636;
+ public int a31637;
+ public int a31638;
+ public int a31639;
+ public int a31640;
+ public int a31641;
+ public int a31642;
+ public int a31643;
+ public int a31644;
+ public int a31645;
+ public int a31646;
+ public int a31647;
+ public int a31648;
+ public int a31649;
+ public int a31650;
+ public int a31651;
+ public int a31652;
+ public int a31653;
+ public int a31654;
+ public int a31655;
+ public int a31656;
+ public int a31657;
+ public int a31658;
+ public int a31659;
+ public int a31660;
+ public int a31661;
+ public int a31662;
+ public int a31663;
+ public int a31664;
+ public int a31665;
+ public int a31666;
+ public int a31667;
+ public int a31668;
+ public int a31669;
+ public int a31670;
+ public int a31671;
+ public int a31672;
+ public int a31673;
+ public int a31674;
+ public int a31675;
+ public int a31676;
+ public int a31677;
+ public int a31678;
+ public int a31679;
+ public int a31680;
+ public int a31681;
+ public int a31682;
+ public int a31683;
+ public int a31684;
+ public int a31685;
+ public int a31686;
+ public int a31687;
+ public int a31688;
+ public int a31689;
+ public int a31690;
+ public int a31691;
+ public int a31692;
+ public int a31693;
+ public int a31694;
+ public int a31695;
+ public int a31696;
+ public int a31697;
+ public int a31698;
+ public int a31699;
+ public int a31700;
+ public int a31701;
+ public int a31702;
+ public int a31703;
+ public int a31704;
+ public int a31705;
+ public int a31706;
+ public int a31707;
+ public int a31708;
+ public int a31709;
+ public int a31710;
+ public int a31711;
+ public int a31712;
+ public int a31713;
+ public int a31714;
+ public int a31715;
+ public int a31716;
+ public int a31717;
+ public int a31718;
+ public int a31719;
+ public int a31720;
+ public int a31721;
+ public int a31722;
+ public int a31723;
+ public int a31724;
+ public int a31725;
+ public int a31726;
+ public int a31727;
+ public int a31728;
+ public int a31729;
+ public int a31730;
+ public int a31731;
+ public int a31732;
+ public int a31733;
+ public int a31734;
+ public int a31735;
+ public int a31736;
+ public int a31737;
+ public int a31738;
+ public int a31739;
+ public int a31740;
+ public int a31741;
+ public int a31742;
+ public int a31743;
+ public int a31744;
+ public int a31745;
+ public int a31746;
+ public int a31747;
+ public int a31748;
+ public int a31749;
+ public int a31750;
+ public int a31751;
+ public int a31752;
+ public int a31753;
+ public int a31754;
+ public int a31755;
+ public int a31756;
+ public int a31757;
+ public int a31758;
+ public int a31759;
+ public int a31760;
+ public int a31761;
+ public int a31762;
+ public int a31763;
+ public int a31764;
+ public int a31765;
+ public int a31766;
+ public int a31767;
+ public int a31768;
+ public int a31769;
+ public int a31770;
+ public int a31771;
+ public int a31772;
+ public int a31773;
+ public int a31774;
+ public int a31775;
+ public int a31776;
+ public int a31777;
+ public int a31778;
+ public int a31779;
+ public int a31780;
+ public int a31781;
+ public int a31782;
+ public int a31783;
+ public int a31784;
+ public int a31785;
+ public int a31786;
+ public int a31787;
+ public int a31788;
+ public int a31789;
+ public int a31790;
+ public int a31791;
+ public int a31792;
+ public int a31793;
+ public int a31794;
+ public int a31795;
+ public int a31796;
+ public int a31797;
+ public int a31798;
+ public int a31799;
+ public int a31800;
+ public int a31801;
+ public int a31802;
+ public int a31803;
+ public int a31804;
+ public int a31805;
+ public int a31806;
+ public int a31807;
+ public int a31808;
+ public int a31809;
+ public int a31810;
+ public int a31811;
+ public int a31812;
+ public int a31813;
+ public int a31814;
+ public int a31815;
+ public int a31816;
+ public int a31817;
+ public int a31818;
+ public int a31819;
+ public int a31820;
+ public int a31821;
+ public int a31822;
+ public int a31823;
+ public int a31824;
+ public int a31825;
+ public int a31826;
+ public int a31827;
+ public int a31828;
+ public int a31829;
+ public int a31830;
+ public int a31831;
+ public int a31832;
+ public int a31833;
+ public int a31834;
+ public int a31835;
+ public int a31836;
+ public int a31837;
+ public int a31838;
+ public int a31839;
+ public int a31840;
+ public int a31841;
+ public int a31842;
+ public int a31843;
+ public int a31844;
+ public int a31845;
+ public int a31846;
+ public int a31847;
+ public int a31848;
+ public int a31849;
+ public int a31850;
+ public int a31851;
+ public int a31852;
+ public int a31853;
+ public int a31854;
+ public int a31855;
+ public int a31856;
+ public int a31857;
+ public int a31858;
+ public int a31859;
+ public int a31860;
+ public int a31861;
+ public int a31862;
+ public int a31863;
+ public int a31864;
+ public int a31865;
+ public int a31866;
+ public int a31867;
+ public int a31868;
+ public int a31869;
+ public int a31870;
+ public int a31871;
+ public int a31872;
+ public int a31873;
+ public int a31874;
+ public int a31875;
+ public int a31876;
+ public int a31877;
+ public int a31878;
+ public int a31879;
+ public int a31880;
+ public int a31881;
+ public int a31882;
+ public int a31883;
+ public int a31884;
+ public int a31885;
+ public int a31886;
+ public int a31887;
+ public int a31888;
+ public int a31889;
+ public int a31890;
+ public int a31891;
+ public int a31892;
+ public int a31893;
+ public int a31894;
+ public int a31895;
+ public int a31896;
+ public int a31897;
+ public int a31898;
+ public int a31899;
+ public int a31900;
+ public int a31901;
+ public int a31902;
+ public int a31903;
+ public int a31904;
+ public int a31905;
+ public int a31906;
+ public int a31907;
+ public int a31908;
+ public int a31909;
+ public int a31910;
+ public int a31911;
+ public int a31912;
+ public int a31913;
+ public int a31914;
+ public int a31915;
+ public int a31916;
+ public int a31917;
+ public int a31918;
+ public int a31919;
+ public int a31920;
+ public int a31921;
+ public int a31922;
+ public int a31923;
+ public int a31924;
+ public int a31925;
+ public int a31926;
+ public int a31927;
+ public int a31928;
+ public int a31929;
+ public int a31930;
+ public int a31931;
+ public int a31932;
+ public int a31933;
+ public int a31934;
+ public int a31935;
+ public int a31936;
+ public int a31937;
+ public int a31938;
+ public int a31939;
+ public int a31940;
+ public int a31941;
+ public int a31942;
+ public int a31943;
+ public int a31944;
+ public int a31945;
+ public int a31946;
+ public int a31947;
+ public int a31948;
+ public int a31949;
+ public int a31950;
+ public int a31951;
+ public int a31952;
+ public int a31953;
+ public int a31954;
+ public int a31955;
+ public int a31956;
+ public int a31957;
+ public int a31958;
+ public int a31959;
+ public int a31960;
+ public int a31961;
+ public int a31962;
+ public int a31963;
+ public int a31964;
+ public int a31965;
+ public int a31966;
+ public int a31967;
+ public int a31968;
+ public int a31969;
+ public int a31970;
+ public int a31971;
+ public int a31972;
+ public int a31973;
+ public int a31974;
+ public int a31975;
+ public int a31976;
+ public int a31977;
+ public int a31978;
+ public int a31979;
+ public int a31980;
+ public int a31981;
+ public int a31982;
+ public int a31983;
+ public int a31984;
+ public int a31985;
+ public int a31986;
+ public int a31987;
+ public int a31988;
+ public int a31989;
+ public int a31990;
+ public int a31991;
+ public int a31992;
+ public int a31993;
+ public int a31994;
+ public int a31995;
+ public int a31996;
+ public int a31997;
+ public int a31998;
+ public int a31999;
+ public int a32000;
+ public int a32001;
+ public int a32002;
+ public int a32003;
+ public int a32004;
+ public int a32005;
+ public int a32006;
+ public int a32007;
+ public int a32008;
+ public int a32009;
+ public int a32010;
+ public int a32011;
+ public int a32012;
+ public int a32013;
+ public int a32014;
+ public int a32015;
+ public int a32016;
+ public int a32017;
+ public int a32018;
+ public int a32019;
+ public int a32020;
+ public int a32021;
+ public int a32022;
+ public int a32023;
+ public int a32024;
+ public int a32025;
+ public int a32026;
+ public int a32027;
+ public int a32028;
+ public int a32029;
+ public int a32030;
+ public int a32031;
+ public int a32032;
+ public int a32033;
+ public int a32034;
+ public int a32035;
+ public int a32036;
+ public int a32037;
+ public int a32038;
+ public int a32039;
+ public int a32040;
+ public int a32041;
+ public int a32042;
+ public int a32043;
+ public int a32044;
+ public int a32045;
+ public int a32046;
+ public int a32047;
+ public int a32048;
+ public int a32049;
+ public int a32050;
+ public int a32051;
+ public int a32052;
+ public int a32053;
+ public int a32054;
+ public int a32055;
+ public int a32056;
+ public int a32057;
+ public int a32058;
+ public int a32059;
+ public int a32060;
+ public int a32061;
+ public int a32062;
+ public int a32063;
+ public int a32064;
+ public int a32065;
+ public int a32066;
+ public int a32067;
+ public int a32068;
+ public int a32069;
+ public int a32070;
+ public int a32071;
+ public int a32072;
+ public int a32073;
+ public int a32074;
+ public int a32075;
+ public int a32076;
+ public int a32077;
+ public int a32078;
+ public int a32079;
+ public int a32080;
+ public int a32081;
+ public int a32082;
+ public int a32083;
+ public int a32084;
+ public int a32085;
+ public int a32086;
+ public int a32087;
+ public int a32088;
+ public int a32089;
+ public int a32090;
+ public int a32091;
+ public int a32092;
+ public int a32093;
+ public int a32094;
+ public int a32095;
+ public int a32096;
+ public int a32097;
+ public int a32098;
+ public int a32099;
+ public int a32100;
+ public int a32101;
+ public int a32102;
+ public int a32103;
+ public int a32104;
+ public int a32105;
+ public int a32106;
+ public int a32107;
+ public int a32108;
+ public int a32109;
+ public int a32110;
+ public int a32111;
+ public int a32112;
+ public int a32113;
+ public int a32114;
+ public int a32115;
+ public int a32116;
+ public int a32117;
+ public int a32118;
+ public int a32119;
+ public int a32120;
+ public int a32121;
+ public int a32122;
+ public int a32123;
+ public int a32124;
+ public int a32125;
+ public int a32126;
+ public int a32127;
+ public int a32128;
+ public int a32129;
+ public int a32130;
+ public int a32131;
+ public int a32132;
+ public int a32133;
+ public int a32134;
+ public int a32135;
+ public int a32136;
+ public int a32137;
+ public int a32138;
+ public int a32139;
+ public int a32140;
+ public int a32141;
+ public int a32142;
+ public int a32143;
+ public int a32144;
+ public int a32145;
+ public int a32146;
+ public int a32147;
+ public int a32148;
+ public int a32149;
+ public int a32150;
+ public int a32151;
+ public int a32152;
+ public int a32153;
+ public int a32154;
+ public int a32155;
+ public int a32156;
+ public int a32157;
+ public int a32158;
+ public int a32159;
+ public int a32160;
+ public int a32161;
+ public int a32162;
+ public int a32163;
+ public int a32164;
+ public int a32165;
+ public int a32166;
+ public int a32167;
+ public int a32168;
+ public int a32169;
+ public int a32170;
+ public int a32171;
+ public int a32172;
+ public int a32173;
+ public int a32174;
+ public int a32175;
+ public int a32176;
+ public int a32177;
+ public int a32178;
+ public int a32179;
+ public int a32180;
+ public int a32181;
+ public int a32182;
+ public int a32183;
+ public int a32184;
+ public int a32185;
+ public int a32186;
+ public int a32187;
+ public int a32188;
+ public int a32189;
+ public int a32190;
+ public int a32191;
+ public int a32192;
+ public int a32193;
+ public int a32194;
+ public int a32195;
+ public int a32196;
+ public int a32197;
+ public int a32198;
+ public int a32199;
+ public int a32200;
+ public int a32201;
+ public int a32202;
+ public int a32203;
+ public int a32204;
+ public int a32205;
+ public int a32206;
+ public int a32207;
+ public int a32208;
+ public int a32209;
+ public int a32210;
+ public int a32211;
+ public int a32212;
+ public int a32213;
+ public int a32214;
+ public int a32215;
+ public int a32216;
+ public int a32217;
+ public int a32218;
+ public int a32219;
+ public int a32220;
+ public int a32221;
+ public int a32222;
+ public int a32223;
+ public int a32224;
+ public int a32225;
+ public int a32226;
+ public int a32227;
+ public int a32228;
+ public int a32229;
+ public int a32230;
+ public int a32231;
+ public int a32232;
+ public int a32233;
+ public int a32234;
+ public int a32235;
+ public int a32236;
+ public int a32237;
+ public int a32238;
+ public int a32239;
+ public int a32240;
+ public int a32241;
+ public int a32242;
+ public int a32243;
+ public int a32244;
+ public int a32245;
+ public int a32246;
+ public int a32247;
+ public int a32248;
+ public int a32249;
+ public int a32250;
+ public int a32251;
+ public int a32252;
+ public int a32253;
+ public int a32254;
+ public int a32255;
+ public int a32256;
+ public int a32257;
+ public int a32258;
+ public int a32259;
+ public int a32260;
+ public int a32261;
+ public int a32262;
+ public int a32263;
+ public int a32264;
+ public int a32265;
+ public int a32266;
+ public int a32267;
+ public int a32268;
+ public int a32269;
+ public int a32270;
+ public int a32271;
+ public int a32272;
+ public int a32273;
+ public int a32274;
+ public int a32275;
+ public int a32276;
+ public int a32277;
+ public int a32278;
+ public int a32279;
+ public int a32280;
+ public int a32281;
+ public int a32282;
+ public int a32283;
+ public int a32284;
+ public int a32285;
+ public int a32286;
+ public int a32287;
+ public int a32288;
+ public int a32289;
+ public int a32290;
+ public int a32291;
+ public int a32292;
+ public int a32293;
+ public int a32294;
+ public int a32295;
+ public int a32296;
+ public int a32297;
+ public int a32298;
+ public int a32299;
+ public int a32300;
+ public int a32301;
+ public int a32302;
+ public int a32303;
+ public int a32304;
+ public int a32305;
+ public int a32306;
+ public int a32307;
+ public int a32308;
+ public int a32309;
+ public int a32310;
+ public int a32311;
+ public int a32312;
+ public int a32313;
+ public int a32314;
+ public int a32315;
+ public int a32316;
+ public int a32317;
+ public int a32318;
+ public int a32319;
+ public int a32320;
+ public int a32321;
+ public int a32322;
+ public int a32323;
+ public int a32324;
+ public int a32325;
+ public int a32326;
+ public int a32327;
+ public int a32328;
+ public int a32329;
+ public int a32330;
+ public int a32331;
+ public int a32332;
+ public int a32333;
+ public int a32334;
+ public int a32335;
+ public int a32336;
+ public int a32337;
+ public int a32338;
+ public int a32339;
+ public int a32340;
+ public int a32341;
+ public int a32342;
+ public int a32343;
+ public int a32344;
+ public int a32345;
+ public int a32346;
+ public int a32347;
+ public int a32348;
+ public int a32349;
+ public int a32350;
+ public int a32351;
+ public int a32352;
+ public int a32353;
+ public int a32354;
+ public int a32355;
+ public int a32356;
+ public int a32357;
+ public int a32358;
+ public int a32359;
+ public int a32360;
+ public int a32361;
+ public int a32362;
+ public int a32363;
+ public int a32364;
+ public int a32365;
+ public int a32366;
+ public int a32367;
+ public int a32368;
+ public int a32369;
+ public int a32370;
+ public int a32371;
+ public int a32372;
+ public int a32373;
+ public int a32374;
+ public int a32375;
+ public int a32376;
+ public int a32377;
+ public int a32378;
+ public int a32379;
+ public int a32380;
+ public int a32381;
+ public int a32382;
+ public int a32383;
+ public int a32384;
+ public int a32385;
+ public int a32386;
+ public int a32387;
+ public int a32388;
+ public int a32389;
+ public int a32390;
+ public int a32391;
+ public int a32392;
+ public int a32393;
+ public int a32394;
+ public int a32395;
+ public int a32396;
+ public int a32397;
+ public int a32398;
+ public int a32399;
+ public int a32400;
+ public int a32401;
+ public int a32402;
+ public int a32403;
+ public int a32404;
+ public int a32405;
+ public int a32406;
+ public int a32407;
+ public int a32408;
+ public int a32409;
+ public int a32410;
+ public int a32411;
+ public int a32412;
+ public int a32413;
+ public int a32414;
+ public int a32415;
+ public int a32416;
+ public int a32417;
+ public int a32418;
+ public int a32419;
+ public int a32420;
+ public int a32421;
+ public int a32422;
+ public int a32423;
+ public int a32424;
+ public int a32425;
+ public int a32426;
+ public int a32427;
+ public int a32428;
+ public int a32429;
+ public int a32430;
+ public int a32431;
+ public int a32432;
+ public int a32433;
+ public int a32434;
+ public int a32435;
+ public int a32436;
+ public int a32437;
+ public int a32438;
+ public int a32439;
+ public int a32440;
+ public int a32441;
+ public int a32442;
+ public int a32443;
+ public int a32444;
+ public int a32445;
+ public int a32446;
+ public int a32447;
+ public int a32448;
+ public int a32449;
+ public int a32450;
+ public int a32451;
+ public int a32452;
+ public int a32453;
+ public int a32454;
+ public int a32455;
+ public int a32456;
+ public int a32457;
+ public int a32458;
+ public int a32459;
+ public int a32460;
+ public int a32461;
+ public int a32462;
+ public int a32463;
+ public int a32464;
+ public int a32465;
+ public int a32466;
+ public int a32467;
+ public int a32468;
+ public int a32469;
+ public int a32470;
+ public int a32471;
+ public int a32472;
+ public int a32473;
+ public int a32474;
+ public int a32475;
+ public int a32476;
+ public int a32477;
+ public int a32478;
+ public int a32479;
+ public int a32480;
+ public int a32481;
+ public int a32482;
+ public int a32483;
+ public int a32484;
+ public int a32485;
+ public int a32486;
+ public int a32487;
+ public int a32488;
+ public int a32489;
+ public int a32490;
+ public int a32491;
+ public int a32492;
+ public int a32493;
+ public int a32494;
+ public int a32495;
+ public int a32496;
+ public int a32497;
+ public int a32498;
+ public int a32499;
+ public int a32500;
+ public int a32501;
+ public int a32502;
+ public int a32503;
+ public int a32504;
+ public int a32505;
+ public int a32506;
+ public int a32507;
+ public int a32508;
+ public int a32509;
+ public int a32510;
+ public int a32511;
+ public int a32512;
+ public int a32513;
+ public int a32514;
+ public int a32515;
+ public int a32516;
+ public int a32517;
+ public int a32518;
+ public int a32519;
+ public int a32520;
+ public int a32521;
+ public int a32522;
+ public int a32523;
+ public int a32524;
+ public int a32525;
+ public int a32526;
+ public int a32527;
+ public int a32528;
+ public int a32529;
+ public int a32530;
+ public int a32531;
+ public int a32532;
+ public int a32533;
+ public int a32534;
+ public int a32535;
+ public int a32536;
+ public int a32537;
+ public int a32538;
+ public int a32539;
+ public int a32540;
+ public int a32541;
+ public int a32542;
+ public int a32543;
+ public int a32544;
+ public int a32545;
+ public int a32546;
+ public int a32547;
+ public int a32548;
+ public int a32549;
+ public int a32550;
+ public int a32551;
+ public int a32552;
+ public int a32553;
+ public int a32554;
+ public int a32555;
+ public int a32556;
+ public int a32557;
+ public int a32558;
+ public int a32559;
+ public int a32560;
+ public int a32561;
+ public int a32562;
+ public int a32563;
+ public int a32564;
+ public int a32565;
+ public int a32566;
+ public int a32567;
+ public int a32568;
+ public int a32569;
+ public int a32570;
+ public int a32571;
+ public int a32572;
+ public int a32573;
+ public int a32574;
+ public int a32575;
+ public int a32576;
+ public int a32577;
+ public int a32578;
+ public int a32579;
+ public int a32580;
+ public int a32581;
+ public int a32582;
+ public int a32583;
+ public int a32584;
+ public int a32585;
+ public int a32586;
+ public int a32587;
+ public int a32588;
+ public int a32589;
+ public int a32590;
+ public int a32591;
+ public int a32592;
+ public int a32593;
+ public int a32594;
+ public int a32595;
+ public int a32596;
+ public int a32597;
+ public int a32598;
+ public int a32599;
+ public int a32600;
+ public int a32601;
+ public int a32602;
+ public int a32603;
+ public int a32604;
+ public int a32605;
+ public int a32606;
+ public int a32607;
+ public int a32608;
+ public int a32609;
+ public int a32610;
+ public int a32611;
+ public int a32612;
+ public int a32613;
+ public int a32614;
+ public int a32615;
+ public int a32616;
+ public int a32617;
+ public int a32618;
+ public int a32619;
+ public int a32620;
+ public int a32621;
+ public int a32622;
+ public int a32623;
+ public int a32624;
+ public int a32625;
+ public int a32626;
+ public int a32627;
+ public int a32628;
+ public int a32629;
+ public int a32630;
+ public int a32631;
+ public int a32632;
+ public int a32633;
+ public int a32634;
+ public int a32635;
+ public int a32636;
+ public int a32637;
+ public int a32638;
+ public int a32639;
+ public int a32640;
+ public int a32641;
+ public int a32642;
+ public int a32643;
+ public int a32644;
+ public int a32645;
+ public int a32646;
+ public int a32647;
+ public int a32648;
+ public int a32649;
+ public int a32650;
+ public int a32651;
+ public int a32652;
+ public int a32653;
+ public int a32654;
+ public int a32655;
+ public int a32656;
+ public int a32657;
+ public int a32658;
+ public int a32659;
+ public int a32660;
+ public int a32661;
+ public int a32662;
+ public int a32663;
+ public int a32664;
+ public int a32665;
+ public int a32666;
+ public int a32667;
+ public int a32668;
+ public int a32669;
+ public int a32670;
+ public int a32671;
+ public int a32672;
+ public int a32673;
+ public int a32674;
+ public int a32675;
+ public int a32676;
+ public int a32677;
+ public int a32678;
+ public int a32679;
+ public int a32680;
+ public int a32681;
+ public int a32682;
+ public int a32683;
+ public int a32684;
+ public int a32685;
+ public int a32686;
+ public int a32687;
+ public int a32688;
+ public int a32689;
+ public int a32690;
+ public int a32691;
+ public int a32692;
+ public int a32693;
+ public int a32694;
+ public int a32695;
+ public int a32696;
+ public int a32697;
+ public int a32698;
+ public int a32699;
+ public int a32700;
+ public int a32701;
+ public int a32702;
+ public int a32703;
+ public int a32704;
+ public int a32705;
+ public int a32706;
+ public int a32707;
+ public int a32708;
+ public int a32709;
+ public int a32710;
+ public int a32711;
+ public int a32712;
+ public int a32713;
+ public int a32714;
+ public int a32715;
+ public int a32716;
+ public int a32717;
+ public int a32718;
+ public int a32719;
+ public int a32720;
+ public int a32721;
+ public int a32722;
+ public int a32723;
+ public int a32724;
+ public int a32725;
+ public int a32726;
+ public int a32727;
+ public int a32728;
+ public int a32729;
+ public int a32730;
+ public int a32731;
+ public int a32732;
+ public int a32733;
+ public int a32734;
+ public int a32735;
+ public int a32736;
+ public int a32737;
+ public int a32738;
+ public int a32739;
+ public int a32740;
+ public int a32741;
+ public int a32742;
+ public int a32743;
+ public int a32744;
+ public int a32745;
+ public int a32746;
+ public int a32747;
+ public int a32748;
+ public int a32749;
+ public int a32750;
+ public int a32751;
+ public int a32752;
+ public int a32753;
+ public int a32754;
+ public int a32755;
+ public int a32756;
+ public int a32757;
+ public int a32758;
+ public int a32759;
+ public int a32760;
+ public int a32761;
+ public int a32762;
+ public int a32763;
+ public int a32764;
+ public int a32765;
+ public int a32766;
+ public int a32767;
+ int b0;
+ public int b1;
+ public int b2;
+ public int b3;
+ public int b4;
+ public int b5;
+ public int b6;
+ public int b7;
+ public int b8;
+ public int b9;
+ public int b10;
+ public int b11;
+ public int b12;
+ public int b13;
+ public int b14;
+ public int b15;
+ public int b16;
+ public int b17;
+ public int b18;
+ public int b19;
+ public int b20;
+ public int b21;
+ public int b22;
+ public int b23;
+ public int b24;
+ public int b25;
+ public int b26;
+ public int b27;
+ public int b28;
+ public int b29;
+ public int b30;
+ public int b31;
+ public int b32;
+ public int b33;
+ public int b34;
+ public int b35;
+ public int b36;
+ public int b37;
+ public int b38;
+ public int b39;
+ public int b40;
+ public int b41;
+ public int b42;
+ public int b43;
+ public int b44;
+ public int b45;
+ public int b46;
+ public int b47;
+ public int b48;
+ public int b49;
+ public int b50;
+ public int b51;
+ public int b52;
+ public int b53;
+ public int b54;
+ public int b55;
+ public int b56;
+ public int b57;
+ public int b58;
+ public int b59;
+ public int b60;
+ public int b61;
+ public int b62;
+ public int b63;
+ public int b64;
+ public int b65;
+ public int b66;
+ public int b67;
+ public int b68;
+ public int b69;
+ public int b70;
+ public int b71;
+ public int b72;
+ public int b73;
+ public int b74;
+ public int b75;
+ public int b76;
+ public int b77;
+ public int b78;
+ public int b79;
+ public int b80;
+ public int b81;
+ public int b82;
+ public int b83;
+ public int b84;
+ public int b85;
+ public int b86;
+ public int b87;
+ public int b88;
+ public int b89;
+ public int b90;
+ public int b91;
+ public int b92;
+ public int b93;
+ public int b94;
+ public int b95;
+ public int b96;
+ public int b97;
+ public int b98;
+ public int b99;
+ public int b100;
+ public int b101;
+ public int b102;
+ public int b103;
+ public int b104;
+ public int b105;
+ public int b106;
+ public int b107;
+ public int b108;
+ public int b109;
+ public int b110;
+ public int b111;
+ public int b112;
+ public int b113;
+ public int b114;
+ public int b115;
+ public int b116;
+ public int b117;
+ public int b118;
+ public int b119;
+ public int b120;
+ public int b121;
+ public int b122;
+ public int b123;
+ public int b124;
+ public int b125;
+ public int b126;
+ public int b127;
+ public int b128;
+ public int b129;
+ public int b130;
+ public int b131;
+ public int b132;
+ public int b133;
+ public int b134;
+ public int b135;
+ public int b136;
+ public int b137;
+ public int b138;
+ public int b139;
+ public int b140;
+ public int b141;
+ public int b142;
+ public int b143;
+ public int b144;
+ public int b145;
+ public int b146;
+ public int b147;
+ public int b148;
+ public int b149;
+ public int b150;
+ public int b151;
+ public int b152;
+ public int b153;
+ public int b154;
+ public int b155;
+ public int b156;
+ public int b157;
+ public int b158;
+ public int b159;
+ public int b160;
+ public int b161;
+ public int b162;
+ public int b163;
+ public int b164;
+ public int b165;
+ public int b166;
+ public int b167;
+ public int b168;
+ public int b169;
+ public int b170;
+ public int b171;
+ public int b172;
+ public int b173;
+ public int b174;
+ public int b175;
+ public int b176;
+ public int b177;
+ public int b178;
+ public int b179;
+ public int b180;
+ public int b181;
+ public int b182;
+ public int b183;
+ public int b184;
+ public int b185;
+ public int b186;
+ public int b187;
+ public int b188;
+ public int b189;
+ public int b190;
+ public int b191;
+ public int b192;
+ public int b193;
+ public int b194;
+ public int b195;
+ public int b196;
+ public int b197;
+ public int b198;
+ public int b199;
+ public int b200;
+ public int b201;
+ public int b202;
+ public int b203;
+ public int b204;
+ public int b205;
+ public int b206;
+ public int b207;
+ public int b208;
+ public int b209;
+ public int b210;
+ public int b211;
+ public int b212;
+ public int b213;
+ public int b214;
+ public int b215;
+ public int b216;
+ public int b217;
+ public int b218;
+ public int b219;
+ public int b220;
+ public int b221;
+ public int b222;
+ public int b223;
+ public int b224;
+ public int b225;
+ public int b226;
+ public int b227;
+ public int b228;
+ public int b229;
+ public int b230;
+ public int b231;
+ public int b232;
+ public int b233;
+ public int b234;
+ public int b235;
+ public int b236;
+ public int b237;
+ public int b238;
+ public int b239;
+ public int b240;
+ public int b241;
+ public int b242;
+ public int b243;
+ public int b244;
+ public int b245;
+ public int b246;
+ public int b247;
+ public int b248;
+ public int b249;
+ public int b250;
+ public int b251;
+ public int b252;
+ public int b253;
+ public int b254;
+ public int b255;
+ public int b256;
+ public int b257;
+ public int b258;
+ public int b259;
+ public int b260;
+ public int b261;
+ public int b262;
+ public int b263;
+ public int b264;
+ public int b265;
+ public int b266;
+ public int b267;
+ public int b268;
+ public int b269;
+ public int b270;
+ public int b271;
+ public int b272;
+ public int b273;
+ public int b274;
+ public int b275;
+ public int b276;
+ public int b277;
+ public int b278;
+ public int b279;
+ public int b280;
+ public int b281;
+ public int b282;
+ public int b283;
+ public int b284;
+ public int b285;
+ public int b286;
+ public int b287;
+ public int b288;
+ public int b289;
+ public int b290;
+ public int b291;
+ public int b292;
+ public int b293;
+ public int b294;
+ public int b295;
+ public int b296;
+ public int b297;
+ public int b298;
+ public int b299;
+ public int b300;
+ public int b301;
+ public int b302;
+ public int b303;
+ public int b304;
+ public int b305;
+ public int b306;
+ public int b307;
+ public int b308;
+ public int b309;
+ public int b310;
+ public int b311;
+ public int b312;
+ public int b313;
+ public int b314;
+ public int b315;
+ public int b316;
+ public int b317;
+ public int b318;
+ public int b319;
+ public int b320;
+ public int b321;
+ public int b322;
+ public int b323;
+ public int b324;
+ public int b325;
+ public int b326;
+ public int b327;
+ public int b328;
+ public int b329;
+ public int b330;
+ public int b331;
+ public int b332;
+ public int b333;
+ public int b334;
+ public int b335;
+ public int b336;
+ public int b337;
+ public int b338;
+ public int b339;
+ public int b340;
+ public int b341;
+ public int b342;
+ public int b343;
+ public int b344;
+ public int b345;
+ public int b346;
+ public int b347;
+ public int b348;
+ public int b349;
+ public int b350;
+ public int b351;
+ public int b352;
+ public int b353;
+ public int b354;
+ public int b355;
+ public int b356;
+ public int b357;
+ public int b358;
+ public int b359;
+ public int b360;
+ public int b361;
+ public int b362;
+ public int b363;
+ public int b364;
+ public int b365;
+ public int b366;
+ public int b367;
+ public int b368;
+ public int b369;
+ public int b370;
+ public int b371;
+ public int b372;
+ public int b373;
+ public int b374;
+ public int b375;
+ public int b376;
+ public int b377;
+ public int b378;
+ public int b379;
+ public int b380;
+ public int b381;
+ public int b382;
+ public int b383;
+ public int b384;
+ public int b385;
+ public int b386;
+ public int b387;
+ public int b388;
+ public int b389;
+ public int b390;
+ public int b391;
+ public int b392;
+ public int b393;
+ public int b394;
+ public int b395;
+ public int b396;
+ public int b397;
+ public int b398;
+ public int b399;
+ public int b400;
+ public int b401;
+ public int b402;
+ public int b403;
+ public int b404;
+ public int b405;
+ public int b406;
+ public int b407;
+ public int b408;
+ public int b409;
+ public int b410;
+ public int b411;
+ public int b412;
+ public int b413;
+ public int b414;
+ public int b415;
+ public int b416;
+ public int b417;
+ public int b418;
+ public int b419;
+ public int b420;
+ public int b421;
+ public int b422;
+ public int b423;
+ public int b424;
+ public int b425;
+ public int b426;
+ public int b427;
+ public int b428;
+ public int b429;
+ public int b430;
+ public int b431;
+ public int b432;
+ public int b433;
+ public int b434;
+ public int b435;
+ public int b436;
+ public int b437;
+ public int b438;
+ public int b439;
+ public int b440;
+ public int b441;
+ public int b442;
+ public int b443;
+ public int b444;
+ public int b445;
+ public int b446;
+ public int b447;
+ public int b448;
+ public int b449;
+ public int b450;
+ public int b451;
+ public int b452;
+ public int b453;
+ public int b454;
+ public int b455;
+ public int b456;
+ public int b457;
+ public int b458;
+ public int b459;
+ public int b460;
+ public int b461;
+ public int b462;
+ public int b463;
+ public int b464;
+ public int b465;
+ public int b466;
+ public int b467;
+ public int b468;
+ public int b469;
+ public int b470;
+ public int b471;
+ public int b472;
+ public int b473;
+ public int b474;
+ public int b475;
+ public int b476;
+ public int b477;
+ public int b478;
+ public int b479;
+ public int b480;
+ public int b481;
+ public int b482;
+ public int b483;
+ public int b484;
+ public int b485;
+ public int b486;
+ public int b487;
+ public int b488;
+ public int b489;
+ public int b490;
+ public int b491;
+ public int b492;
+ public int b493;
+ public int b494;
+ public int b495;
+ public int b496;
+ public int b497;
+ public int b498;
+ public int b499;
+ public int b500;
+ public int b501;
+ public int b502;
+ public int b503;
+ public int b504;
+ public int b505;
+ public int b506;
+ public int b507;
+ public int b508;
+ public int b509;
+ public int b510;
+ public int b511;
+ public int b512;
+ public int b513;
+ public int b514;
+ public int b515;
+ public int b516;
+ public int b517;
+ public int b518;
+ public int b519;
+ public int b520;
+ public int b521;
+ public int b522;
+ public int b523;
+ public int b524;
+ public int b525;
+ public int b526;
+ public int b527;
+ public int b528;
+ public int b529;
+ public int b530;
+ public int b531;
+ public int b532;
+ public int b533;
+ public int b534;
+ public int b535;
+ public int b536;
+ public int b537;
+ public int b538;
+ public int b539;
+ public int b540;
+ public int b541;
+ public int b542;
+ public int b543;
+ public int b544;
+ public int b545;
+ public int b546;
+ public int b547;
+ public int b548;
+ public int b549;
+ public int b550;
+ public int b551;
+ public int b552;
+ public int b553;
+ public int b554;
+ public int b555;
+ public int b556;
+ public int b557;
+ public int b558;
+ public int b559;
+ public int b560;
+ public int b561;
+ public int b562;
+ public int b563;
+ public int b564;
+ public int b565;
+ public int b566;
+ public int b567;
+ public int b568;
+ public int b569;
+ public int b570;
+ public int b571;
+ public int b572;
+ public int b573;
+ public int b574;
+ public int b575;
+ public int b576;
+ public int b577;
+ public int b578;
+ public int b579;
+ public int b580;
+ public int b581;
+ public int b582;
+ public int b583;
+ public int b584;
+ public int b585;
+ public int b586;
+ public int b587;
+ public int b588;
+ public int b589;
+ public int b590;
+ public int b591;
+ public int b592;
+ public int b593;
+ public int b594;
+ public int b595;
+ public int b596;
+ public int b597;
+ public int b598;
+ public int b599;
+ public int b600;
+ public int b601;
+ public int b602;
+ public int b603;
+ public int b604;
+ public int b605;
+ public int b606;
+ public int b607;
+ public int b608;
+ public int b609;
+ public int b610;
+ public int b611;
+ public int b612;
+ public int b613;
+ public int b614;
+ public int b615;
+ public int b616;
+ public int b617;
+ public int b618;
+ public int b619;
+ public int b620;
+ public int b621;
+ public int b622;
+ public int b623;
+ public int b624;
+ public int b625;
+ public int b626;
+ public int b627;
+ public int b628;
+ public int b629;
+ public int b630;
+ public int b631;
+ public int b632;
+ public int b633;
+ public int b634;
+ public int b635;
+ public int b636;
+ public int b637;
+ public int b638;
+ public int b639;
+ public int b640;
+ public int b641;
+ public int b642;
+ public int b643;
+ public int b644;
+ public int b645;
+ public int b646;
+ public int b647;
+ public int b648;
+ public int b649;
+ public int b650;
+ public int b651;
+ public int b652;
+ public int b653;
+ public int b654;
+ public int b655;
+ public int b656;
+ public int b657;
+ public int b658;
+ public int b659;
+ public int b660;
+ public int b661;
+ public int b662;
+ public int b663;
+ public int b664;
+ public int b665;
+ public int b666;
+ public int b667;
+ public int b668;
+ public int b669;
+ public int b670;
+ public int b671;
+ public int b672;
+ public int b673;
+ public int b674;
+ public int b675;
+ public int b676;
+ public int b677;
+ public int b678;
+ public int b679;
+ public int b680;
+ public int b681;
+ public int b682;
+ public int b683;
+ public int b684;
+ public int b685;
+ public int b686;
+ public int b687;
+ public int b688;
+ public int b689;
+ public int b690;
+ public int b691;
+ public int b692;
+ public int b693;
+ public int b694;
+ public int b695;
+ public int b696;
+ public int b697;
+ public int b698;
+ public int b699;
+ public int b700;
+ public int b701;
+ public int b702;
+ public int b703;
+ public int b704;
+ public int b705;
+ public int b706;
+ public int b707;
+ public int b708;
+ public int b709;
+ public int b710;
+ public int b711;
+ public int b712;
+ public int b713;
+ public int b714;
+ public int b715;
+ public int b716;
+ public int b717;
+ public int b718;
+ public int b719;
+ public int b720;
+ public int b721;
+ public int b722;
+ public int b723;
+ public int b724;
+ public int b725;
+ public int b726;
+ public int b727;
+ public int b728;
+ public int b729;
+ public int b730;
+ public int b731;
+ public int b732;
+ public int b733;
+ public int b734;
+ public int b735;
+ public int b736;
+ public int b737;
+ public int b738;
+ public int b739;
+ public int b740;
+ public int b741;
+ public int b742;
+ public int b743;
+ public int b744;
+ public int b745;
+ public int b746;
+ public int b747;
+ public int b748;
+ public int b749;
+ public int b750;
+ public int b751;
+ public int b752;
+ public int b753;
+ public int b754;
+ public int b755;
+ public int b756;
+ public int b757;
+ public int b758;
+ public int b759;
+ public int b760;
+ public int b761;
+ public int b762;
+ public int b763;
+ public int b764;
+ public int b765;
+ public int b766;
+ public int b767;
+ public int b768;
+ public int b769;
+ public int b770;
+ public int b771;
+ public int b772;
+ public int b773;
+ public int b774;
+ public int b775;
+ public int b776;
+ public int b777;
+ public int b778;
+ public int b779;
+ public int b780;
+ public int b781;
+ public int b782;
+ public int b783;
+ public int b784;
+ public int b785;
+ public int b786;
+ public int b787;
+ public int b788;
+ public int b789;
+ public int b790;
+ public int b791;
+ public int b792;
+ public int b793;
+ public int b794;
+ public int b795;
+ public int b796;
+ public int b797;
+ public int b798;
+ public int b799;
+ public int b800;
+ public int b801;
+ public int b802;
+ public int b803;
+ public int b804;
+ public int b805;
+ public int b806;
+ public int b807;
+ public int b808;
+ public int b809;
+ public int b810;
+ public int b811;
+ public int b812;
+ public int b813;
+ public int b814;
+ public int b815;
+ public int b816;
+ public int b817;
+ public int b818;
+ public int b819;
+ public int b820;
+ public int b821;
+ public int b822;
+ public int b823;
+ public int b824;
+ public int b825;
+ public int b826;
+ public int b827;
+ public int b828;
+ public int b829;
+ public int b830;
+ public int b831;
+ public int b832;
+ public int b833;
+ public int b834;
+ public int b835;
+ public int b836;
+ public int b837;
+ public int b838;
+ public int b839;
+ public int b840;
+ public int b841;
+ public int b842;
+ public int b843;
+ public int b844;
+ public int b845;
+ public int b846;
+ public int b847;
+ public int b848;
+ public int b849;
+ public int b850;
+ public int b851;
+ public int b852;
+ public int b853;
+ public int b854;
+ public int b855;
+ public int b856;
+ public int b857;
+ public int b858;
+ public int b859;
+ public int b860;
+ public int b861;
+ public int b862;
+ public int b863;
+ public int b864;
+ public int b865;
+ public int b866;
+ public int b867;
+ public int b868;
+ public int b869;
+ public int b870;
+ public int b871;
+ public int b872;
+ public int b873;
+ public int b874;
+ public int b875;
+ public int b876;
+ public int b877;
+ public int b878;
+ public int b879;
+ public int b880;
+ public int b881;
+ public int b882;
+ public int b883;
+ public int b884;
+ public int b885;
+ public int b886;
+ public int b887;
+ public int b888;
+ public int b889;
+ public int b890;
+ public int b891;
+ public int b892;
+ public int b893;
+ public int b894;
+ public int b895;
+ public int b896;
+ public int b897;
+ public int b898;
+ public int b899;
+ public int b900;
+ public int b901;
+ public int b902;
+ public int b903;
+ public int b904;
+ public int b905;
+ public int b906;
+ public int b907;
+ public int b908;
+ public int b909;
+ public int b910;
+ public int b911;
+ public int b912;
+ public int b913;
+ public int b914;
+ public int b915;
+ public int b916;
+ public int b917;
+ public int b918;
+ public int b919;
+ public int b920;
+ public int b921;
+ public int b922;
+ public int b923;
+ public int b924;
+ public int b925;
+ public int b926;
+ public int b927;
+ public int b928;
+ public int b929;
+ public int b930;
+ public int b931;
+ public int b932;
+ public int b933;
+ public int b934;
+ public int b935;
+ public int b936;
+ public int b937;
+ public int b938;
+ public int b939;
+ public int b940;
+ public int b941;
+ public int b942;
+ public int b943;
+ public int b944;
+ public int b945;
+ public int b946;
+ public int b947;
+ public int b948;
+ public int b949;
+ public int b950;
+ public int b951;
+ public int b952;
+ public int b953;
+ public int b954;
+ public int b955;
+ public int b956;
+ public int b957;
+ public int b958;
+ public int b959;
+ public int b960;
+ public int b961;
+ public int b962;
+ public int b963;
+ public int b964;
+ public int b965;
+ public int b966;
+ public int b967;
+ public int b968;
+ public int b969;
+ public int b970;
+ public int b971;
+ public int b972;
+ public int b973;
+ public int b974;
+ public int b975;
+ public int b976;
+ public int b977;
+ public int b978;
+ public int b979;
+ public int b980;
+ public int b981;
+ public int b982;
+ public int b983;
+ public int b984;
+ public int b985;
+ public int b986;
+ public int b987;
+ public int b988;
+ public int b989;
+ public int b990;
+ public int b991;
+ public int b992;
+ public int b993;
+ public int b994;
+ public int b995;
+ public int b996;
+ public int b997;
+ public int b998;
+ public int b999;
+ public int b1000;
+ public int b1001;
+ public int b1002;
+ public int b1003;
+ public int b1004;
+ public int b1005;
+ public int b1006;
+ public int b1007;
+ public int b1008;
+ public int b1009;
+ public int b1010;
+ public int b1011;
+ public int b1012;
+ public int b1013;
+ public int b1014;
+ public int b1015;
+ public int b1016;
+ public int b1017;
+ public int b1018;
+ public int b1019;
+ public int b1020;
+ public int b1021;
+ public int b1022;
+ public int b1023;
+ public int b1024;
+ public int b1025;
+ public int b1026;
+ public int b1027;
+ public int b1028;
+ public int b1029;
+ public int b1030;
+ public int b1031;
+ public int b1032;
+ public int b1033;
+ public int b1034;
+ public int b1035;
+ public int b1036;
+ public int b1037;
+ public int b1038;
+ public int b1039;
+ public int b1040;
+ public int b1041;
+ public int b1042;
+ public int b1043;
+ public int b1044;
+ public int b1045;
+ public int b1046;
+ public int b1047;
+ public int b1048;
+ public int b1049;
+ public int b1050;
+ public int b1051;
+ public int b1052;
+ public int b1053;
+ public int b1054;
+ public int b1055;
+ public int b1056;
+ public int b1057;
+ public int b1058;
+ public int b1059;
+ public int b1060;
+ public int b1061;
+ public int b1062;
+ public int b1063;
+ public int b1064;
+ public int b1065;
+ public int b1066;
+ public int b1067;
+ public int b1068;
+ public int b1069;
+ public int b1070;
+ public int b1071;
+ public int b1072;
+ public int b1073;
+ public int b1074;
+ public int b1075;
+ public int b1076;
+ public int b1077;
+ public int b1078;
+ public int b1079;
+ public int b1080;
+ public int b1081;
+ public int b1082;
+ public int b1083;
+ public int b1084;
+ public int b1085;
+ public int b1086;
+ public int b1087;
+ public int b1088;
+ public int b1089;
+ public int b1090;
+ public int b1091;
+ public int b1092;
+ public int b1093;
+ public int b1094;
+ public int b1095;
+ public int b1096;
+ public int b1097;
+ public int b1098;
+ public int b1099;
+ public int b1100;
+ public int b1101;
+ public int b1102;
+ public int b1103;
+ public int b1104;
+ public int b1105;
+ public int b1106;
+ public int b1107;
+ public int b1108;
+ public int b1109;
+ public int b1110;
+ public int b1111;
+ public int b1112;
+ public int b1113;
+ public int b1114;
+ public int b1115;
+ public int b1116;
+ public int b1117;
+ public int b1118;
+ public int b1119;
+ public int b1120;
+ public int b1121;
+ public int b1122;
+ public int b1123;
+ public int b1124;
+ public int b1125;
+ public int b1126;
+ public int b1127;
+ public int b1128;
+ public int b1129;
+ public int b1130;
+ public int b1131;
+ public int b1132;
+ public int b1133;
+ public int b1134;
+ public int b1135;
+ public int b1136;
+ public int b1137;
+ public int b1138;
+ public int b1139;
+ public int b1140;
+ public int b1141;
+ public int b1142;
+ public int b1143;
+ public int b1144;
+ public int b1145;
+ public int b1146;
+ public int b1147;
+ public int b1148;
+ public int b1149;
+ public int b1150;
+ public int b1151;
+ public int b1152;
+ public int b1153;
+ public int b1154;
+ public int b1155;
+ public int b1156;
+ public int b1157;
+ public int b1158;
+ public int b1159;
+ public int b1160;
+ public int b1161;
+ public int b1162;
+ public int b1163;
+ public int b1164;
+ public int b1165;
+ public int b1166;
+ public int b1167;
+ public int b1168;
+ public int b1169;
+ public int b1170;
+ public int b1171;
+ public int b1172;
+ public int b1173;
+ public int b1174;
+ public int b1175;
+ public int b1176;
+ public int b1177;
+ public int b1178;
+ public int b1179;
+ public int b1180;
+ public int b1181;
+ public int b1182;
+ public int b1183;
+ public int b1184;
+ public int b1185;
+ public int b1186;
+ public int b1187;
+ public int b1188;
+ public int b1189;
+ public int b1190;
+ public int b1191;
+ public int b1192;
+ public int b1193;
+ public int b1194;
+ public int b1195;
+ public int b1196;
+ public int b1197;
+ public int b1198;
+ public int b1199;
+ public int b1200;
+ public int b1201;
+ public int b1202;
+ public int b1203;
+ public int b1204;
+ public int b1205;
+ public int b1206;
+ public int b1207;
+ public int b1208;
+ public int b1209;
+ public int b1210;
+ public int b1211;
+ public int b1212;
+ public int b1213;
+ public int b1214;
+ public int b1215;
+ public int b1216;
+ public int b1217;
+ public int b1218;
+ public int b1219;
+ public int b1220;
+ public int b1221;
+ public int b1222;
+ public int b1223;
+ public int b1224;
+ public int b1225;
+ public int b1226;
+ public int b1227;
+ public int b1228;
+ public int b1229;
+ public int b1230;
+ public int b1231;
+ public int b1232;
+ public int b1233;
+ public int b1234;
+ public int b1235;
+ public int b1236;
+ public int b1237;
+ public int b1238;
+ public int b1239;
+ public int b1240;
+ public int b1241;
+ public int b1242;
+ public int b1243;
+ public int b1244;
+ public int b1245;
+ public int b1246;
+ public int b1247;
+ public int b1248;
+ public int b1249;
+ public int b1250;
+ public int b1251;
+ public int b1252;
+ public int b1253;
+ public int b1254;
+ public int b1255;
+ public int b1256;
+ public int b1257;
+ public int b1258;
+ public int b1259;
+ public int b1260;
+ public int b1261;
+ public int b1262;
+ public int b1263;
+ public int b1264;
+ public int b1265;
+ public int b1266;
+ public int b1267;
+ public int b1268;
+ public int b1269;
+ public int b1270;
+ public int b1271;
+ public int b1272;
+ public int b1273;
+ public int b1274;
+ public int b1275;
+ public int b1276;
+ public int b1277;
+ public int b1278;
+ public int b1279;
+ public int b1280;
+ public int b1281;
+ public int b1282;
+ public int b1283;
+ public int b1284;
+ public int b1285;
+ public int b1286;
+ public int b1287;
+ public int b1288;
+ public int b1289;
+ public int b1290;
+ public int b1291;
+ public int b1292;
+ public int b1293;
+ public int b1294;
+ public int b1295;
+ public int b1296;
+ public int b1297;
+ public int b1298;
+ public int b1299;
+ public int b1300;
+ public int b1301;
+ public int b1302;
+ public int b1303;
+ public int b1304;
+ public int b1305;
+ public int b1306;
+ public int b1307;
+ public int b1308;
+ public int b1309;
+ public int b1310;
+ public int b1311;
+ public int b1312;
+ public int b1313;
+ public int b1314;
+ public int b1315;
+ public int b1316;
+ public int b1317;
+ public int b1318;
+ public int b1319;
+ public int b1320;
+ public int b1321;
+ public int b1322;
+ public int b1323;
+ public int b1324;
+ public int b1325;
+ public int b1326;
+ public int b1327;
+ public int b1328;
+ public int b1329;
+ public int b1330;
+ public int b1331;
+ public int b1332;
+ public int b1333;
+ public int b1334;
+ public int b1335;
+ public int b1336;
+ public int b1337;
+ public int b1338;
+ public int b1339;
+ public int b1340;
+ public int b1341;
+ public int b1342;
+ public int b1343;
+ public int b1344;
+ public int b1345;
+ public int b1346;
+ public int b1347;
+ public int b1348;
+ public int b1349;
+ public int b1350;
+ public int b1351;
+ public int b1352;
+ public int b1353;
+ public int b1354;
+ public int b1355;
+ public int b1356;
+ public int b1357;
+ public int b1358;
+ public int b1359;
+ public int b1360;
+ public int b1361;
+ public int b1362;
+ public int b1363;
+ public int b1364;
+ public int b1365;
+ public int b1366;
+ public int b1367;
+ public int b1368;
+ public int b1369;
+ public int b1370;
+ public int b1371;
+ public int b1372;
+ public int b1373;
+ public int b1374;
+ public int b1375;
+ public int b1376;
+ public int b1377;
+ public int b1378;
+ public int b1379;
+ public int b1380;
+ public int b1381;
+ public int b1382;
+ public int b1383;
+ public int b1384;
+ public int b1385;
+ public int b1386;
+ public int b1387;
+ public int b1388;
+ public int b1389;
+ public int b1390;
+ public int b1391;
+ public int b1392;
+ public int b1393;
+ public int b1394;
+ public int b1395;
+ public int b1396;
+ public int b1397;
+ public int b1398;
+ public int b1399;
+ public int b1400;
+ public int b1401;
+ public int b1402;
+ public int b1403;
+ public int b1404;
+ public int b1405;
+ public int b1406;
+ public int b1407;
+ public int b1408;
+ public int b1409;
+ public int b1410;
+ public int b1411;
+ public int b1412;
+ public int b1413;
+ public int b1414;
+ public int b1415;
+ public int b1416;
+ public int b1417;
+ public int b1418;
+ public int b1419;
+ public int b1420;
+ public int b1421;
+ public int b1422;
+ public int b1423;
+ public int b1424;
+ public int b1425;
+ public int b1426;
+ public int b1427;
+ public int b1428;
+ public int b1429;
+ public int b1430;
+ public int b1431;
+ public int b1432;
+ public int b1433;
+ public int b1434;
+ public int b1435;
+ public int b1436;
+ public int b1437;
+ public int b1438;
+ public int b1439;
+ public int b1440;
+ public int b1441;
+ public int b1442;
+ public int b1443;
+ public int b1444;
+ public int b1445;
+ public int b1446;
+ public int b1447;
+ public int b1448;
+ public int b1449;
+ public int b1450;
+ public int b1451;
+ public int b1452;
+ public int b1453;
+ public int b1454;
+ public int b1455;
+ public int b1456;
+ public int b1457;
+ public int b1458;
+ public int b1459;
+ public int b1460;
+ public int b1461;
+ public int b1462;
+ public int b1463;
+ public int b1464;
+ public int b1465;
+ public int b1466;
+ public int b1467;
+ public int b1468;
+ public int b1469;
+ public int b1470;
+ public int b1471;
+ public int b1472;
+ public int b1473;
+ public int b1474;
+ public int b1475;
+ public int b1476;
+ public int b1477;
+ public int b1478;
+ public int b1479;
+ public int b1480;
+ public int b1481;
+ public int b1482;
+ public int b1483;
+ public int b1484;
+ public int b1485;
+ public int b1486;
+ public int b1487;
+ public int b1488;
+ public int b1489;
+ public int b1490;
+ public int b1491;
+ public int b1492;
+ public int b1493;
+ public int b1494;
+ public int b1495;
+ public int b1496;
+ public int b1497;
+ public int b1498;
+ public int b1499;
+ public int b1500;
+ public int b1501;
+ public int b1502;
+ public int b1503;
+ public int b1504;
+ public int b1505;
+ public int b1506;
+ public int b1507;
+ public int b1508;
+ public int b1509;
+ public int b1510;
+ public int b1511;
+ public int b1512;
+ public int b1513;
+ public int b1514;
+ public int b1515;
+ public int b1516;
+ public int b1517;
+ public int b1518;
+ public int b1519;
+ public int b1520;
+ public int b1521;
+ public int b1522;
+ public int b1523;
+ public int b1524;
+ public int b1525;
+ public int b1526;
+ public int b1527;
+ public int b1528;
+ public int b1529;
+ public int b1530;
+ public int b1531;
+ public int b1532;
+ public int b1533;
+ public int b1534;
+ public int b1535;
+ public int b1536;
+ public int b1537;
+ public int b1538;
+ public int b1539;
+ public int b1540;
+ public int b1541;
+ public int b1542;
+ public int b1543;
+ public int b1544;
+ public int b1545;
+ public int b1546;
+ public int b1547;
+ public int b1548;
+ public int b1549;
+ public int b1550;
+ public int b1551;
+ public int b1552;
+ public int b1553;
+ public int b1554;
+ public int b1555;
+ public int b1556;
+ public int b1557;
+ public int b1558;
+ public int b1559;
+ public int b1560;
+ public int b1561;
+ public int b1562;
+ public int b1563;
+ public int b1564;
+ public int b1565;
+ public int b1566;
+ public int b1567;
+ public int b1568;
+ public int b1569;
+ public int b1570;
+ public int b1571;
+ public int b1572;
+ public int b1573;
+ public int b1574;
+ public int b1575;
+ public int b1576;
+ public int b1577;
+ public int b1578;
+ public int b1579;
+ public int b1580;
+ public int b1581;
+ public int b1582;
+ public int b1583;
+ public int b1584;
+ public int b1585;
+ public int b1586;
+ public int b1587;
+ public int b1588;
+ public int b1589;
+ public int b1590;
+ public int b1591;
+ public int b1592;
+ public int b1593;
+ public int b1594;
+ public int b1595;
+ public int b1596;
+ public int b1597;
+ public int b1598;
+ public int b1599;
+ public int b1600;
+ public int b1601;
+ public int b1602;
+ public int b1603;
+ public int b1604;
+ public int b1605;
+ public int b1606;
+ public int b1607;
+ public int b1608;
+ public int b1609;
+ public int b1610;
+ public int b1611;
+ public int b1612;
+ public int b1613;
+ public int b1614;
+ public int b1615;
+ public int b1616;
+ public int b1617;
+ public int b1618;
+ public int b1619;
+ public int b1620;
+ public int b1621;
+ public int b1622;
+ public int b1623;
+ public int b1624;
+ public int b1625;
+ public int b1626;
+ public int b1627;
+ public int b1628;
+ public int b1629;
+ public int b1630;
+ public int b1631;
+ public int b1632;
+ public int b1633;
+ public int b1634;
+ public int b1635;
+ public int b1636;
+ public int b1637;
+ public int b1638;
+ public int b1639;
+ public int b1640;
+ public int b1641;
+ public int b1642;
+ public int b1643;
+ public int b1644;
+ public int b1645;
+ public int b1646;
+ public int b1647;
+ public int b1648;
+ public int b1649;
+ public int b1650;
+ public int b1651;
+ public int b1652;
+ public int b1653;
+ public int b1654;
+ public int b1655;
+ public int b1656;
+ public int b1657;
+ public int b1658;
+ public int b1659;
+ public int b1660;
+ public int b1661;
+ public int b1662;
+ public int b1663;
+ public int b1664;
+ public int b1665;
+ public int b1666;
+ public int b1667;
+ public int b1668;
+ public int b1669;
+ public int b1670;
+ public int b1671;
+ public int b1672;
+ public int b1673;
+ public int b1674;
+ public int b1675;
+ public int b1676;
+ public int b1677;
+ public int b1678;
+ public int b1679;
+ public int b1680;
+ public int b1681;
+ public int b1682;
+ public int b1683;
+ public int b1684;
+ public int b1685;
+ public int b1686;
+ public int b1687;
+ public int b1688;
+ public int b1689;
+ public int b1690;
+ public int b1691;
+ public int b1692;
+ public int b1693;
+ public int b1694;
+ public int b1695;
+ public int b1696;
+ public int b1697;
+ public int b1698;
+ public int b1699;
+ public int b1700;
+ public int b1701;
+ public int b1702;
+ public int b1703;
+ public int b1704;
+ public int b1705;
+ public int b1706;
+ public int b1707;
+ public int b1708;
+ public int b1709;
+ public int b1710;
+ public int b1711;
+ public int b1712;
+ public int b1713;
+ public int b1714;
+ public int b1715;
+ public int b1716;
+ public int b1717;
+ public int b1718;
+ public int b1719;
+ public int b1720;
+ public int b1721;
+ public int b1722;
+ public int b1723;
+ public int b1724;
+ public int b1725;
+ public int b1726;
+ public int b1727;
+ public int b1728;
+ public int b1729;
+ public int b1730;
+ public int b1731;
+ public int b1732;
+ public int b1733;
+ public int b1734;
+ public int b1735;
+ public int b1736;
+ public int b1737;
+ public int b1738;
+ public int b1739;
+ public int b1740;
+ public int b1741;
+ public int b1742;
+ public int b1743;
+ public int b1744;
+ public int b1745;
+ public int b1746;
+ public int b1747;
+ public int b1748;
+ public int b1749;
+ public int b1750;
+ public int b1751;
+ public int b1752;
+ public int b1753;
+ public int b1754;
+ public int b1755;
+ public int b1756;
+ public int b1757;
+ public int b1758;
+ public int b1759;
+ public int b1760;
+ public int b1761;
+ public int b1762;
+ public int b1763;
+ public int b1764;
+ public int b1765;
+ public int b1766;
+ public int b1767;
+ public int b1768;
+ public int b1769;
+ public int b1770;
+ public int b1771;
+ public int b1772;
+ public int b1773;
+ public int b1774;
+ public int b1775;
+ public int b1776;
+ public int b1777;
+ public int b1778;
+ public int b1779;
+ public int b1780;
+ public int b1781;
+ public int b1782;
+ public int b1783;
+ public int b1784;
+ public int b1785;
+ public int b1786;
+ public int b1787;
+ public int b1788;
+ public int b1789;
+ public int b1790;
+ public int b1791;
+ public int b1792;
+ public int b1793;
+ public int b1794;
+ public int b1795;
+ public int b1796;
+ public int b1797;
+ public int b1798;
+ public int b1799;
+ public int b1800;
+ public int b1801;
+ public int b1802;
+ public int b1803;
+ public int b1804;
+ public int b1805;
+ public int b1806;
+ public int b1807;
+ public int b1808;
+ public int b1809;
+ public int b1810;
+ public int b1811;
+ public int b1812;
+ public int b1813;
+ public int b1814;
+ public int b1815;
+ public int b1816;
+ public int b1817;
+ public int b1818;
+ public int b1819;
+ public int b1820;
+ public int b1821;
+ public int b1822;
+ public int b1823;
+ public int b1824;
+ public int b1825;
+ public int b1826;
+ public int b1827;
+ public int b1828;
+ public int b1829;
+ public int b1830;
+ public int b1831;
+ public int b1832;
+ public int b1833;
+ public int b1834;
+ public int b1835;
+ public int b1836;
+ public int b1837;
+ public int b1838;
+ public int b1839;
+ public int b1840;
+ public int b1841;
+ public int b1842;
+ public int b1843;
+ public int b1844;
+ public int b1845;
+ public int b1846;
+ public int b1847;
+ public int b1848;
+ public int b1849;
+ public int b1850;
+ public int b1851;
+ public int b1852;
+ public int b1853;
+ public int b1854;
+ public int b1855;
+ public int b1856;
+ public int b1857;
+ public int b1858;
+ public int b1859;
+ public int b1860;
+ public int b1861;
+ public int b1862;
+ public int b1863;
+ public int b1864;
+ public int b1865;
+ public int b1866;
+ public int b1867;
+ public int b1868;
+ public int b1869;
+ public int b1870;
+ public int b1871;
+ public int b1872;
+ public int b1873;
+ public int b1874;
+ public int b1875;
+ public int b1876;
+ public int b1877;
+ public int b1878;
+ public int b1879;
+ public int b1880;
+ public int b1881;
+ public int b1882;
+ public int b1883;
+ public int b1884;
+ public int b1885;
+ public int b1886;
+ public int b1887;
+ public int b1888;
+ public int b1889;
+ public int b1890;
+ public int b1891;
+ public int b1892;
+ public int b1893;
+ public int b1894;
+ public int b1895;
+ public int b1896;
+ public int b1897;
+ public int b1898;
+ public int b1899;
+ public int b1900;
+ public int b1901;
+ public int b1902;
+ public int b1903;
+ public int b1904;
+ public int b1905;
+ public int b1906;
+ public int b1907;
+ public int b1908;
+ public int b1909;
+ public int b1910;
+ public int b1911;
+ public int b1912;
+ public int b1913;
+ public int b1914;
+ public int b1915;
+ public int b1916;
+ public int b1917;
+ public int b1918;
+ public int b1919;
+ public int b1920;
+ public int b1921;
+ public int b1922;
+ public int b1923;
+ public int b1924;
+ public int b1925;
+ public int b1926;
+ public int b1927;
+ public int b1928;
+ public int b1929;
+ public int b1930;
+ public int b1931;
+ public int b1932;
+ public int b1933;
+ public int b1934;
+ public int b1935;
+ public int b1936;
+ public int b1937;
+ public int b1938;
+ public int b1939;
+ public int b1940;
+ public int b1941;
+ public int b1942;
+ public int b1943;
+ public int b1944;
+ public int b1945;
+ public int b1946;
+ public int b1947;
+ public int b1948;
+ public int b1949;
+ public int b1950;
+ public int b1951;
+ public int b1952;
+ public int b1953;
+ public int b1954;
+ public int b1955;
+ public int b1956;
+ public int b1957;
+ public int b1958;
+ public int b1959;
+ public int b1960;
+ public int b1961;
+ public int b1962;
+ public int b1963;
+ public int b1964;
+ public int b1965;
+ public int b1966;
+ public int b1967;
+ public int b1968;
+ public int b1969;
+ public int b1970;
+ public int b1971;
+ public int b1972;
+ public int b1973;
+ public int b1974;
+ public int b1975;
+ public int b1976;
+ public int b1977;
+ public int b1978;
+ public int b1979;
+ public int b1980;
+ public int b1981;
+ public int b1982;
+ public int b1983;
+ public int b1984;
+ public int b1985;
+ public int b1986;
+ public int b1987;
+ public int b1988;
+ public int b1989;
+ public int b1990;
+ public int b1991;
+ public int b1992;
+ public int b1993;
+ public int b1994;
+ public int b1995;
+ public int b1996;
+ public int b1997;
+ public int b1998;
+ public int b1999;
+ public int b2000;
+ public int b2001;
+ public int b2002;
+ public int b2003;
+ public int b2004;
+ public int b2005;
+ public int b2006;
+ public int b2007;
+ public int b2008;
+ public int b2009;
+ public int b2010;
+ public int b2011;
+ public int b2012;
+ public int b2013;
+ public int b2014;
+ public int b2015;
+ public int b2016;
+ public int b2017;
+ public int b2018;
+ public int b2019;
+ public int b2020;
+ public int b2021;
+ public int b2022;
+ public int b2023;
+ public int b2024;
+ public int b2025;
+ public int b2026;
+ public int b2027;
+ public int b2028;
+ public int b2029;
+ public int b2030;
+ public int b2031;
+ public int b2032;
+ public int b2033;
+ public int b2034;
+ public int b2035;
+ public int b2036;
+ public int b2037;
+ public int b2038;
+ public int b2039;
+ public int b2040;
+ public int b2041;
+ public int b2042;
+ public int b2043;
+ public int b2044;
+ public int b2045;
+ public int b2046;
+ public int b2047;
+ public int b2048;
+ public int b2049;
+ public int b2050;
+ public int b2051;
+ public int b2052;
+ public int b2053;
+ public int b2054;
+ public int b2055;
+ public int b2056;
+ public int b2057;
+ public int b2058;
+ public int b2059;
+ public int b2060;
+ public int b2061;
+ public int b2062;
+ public int b2063;
+ public int b2064;
+ public int b2065;
+ public int b2066;
+ public int b2067;
+ public int b2068;
+ public int b2069;
+ public int b2070;
+ public int b2071;
+ public int b2072;
+ public int b2073;
+ public int b2074;
+ public int b2075;
+ public int b2076;
+ public int b2077;
+ public int b2078;
+ public int b2079;
+ public int b2080;
+ public int b2081;
+ public int b2082;
+ public int b2083;
+ public int b2084;
+ public int b2085;
+ public int b2086;
+ public int b2087;
+ public int b2088;
+ public int b2089;
+ public int b2090;
+ public int b2091;
+ public int b2092;
+ public int b2093;
+ public int b2094;
+ public int b2095;
+ public int b2096;
+ public int b2097;
+ public int b2098;
+ public int b2099;
+ public int b2100;
+ public int b2101;
+ public int b2102;
+ public int b2103;
+ public int b2104;
+ public int b2105;
+ public int b2106;
+ public int b2107;
+ public int b2108;
+ public int b2109;
+ public int b2110;
+ public int b2111;
+ public int b2112;
+ public int b2113;
+ public int b2114;
+ public int b2115;
+ public int b2116;
+ public int b2117;
+ public int b2118;
+ public int b2119;
+ public int b2120;
+ public int b2121;
+ public int b2122;
+ public int b2123;
+ public int b2124;
+ public int b2125;
+ public int b2126;
+ public int b2127;
+ public int b2128;
+ public int b2129;
+ public int b2130;
+ public int b2131;
+ public int b2132;
+ public int b2133;
+ public int b2134;
+ public int b2135;
+ public int b2136;
+ public int b2137;
+ public int b2138;
+ public int b2139;
+ public int b2140;
+ public int b2141;
+ public int b2142;
+ public int b2143;
+ public int b2144;
+ public int b2145;
+ public int b2146;
+ public int b2147;
+ public int b2148;
+ public int b2149;
+ public int b2150;
+ public int b2151;
+ public int b2152;
+ public int b2153;
+ public int b2154;
+ public int b2155;
+ public int b2156;
+ public int b2157;
+ public int b2158;
+ public int b2159;
+ public int b2160;
+ public int b2161;
+ public int b2162;
+ public int b2163;
+ public int b2164;
+ public int b2165;
+ public int b2166;
+ public int b2167;
+ public int b2168;
+ public int b2169;
+ public int b2170;
+ public int b2171;
+ public int b2172;
+ public int b2173;
+ public int b2174;
+ public int b2175;
+ public int b2176;
+ public int b2177;
+ public int b2178;
+ public int b2179;
+ public int b2180;
+ public int b2181;
+ public int b2182;
+ public int b2183;
+ public int b2184;
+ public int b2185;
+ public int b2186;
+ public int b2187;
+ public int b2188;
+ public int b2189;
+ public int b2190;
+ public int b2191;
+ public int b2192;
+ public int b2193;
+ public int b2194;
+ public int b2195;
+ public int b2196;
+ public int b2197;
+ public int b2198;
+ public int b2199;
+ public int b2200;
+ public int b2201;
+ public int b2202;
+ public int b2203;
+ public int b2204;
+ public int b2205;
+ public int b2206;
+ public int b2207;
+ public int b2208;
+ public int b2209;
+ public int b2210;
+ public int b2211;
+ public int b2212;
+ public int b2213;
+ public int b2214;
+ public int b2215;
+ public int b2216;
+ public int b2217;
+ public int b2218;
+ public int b2219;
+ public int b2220;
+ public int b2221;
+ public int b2222;
+ public int b2223;
+ public int b2224;
+ public int b2225;
+ public int b2226;
+ public int b2227;
+ public int b2228;
+ public int b2229;
+ public int b2230;
+ public int b2231;
+ public int b2232;
+ public int b2233;
+ public int b2234;
+ public int b2235;
+ public int b2236;
+ public int b2237;
+ public int b2238;
+ public int b2239;
+ public int b2240;
+ public int b2241;
+ public int b2242;
+ public int b2243;
+ public int b2244;
+ public int b2245;
+ public int b2246;
+ public int b2247;
+ public int b2248;
+ public int b2249;
+ public int b2250;
+ public int b2251;
+ public int b2252;
+ public int b2253;
+ public int b2254;
+ public int b2255;
+ public int b2256;
+ public int b2257;
+ public int b2258;
+ public int b2259;
+ public int b2260;
+ public int b2261;
+ public int b2262;
+ public int b2263;
+ public int b2264;
+ public int b2265;
+ public int b2266;
+ public int b2267;
+ public int b2268;
+ public int b2269;
+ public int b2270;
+ public int b2271;
+ public int b2272;
+ public int b2273;
+ public int b2274;
+ public int b2275;
+ public int b2276;
+ public int b2277;
+ public int b2278;
+ public int b2279;
+ public int b2280;
+ public int b2281;
+ public int b2282;
+ public int b2283;
+ public int b2284;
+ public int b2285;
+ public int b2286;
+ public int b2287;
+ public int b2288;
+ public int b2289;
+ public int b2290;
+ public int b2291;
+ public int b2292;
+ public int b2293;
+ public int b2294;
+ public int b2295;
+ public int b2296;
+ public int b2297;
+ public int b2298;
+ public int b2299;
+ public int b2300;
+ public int b2301;
+ public int b2302;
+ public int b2303;
+ public int b2304;
+ public int b2305;
+ public int b2306;
+ public int b2307;
+ public int b2308;
+ public int b2309;
+ public int b2310;
+ public int b2311;
+ public int b2312;
+ public int b2313;
+ public int b2314;
+ public int b2315;
+ public int b2316;
+ public int b2317;
+ public int b2318;
+ public int b2319;
+ public int b2320;
+ public int b2321;
+ public int b2322;
+ public int b2323;
+ public int b2324;
+ public int b2325;
+ public int b2326;
+ public int b2327;
+ public int b2328;
+ public int b2329;
+ public int b2330;
+ public int b2331;
+ public int b2332;
+ public int b2333;
+ public int b2334;
+ public int b2335;
+ public int b2336;
+ public int b2337;
+ public int b2338;
+ public int b2339;
+ public int b2340;
+ public int b2341;
+ public int b2342;
+ public int b2343;
+ public int b2344;
+ public int b2345;
+ public int b2346;
+ public int b2347;
+ public int b2348;
+ public int b2349;
+ public int b2350;
+ public int b2351;
+ public int b2352;
+ public int b2353;
+ public int b2354;
+ public int b2355;
+ public int b2356;
+ public int b2357;
+ public int b2358;
+ public int b2359;
+ public int b2360;
+ public int b2361;
+ public int b2362;
+ public int b2363;
+ public int b2364;
+ public int b2365;
+ public int b2366;
+ public int b2367;
+ public int b2368;
+ public int b2369;
+ public int b2370;
+ public int b2371;
+ public int b2372;
+ public int b2373;
+ public int b2374;
+ public int b2375;
+ public int b2376;
+ public int b2377;
+ public int b2378;
+ public int b2379;
+ public int b2380;
+ public int b2381;
+ public int b2382;
+ public int b2383;
+ public int b2384;
+ public int b2385;
+ public int b2386;
+ public int b2387;
+ public int b2388;
+ public int b2389;
+ public int b2390;
+ public int b2391;
+ public int b2392;
+ public int b2393;
+ public int b2394;
+ public int b2395;
+ public int b2396;
+ public int b2397;
+ public int b2398;
+ public int b2399;
+ public int b2400;
+ public int b2401;
+ public int b2402;
+ public int b2403;
+ public int b2404;
+ public int b2405;
+ public int b2406;
+ public int b2407;
+ public int b2408;
+ public int b2409;
+ public int b2410;
+ public int b2411;
+ public int b2412;
+ public int b2413;
+ public int b2414;
+ public int b2415;
+ public int b2416;
+ public int b2417;
+ public int b2418;
+ public int b2419;
+ public int b2420;
+ public int b2421;
+ public int b2422;
+ public int b2423;
+ public int b2424;
+ public int b2425;
+ public int b2426;
+ public int b2427;
+ public int b2428;
+ public int b2429;
+ public int b2430;
+ public int b2431;
+ public int b2432;
+ public int b2433;
+ public int b2434;
+ public int b2435;
+ public int b2436;
+ public int b2437;
+ public int b2438;
+ public int b2439;
+ public int b2440;
+ public int b2441;
+ public int b2442;
+ public int b2443;
+ public int b2444;
+ public int b2445;
+ public int b2446;
+ public int b2447;
+ public int b2448;
+ public int b2449;
+ public int b2450;
+ public int b2451;
+ public int b2452;
+ public int b2453;
+ public int b2454;
+ public int b2455;
+ public int b2456;
+ public int b2457;
+ public int b2458;
+ public int b2459;
+ public int b2460;
+ public int b2461;
+ public int b2462;
+ public int b2463;
+ public int b2464;
+ public int b2465;
+ public int b2466;
+ public int b2467;
+ public int b2468;
+ public int b2469;
+ public int b2470;
+ public int b2471;
+ public int b2472;
+ public int b2473;
+ public int b2474;
+ public int b2475;
+ public int b2476;
+ public int b2477;
+ public int b2478;
+ public int b2479;
+ public int b2480;
+ public int b2481;
+ public int b2482;
+ public int b2483;
+ public int b2484;
+ public int b2485;
+ public int b2486;
+ public int b2487;
+ public int b2488;
+ public int b2489;
+ public int b2490;
+ public int b2491;
+ public int b2492;
+ public int b2493;
+ public int b2494;
+ public int b2495;
+ public int b2496;
+ public int b2497;
+ public int b2498;
+ public int b2499;
+ public int b2500;
+ public int b2501;
+ public int b2502;
+ public int b2503;
+ public int b2504;
+ public int b2505;
+ public int b2506;
+ public int b2507;
+ public int b2508;
+ public int b2509;
+ public int b2510;
+ public int b2511;
+ public int b2512;
+ public int b2513;
+ public int b2514;
+ public int b2515;
+ public int b2516;
+ public int b2517;
+ public int b2518;
+ public int b2519;
+ public int b2520;
+ public int b2521;
+ public int b2522;
+ public int b2523;
+ public int b2524;
+ public int b2525;
+ public int b2526;
+ public int b2527;
+ public int b2528;
+ public int b2529;
+ public int b2530;
+ public int b2531;
+ public int b2532;
+ public int b2533;
+ public int b2534;
+ public int b2535;
+ public int b2536;
+ public int b2537;
+ public int b2538;
+ public int b2539;
+ public int b2540;
+ public int b2541;
+ public int b2542;
+ public int b2543;
+ public int b2544;
+ public int b2545;
+ public int b2546;
+ public int b2547;
+ public int b2548;
+ public int b2549;
+ public int b2550;
+ public int b2551;
+ public int b2552;
+ public int b2553;
+ public int b2554;
+ public int b2555;
+ public int b2556;
+ public int b2557;
+ public int b2558;
+ public int b2559;
+ public int b2560;
+ public int b2561;
+ public int b2562;
+ public int b2563;
+ public int b2564;
+ public int b2565;
+ public int b2566;
+ public int b2567;
+ public int b2568;
+ public int b2569;
+ public int b2570;
+ public int b2571;
+ public int b2572;
+ public int b2573;
+ public int b2574;
+ public int b2575;
+ public int b2576;
+ public int b2577;
+ public int b2578;
+ public int b2579;
+ public int b2580;
+ public int b2581;
+ public int b2582;
+ public int b2583;
+ public int b2584;
+ public int b2585;
+ public int b2586;
+ public int b2587;
+ public int b2588;
+ public int b2589;
+ public int b2590;
+ public int b2591;
+ public int b2592;
+ public int b2593;
+ public int b2594;
+ public int b2595;
+ public int b2596;
+ public int b2597;
+ public int b2598;
+ public int b2599;
+ public int b2600;
+ public int b2601;
+ public int b2602;
+ public int b2603;
+ public int b2604;
+ public int b2605;
+ public int b2606;
+ public int b2607;
+ public int b2608;
+ public int b2609;
+ public int b2610;
+ public int b2611;
+ public int b2612;
+ public int b2613;
+ public int b2614;
+ public int b2615;
+ public int b2616;
+ public int b2617;
+ public int b2618;
+ public int b2619;
+ public int b2620;
+ public int b2621;
+ public int b2622;
+ public int b2623;
+ public int b2624;
+ public int b2625;
+ public int b2626;
+ public int b2627;
+ public int b2628;
+ public int b2629;
+ public int b2630;
+ public int b2631;
+ public int b2632;
+ public int b2633;
+ public int b2634;
+ public int b2635;
+ public int b2636;
+ public int b2637;
+ public int b2638;
+ public int b2639;
+ public int b2640;
+ public int b2641;
+ public int b2642;
+ public int b2643;
+ public int b2644;
+ public int b2645;
+ public int b2646;
+ public int b2647;
+ public int b2648;
+ public int b2649;
+ public int b2650;
+ public int b2651;
+ public int b2652;
+ public int b2653;
+ public int b2654;
+ public int b2655;
+ public int b2656;
+ public int b2657;
+ public int b2658;
+ public int b2659;
+ public int b2660;
+ public int b2661;
+ public int b2662;
+ public int b2663;
+ public int b2664;
+ public int b2665;
+ public int b2666;
+ public int b2667;
+ public int b2668;
+ public int b2669;
+ public int b2670;
+ public int b2671;
+ public int b2672;
+ public int b2673;
+ public int b2674;
+ public int b2675;
+ public int b2676;
+ public int b2677;
+ public int b2678;
+ public int b2679;
+ public int b2680;
+ public int b2681;
+ public int b2682;
+ public int b2683;
+ public int b2684;
+ public int b2685;
+ public int b2686;
+ public int b2687;
+ public int b2688;
+ public int b2689;
+ public int b2690;
+ public int b2691;
+ public int b2692;
+ public int b2693;
+ public int b2694;
+ public int b2695;
+ public int b2696;
+ public int b2697;
+ public int b2698;
+ public int b2699;
+ public int b2700;
+ public int b2701;
+ public int b2702;
+ public int b2703;
+ public int b2704;
+ public int b2705;
+ public int b2706;
+ public int b2707;
+ public int b2708;
+ public int b2709;
+ public int b2710;
+ public int b2711;
+ public int b2712;
+ public int b2713;
+ public int b2714;
+ public int b2715;
+ public int b2716;
+ public int b2717;
+ public int b2718;
+ public int b2719;
+ public int b2720;
+ public int b2721;
+ public int b2722;
+ public int b2723;
+ public int b2724;
+ public int b2725;
+ public int b2726;
+ public int b2727;
+ public int b2728;
+ public int b2729;
+ public int b2730;
+ public int b2731;
+ public int b2732;
+ public int b2733;
+ public int b2734;
+ public int b2735;
+ public int b2736;
+ public int b2737;
+ public int b2738;
+ public int b2739;
+ public int b2740;
+ public int b2741;
+ public int b2742;
+ public int b2743;
+ public int b2744;
+ public int b2745;
+ public int b2746;
+ public int b2747;
+ public int b2748;
+ public int b2749;
+ public int b2750;
+ public int b2751;
+ public int b2752;
+ public int b2753;
+ public int b2754;
+ public int b2755;
+ public int b2756;
+ public int b2757;
+ public int b2758;
+ public int b2759;
+ public int b2760;
+ public int b2761;
+ public int b2762;
+ public int b2763;
+ public int b2764;
+ public int b2765;
+ public int b2766;
+ public int b2767;
+ public int b2768;
+ public int b2769;
+ public int b2770;
+ public int b2771;
+ public int b2772;
+ public int b2773;
+ public int b2774;
+ public int b2775;
+ public int b2776;
+ public int b2777;
+ public int b2778;
+ public int b2779;
+ public int b2780;
+ public int b2781;
+ public int b2782;
+ public int b2783;
+ public int b2784;
+ public int b2785;
+ public int b2786;
+ public int b2787;
+ public int b2788;
+ public int b2789;
+ public int b2790;
+ public int b2791;
+ public int b2792;
+ public int b2793;
+ public int b2794;
+ public int b2795;
+ public int b2796;
+ public int b2797;
+ public int b2798;
+ public int b2799;
+ public int b2800;
+ public int b2801;
+ public int b2802;
+ public int b2803;
+ public int b2804;
+ public int b2805;
+ public int b2806;
+ public int b2807;
+ public int b2808;
+ public int b2809;
+ public int b2810;
+ public int b2811;
+ public int b2812;
+ public int b2813;
+ public int b2814;
+ public int b2815;
+ public int b2816;
+ public int b2817;
+ public int b2818;
+ public int b2819;
+ public int b2820;
+ public int b2821;
+ public int b2822;
+ public int b2823;
+ public int b2824;
+ public int b2825;
+ public int b2826;
+ public int b2827;
+ public int b2828;
+ public int b2829;
+ public int b2830;
+ public int b2831;
+ public int b2832;
+ public int b2833;
+ public int b2834;
+ public int b2835;
+ public int b2836;
+ public int b2837;
+ public int b2838;
+ public int b2839;
+ public int b2840;
+ public int b2841;
+ public int b2842;
+ public int b2843;
+ public int b2844;
+ public int b2845;
+ public int b2846;
+ public int b2847;
+ public int b2848;
+ public int b2849;
+ public int b2850;
+ public int b2851;
+ public int b2852;
+ public int b2853;
+ public int b2854;
+ public int b2855;
+ public int b2856;
+ public int b2857;
+ public int b2858;
+ public int b2859;
+ public int b2860;
+ public int b2861;
+ public int b2862;
+ public int b2863;
+ public int b2864;
+ public int b2865;
+ public int b2866;
+ public int b2867;
+ public int b2868;
+ public int b2869;
+ public int b2870;
+ public int b2871;
+ public int b2872;
+ public int b2873;
+ public int b2874;
+ public int b2875;
+ public int b2876;
+ public int b2877;
+ public int b2878;
+ public int b2879;
+ public int b2880;
+ public int b2881;
+ public int b2882;
+ public int b2883;
+ public int b2884;
+ public int b2885;
+ public int b2886;
+ public int b2887;
+ public int b2888;
+ public int b2889;
+ public int b2890;
+ public int b2891;
+ public int b2892;
+ public int b2893;
+ public int b2894;
+ public int b2895;
+ public int b2896;
+ public int b2897;
+ public int b2898;
+ public int b2899;
+ public int b2900;
+ public int b2901;
+ public int b2902;
+ public int b2903;
+ public int b2904;
+ public int b2905;
+ public int b2906;
+ public int b2907;
+ public int b2908;
+ public int b2909;
+ public int b2910;
+ public int b2911;
+ public int b2912;
+ public int b2913;
+ public int b2914;
+ public int b2915;
+ public int b2916;
+ public int b2917;
+ public int b2918;
+ public int b2919;
+ public int b2920;
+ public int b2921;
+ public int b2922;
+ public int b2923;
+ public int b2924;
+ public int b2925;
+ public int b2926;
+ public int b2927;
+ public int b2928;
+ public int b2929;
+ public int b2930;
+ public int b2931;
+ public int b2932;
+ public int b2933;
+ public int b2934;
+ public int b2935;
+ public int b2936;
+ public int b2937;
+ public int b2938;
+ public int b2939;
+ public int b2940;
+ public int b2941;
+ public int b2942;
+ public int b2943;
+ public int b2944;
+ public int b2945;
+ public int b2946;
+ public int b2947;
+ public int b2948;
+ public int b2949;
+ public int b2950;
+ public int b2951;
+ public int b2952;
+ public int b2953;
+ public int b2954;
+ public int b2955;
+ public int b2956;
+ public int b2957;
+ public int b2958;
+ public int b2959;
+ public int b2960;
+ public int b2961;
+ public int b2962;
+ public int b2963;
+ public int b2964;
+ public int b2965;
+ public int b2966;
+ public int b2967;
+ public int b2968;
+ public int b2969;
+ public int b2970;
+ public int b2971;
+ public int b2972;
+ public int b2973;
+ public int b2974;
+ public int b2975;
+ public int b2976;
+ public int b2977;
+ public int b2978;
+ public int b2979;
+ public int b2980;
+ public int b2981;
+ public int b2982;
+ public int b2983;
+ public int b2984;
+ public int b2985;
+ public int b2986;
+ public int b2987;
+ public int b2988;
+ public int b2989;
+ public int b2990;
+ public int b2991;
+ public int b2992;
+ public int b2993;
+ public int b2994;
+ public int b2995;
+ public int b2996;
+ public int b2997;
+ public int b2998;
+ public int b2999;
+ public int b3000;
+ public int b3001;
+ public int b3002;
+ public int b3003;
+ public int b3004;
+ public int b3005;
+ public int b3006;
+ public int b3007;
+ public int b3008;
+ public int b3009;
+ public int b3010;
+ public int b3011;
+ public int b3012;
+ public int b3013;
+ public int b3014;
+ public int b3015;
+ public int b3016;
+ public int b3017;
+ public int b3018;
+ public int b3019;
+ public int b3020;
+ public int b3021;
+ public int b3022;
+ public int b3023;
+ public int b3024;
+ public int b3025;
+ public int b3026;
+ public int b3027;
+ public int b3028;
+ public int b3029;
+ public int b3030;
+ public int b3031;
+ public int b3032;
+ public int b3033;
+ public int b3034;
+ public int b3035;
+ public int b3036;
+ public int b3037;
+ public int b3038;
+ public int b3039;
+ public int b3040;
+ public int b3041;
+ public int b3042;
+ public int b3043;
+ public int b3044;
+ public int b3045;
+ public int b3046;
+ public int b3047;
+ public int b3048;
+ public int b3049;
+ public int b3050;
+ public int b3051;
+ public int b3052;
+ public int b3053;
+ public int b3054;
+ public int b3055;
+ public int b3056;
+ public int b3057;
+ public int b3058;
+ public int b3059;
+ public int b3060;
+ public int b3061;
+ public int b3062;
+ public int b3063;
+ public int b3064;
+ public int b3065;
+ public int b3066;
+ public int b3067;
+ public int b3068;
+ public int b3069;
+ public int b3070;
+ public int b3071;
+ public int b3072;
+ public int b3073;
+ public int b3074;
+ public int b3075;
+ public int b3076;
+ public int b3077;
+ public int b3078;
+ public int b3079;
+ public int b3080;
+ public int b3081;
+ public int b3082;
+ public int b3083;
+ public int b3084;
+ public int b3085;
+ public int b3086;
+ public int b3087;
+ public int b3088;
+ public int b3089;
+ public int b3090;
+ public int b3091;
+ public int b3092;
+ public int b3093;
+ public int b3094;
+ public int b3095;
+ public int b3096;
+ public int b3097;
+ public int b3098;
+ public int b3099;
+ public int b3100;
+ public int b3101;
+ public int b3102;
+ public int b3103;
+ public int b3104;
+ public int b3105;
+ public int b3106;
+ public int b3107;
+ public int b3108;
+ public int b3109;
+ public int b3110;
+ public int b3111;
+ public int b3112;
+ public int b3113;
+ public int b3114;
+ public int b3115;
+ public int b3116;
+ public int b3117;
+ public int b3118;
+ public int b3119;
+ public int b3120;
+ public int b3121;
+ public int b3122;
+ public int b3123;
+ public int b3124;
+ public int b3125;
+ public int b3126;
+ public int b3127;
+ public int b3128;
+ public int b3129;
+ public int b3130;
+ public int b3131;
+ public int b3132;
+ public int b3133;
+ public int b3134;
+ public int b3135;
+ public int b3136;
+ public int b3137;
+ public int b3138;
+ public int b3139;
+ public int b3140;
+ public int b3141;
+ public int b3142;
+ public int b3143;
+ public int b3144;
+ public int b3145;
+ public int b3146;
+ public int b3147;
+ public int b3148;
+ public int b3149;
+ public int b3150;
+ public int b3151;
+ public int b3152;
+ public int b3153;
+ public int b3154;
+ public int b3155;
+ public int b3156;
+ public int b3157;
+ public int b3158;
+ public int b3159;
+ public int b3160;
+ public int b3161;
+ public int b3162;
+ public int b3163;
+ public int b3164;
+ public int b3165;
+ public int b3166;
+ public int b3167;
+ public int b3168;
+ public int b3169;
+ public int b3170;
+ public int b3171;
+ public int b3172;
+ public int b3173;
+ public int b3174;
+ public int b3175;
+ public int b3176;
+ public int b3177;
+ public int b3178;
+ public int b3179;
+ public int b3180;
+ public int b3181;
+ public int b3182;
+ public int b3183;
+ public int b3184;
+ public int b3185;
+ public int b3186;
+ public int b3187;
+ public int b3188;
+ public int b3189;
+ public int b3190;
+ public int b3191;
+ public int b3192;
+ public int b3193;
+ public int b3194;
+ public int b3195;
+ public int b3196;
+ public int b3197;
+ public int b3198;
+ public int b3199;
+ public int b3200;
+ public int b3201;
+ public int b3202;
+ public int b3203;
+ public int b3204;
+ public int b3205;
+ public int b3206;
+ public int b3207;
+ public int b3208;
+ public int b3209;
+ public int b3210;
+ public int b3211;
+ public int b3212;
+ public int b3213;
+ public int b3214;
+ public int b3215;
+ public int b3216;
+ public int b3217;
+ public int b3218;
+ public int b3219;
+ public int b3220;
+ public int b3221;
+ public int b3222;
+ public int b3223;
+ public int b3224;
+ public int b3225;
+ public int b3226;
+ public int b3227;
+ public int b3228;
+ public int b3229;
+ public int b3230;
+ public int b3231;
+ public int b3232;
+ public int b3233;
+ public int b3234;
+ public int b3235;
+ public int b3236;
+ public int b3237;
+ public int b3238;
+ public int b3239;
+ public int b3240;
+ public int b3241;
+ public int b3242;
+ public int b3243;
+ public int b3244;
+ public int b3245;
+ public int b3246;
+ public int b3247;
+ public int b3248;
+ public int b3249;
+ public int b3250;
+ public int b3251;
+ public int b3252;
+ public int b3253;
+ public int b3254;
+ public int b3255;
+ public int b3256;
+ public int b3257;
+ public int b3258;
+ public int b3259;
+ public int b3260;
+ public int b3261;
+ public int b3262;
+ public int b3263;
+ public int b3264;
+ public int b3265;
+ public int b3266;
+ public int b3267;
+ public int b3268;
+ public int b3269;
+ public int b3270;
+ public int b3271;
+ public int b3272;
+ public int b3273;
+ public int b3274;
+ public int b3275;
+ public int b3276;
+ public int b3277;
+ public int b3278;
+ public int b3279;
+ public int b3280;
+ public int b3281;
+ public int b3282;
+ public int b3283;
+ public int b3284;
+ public int b3285;
+ public int b3286;
+ public int b3287;
+ public int b3288;
+ public int b3289;
+ public int b3290;
+ public int b3291;
+ public int b3292;
+ public int b3293;
+ public int b3294;
+ public int b3295;
+ public int b3296;
+ public int b3297;
+ public int b3298;
+ public int b3299;
+ public int b3300;
+ public int b3301;
+ public int b3302;
+ public int b3303;
+ public int b3304;
+ public int b3305;
+ public int b3306;
+ public int b3307;
+ public int b3308;
+ public int b3309;
+ public int b3310;
+ public int b3311;
+ public int b3312;
+ public int b3313;
+ public int b3314;
+ public int b3315;
+ public int b3316;
+ public int b3317;
+ public int b3318;
+ public int b3319;
+ public int b3320;
+ public int b3321;
+ public int b3322;
+ public int b3323;
+ public int b3324;
+ public int b3325;
+ public int b3326;
+ public int b3327;
+ public int b3328;
+ public int b3329;
+ public int b3330;
+ public int b3331;
+ public int b3332;
+ public int b3333;
+ public int b3334;
+ public int b3335;
+ public int b3336;
+ public int b3337;
+ public int b3338;
+ public int b3339;
+ public int b3340;
+ public int b3341;
+ public int b3342;
+ public int b3343;
+ public int b3344;
+ public int b3345;
+ public int b3346;
+ public int b3347;
+ public int b3348;
+ public int b3349;
+ public int b3350;
+ public int b3351;
+ public int b3352;
+ public int b3353;
+ public int b3354;
+ public int b3355;
+ public int b3356;
+ public int b3357;
+ public int b3358;
+ public int b3359;
+ public int b3360;
+ public int b3361;
+ public int b3362;
+ public int b3363;
+ public int b3364;
+ public int b3365;
+ public int b3366;
+ public int b3367;
+ public int b3368;
+ public int b3369;
+ public int b3370;
+ public int b3371;
+ public int b3372;
+ public int b3373;
+ public int b3374;
+ public int b3375;
+ public int b3376;
+ public int b3377;
+ public int b3378;
+ public int b3379;
+ public int b3380;
+ public int b3381;
+ public int b3382;
+ public int b3383;
+ public int b3384;
+ public int b3385;
+ public int b3386;
+ public int b3387;
+ public int b3388;
+ public int b3389;
+ public int b3390;
+ public int b3391;
+ public int b3392;
+ public int b3393;
+ public int b3394;
+ public int b3395;
+ public int b3396;
+ public int b3397;
+ public int b3398;
+ public int b3399;
+ public int b3400;
+ public int b3401;
+ public int b3402;
+ public int b3403;
+ public int b3404;
+ public int b3405;
+ public int b3406;
+ public int b3407;
+ public int b3408;
+ public int b3409;
+ public int b3410;
+ public int b3411;
+ public int b3412;
+ public int b3413;
+ public int b3414;
+ public int b3415;
+ public int b3416;
+ public int b3417;
+ public int b3418;
+ public int b3419;
+ public int b3420;
+ public int b3421;
+ public int b3422;
+ public int b3423;
+ public int b3424;
+ public int b3425;
+ public int b3426;
+ public int b3427;
+ public int b3428;
+ public int b3429;
+ public int b3430;
+ public int b3431;
+ public int b3432;
+ public int b3433;
+ public int b3434;
+ public int b3435;
+ public int b3436;
+ public int b3437;
+ public int b3438;
+ public int b3439;
+ public int b3440;
+ public int b3441;
+ public int b3442;
+ public int b3443;
+ public int b3444;
+ public int b3445;
+ public int b3446;
+ public int b3447;
+ public int b3448;
+ public int b3449;
+ public int b3450;
+ public int b3451;
+ public int b3452;
+ public int b3453;
+ public int b3454;
+ public int b3455;
+ public int b3456;
+ public int b3457;
+ public int b3458;
+ public int b3459;
+ public int b3460;
+ public int b3461;
+ public int b3462;
+ public int b3463;
+ public int b3464;
+ public int b3465;
+ public int b3466;
+ public int b3467;
+ public int b3468;
+ public int b3469;
+ public int b3470;
+ public int b3471;
+ public int b3472;
+ public int b3473;
+ public int b3474;
+ public int b3475;
+ public int b3476;
+ public int b3477;
+ public int b3478;
+ public int b3479;
+ public int b3480;
+ public int b3481;
+ public int b3482;
+ public int b3483;
+ public int b3484;
+ public int b3485;
+ public int b3486;
+ public int b3487;
+ public int b3488;
+ public int b3489;
+ public int b3490;
+ public int b3491;
+ public int b3492;
+ public int b3493;
+ public int b3494;
+ public int b3495;
+ public int b3496;
+ public int b3497;
+ public int b3498;
+ public int b3499;
+ public int b3500;
+ public int b3501;
+ public int b3502;
+ public int b3503;
+ public int b3504;
+ public int b3505;
+ public int b3506;
+ public int b3507;
+ public int b3508;
+ public int b3509;
+ public int b3510;
+ public int b3511;
+ public int b3512;
+ public int b3513;
+ public int b3514;
+ public int b3515;
+ public int b3516;
+ public int b3517;
+ public int b3518;
+ public int b3519;
+ public int b3520;
+ public int b3521;
+ public int b3522;
+ public int b3523;
+ public int b3524;
+ public int b3525;
+ public int b3526;
+ public int b3527;
+ public int b3528;
+ public int b3529;
+ public int b3530;
+ public int b3531;
+ public int b3532;
+ public int b3533;
+ public int b3534;
+ public int b3535;
+ public int b3536;
+ public int b3537;
+ public int b3538;
+ public int b3539;
+ public int b3540;
+ public int b3541;
+ public int b3542;
+ public int b3543;
+ public int b3544;
+ public int b3545;
+ public int b3546;
+ public int b3547;
+ public int b3548;
+ public int b3549;
+ public int b3550;
+ public int b3551;
+ public int b3552;
+ public int b3553;
+ public int b3554;
+ public int b3555;
+ public int b3556;
+ public int b3557;
+ public int b3558;
+ public int b3559;
+ public int b3560;
+ public int b3561;
+ public int b3562;
+ public int b3563;
+ public int b3564;
+ public int b3565;
+ public int b3566;
+ public int b3567;
+ public int b3568;
+ public int b3569;
+ public int b3570;
+ public int b3571;
+ public int b3572;
+ public int b3573;
+ public int b3574;
+ public int b3575;
+ public int b3576;
+ public int b3577;
+ public int b3578;
+ public int b3579;
+ public int b3580;
+ public int b3581;
+ public int b3582;
+ public int b3583;
+ public int b3584;
+ public int b3585;
+ public int b3586;
+ public int b3587;
+ public int b3588;
+ public int b3589;
+ public int b3590;
+ public int b3591;
+ public int b3592;
+ public int b3593;
+ public int b3594;
+ public int b3595;
+ public int b3596;
+ public int b3597;
+ public int b3598;
+ public int b3599;
+ public int b3600;
+ public int b3601;
+ public int b3602;
+ public int b3603;
+ public int b3604;
+ public int b3605;
+ public int b3606;
+ public int b3607;
+ public int b3608;
+ public int b3609;
+ public int b3610;
+ public int b3611;
+ public int b3612;
+ public int b3613;
+ public int b3614;
+ public int b3615;
+ public int b3616;
+ public int b3617;
+ public int b3618;
+ public int b3619;
+ public int b3620;
+ public int b3621;
+ public int b3622;
+ public int b3623;
+ public int b3624;
+ public int b3625;
+ public int b3626;
+ public int b3627;
+ public int b3628;
+ public int b3629;
+ public int b3630;
+ public int b3631;
+ public int b3632;
+ public int b3633;
+ public int b3634;
+ public int b3635;
+ public int b3636;
+ public int b3637;
+ public int b3638;
+ public int b3639;
+ public int b3640;
+ public int b3641;
+ public int b3642;
+ public int b3643;
+ public int b3644;
+ public int b3645;
+ public int b3646;
+ public int b3647;
+ public int b3648;
+ public int b3649;
+ public int b3650;
+ public int b3651;
+ public int b3652;
+ public int b3653;
+ public int b3654;
+ public int b3655;
+ public int b3656;
+ public int b3657;
+ public int b3658;
+ public int b3659;
+ public int b3660;
+ public int b3661;
+ public int b3662;
+ public int b3663;
+ public int b3664;
+ public int b3665;
+ public int b3666;
+ public int b3667;
+ public int b3668;
+ public int b3669;
+ public int b3670;
+ public int b3671;
+ public int b3672;
+ public int b3673;
+ public int b3674;
+ public int b3675;
+ public int b3676;
+ public int b3677;
+ public int b3678;
+ public int b3679;
+ public int b3680;
+ public int b3681;
+ public int b3682;
+ public int b3683;
+ public int b3684;
+ public int b3685;
+ public int b3686;
+ public int b3687;
+ public int b3688;
+ public int b3689;
+ public int b3690;
+ public int b3691;
+ public int b3692;
+ public int b3693;
+ public int b3694;
+ public int b3695;
+ public int b3696;
+ public int b3697;
+ public int b3698;
+ public int b3699;
+ public int b3700;
+ public int b3701;
+ public int b3702;
+ public int b3703;
+ public int b3704;
+ public int b3705;
+ public int b3706;
+ public int b3707;
+ public int b3708;
+ public int b3709;
+ public int b3710;
+ public int b3711;
+ public int b3712;
+ public int b3713;
+ public int b3714;
+ public int b3715;
+ public int b3716;
+ public int b3717;
+ public int b3718;
+ public int b3719;
+ public int b3720;
+ public int b3721;
+ public int b3722;
+ public int b3723;
+ public int b3724;
+ public int b3725;
+ public int b3726;
+ public int b3727;
+ public int b3728;
+ public int b3729;
+ public int b3730;
+ public int b3731;
+ public int b3732;
+ public int b3733;
+ public int b3734;
+ public int b3735;
+ public int b3736;
+ public int b3737;
+ public int b3738;
+ public int b3739;
+ public int b3740;
+ public int b3741;
+ public int b3742;
+ public int b3743;
+ public int b3744;
+ public int b3745;
+ public int b3746;
+ public int b3747;
+ public int b3748;
+ public int b3749;
+ public int b3750;
+ public int b3751;
+ public int b3752;
+ public int b3753;
+ public int b3754;
+ public int b3755;
+ public int b3756;
+ public int b3757;
+ public int b3758;
+ public int b3759;
+ public int b3760;
+ public int b3761;
+ public int b3762;
+ public int b3763;
+ public int b3764;
+ public int b3765;
+ public int b3766;
+ public int b3767;
+ public int b3768;
+ public int b3769;
+ public int b3770;
+ public int b3771;
+ public int b3772;
+ public int b3773;
+ public int b3774;
+ public int b3775;
+ public int b3776;
+ public int b3777;
+ public int b3778;
+ public int b3779;
+ public int b3780;
+ public int b3781;
+ public int b3782;
+ public int b3783;
+ public int b3784;
+ public int b3785;
+ public int b3786;
+ public int b3787;
+ public int b3788;
+ public int b3789;
+ public int b3790;
+ public int b3791;
+ public int b3792;
+ public int b3793;
+ public int b3794;
+ public int b3795;
+ public int b3796;
+ public int b3797;
+ public int b3798;
+ public int b3799;
+ public int b3800;
+ public int b3801;
+ public int b3802;
+ public int b3803;
+ public int b3804;
+ public int b3805;
+ public int b3806;
+ public int b3807;
+ public int b3808;
+ public int b3809;
+ public int b3810;
+ public int b3811;
+ public int b3812;
+ public int b3813;
+ public int b3814;
+ public int b3815;
+ public int b3816;
+ public int b3817;
+ public int b3818;
+ public int b3819;
+ public int b3820;
+ public int b3821;
+ public int b3822;
+ public int b3823;
+ public int b3824;
+ public int b3825;
+ public int b3826;
+ public int b3827;
+ public int b3828;
+ public int b3829;
+ public int b3830;
+ public int b3831;
+ public int b3832;
+ public int b3833;
+ public int b3834;
+ public int b3835;
+ public int b3836;
+ public int b3837;
+ public int b3838;
+ public int b3839;
+ public int b3840;
+ public int b3841;
+ public int b3842;
+ public int b3843;
+ public int b3844;
+ public int b3845;
+ public int b3846;
+ public int b3847;
+ public int b3848;
+ public int b3849;
+ public int b3850;
+ public int b3851;
+ public int b3852;
+ public int b3853;
+ public int b3854;
+ public int b3855;
+ public int b3856;
+ public int b3857;
+ public int b3858;
+ public int b3859;
+ public int b3860;
+ public int b3861;
+ public int b3862;
+ public int b3863;
+ public int b3864;
+ public int b3865;
+ public int b3866;
+ public int b3867;
+ public int b3868;
+ public int b3869;
+ public int b3870;
+ public int b3871;
+ public int b3872;
+ public int b3873;
+ public int b3874;
+ public int b3875;
+ public int b3876;
+ public int b3877;
+ public int b3878;
+ public int b3879;
+ public int b3880;
+ public int b3881;
+ public int b3882;
+ public int b3883;
+ public int b3884;
+ public int b3885;
+ public int b3886;
+ public int b3887;
+ public int b3888;
+ public int b3889;
+ public int b3890;
+ public int b3891;
+ public int b3892;
+ public int b3893;
+ public int b3894;
+ public int b3895;
+ public int b3896;
+ public int b3897;
+ public int b3898;
+ public int b3899;
+ public int b3900;
+ public int b3901;
+ public int b3902;
+ public int b3903;
+ public int b3904;
+ public int b3905;
+ public int b3906;
+ public int b3907;
+ public int b3908;
+ public int b3909;
+ public int b3910;
+ public int b3911;
+ public int b3912;
+ public int b3913;
+ public int b3914;
+ public int b3915;
+ public int b3916;
+ public int b3917;
+ public int b3918;
+ public int b3919;
+ public int b3920;
+ public int b3921;
+ public int b3922;
+ public int b3923;
+ public int b3924;
+ public int b3925;
+ public int b3926;
+ public int b3927;
+ public int b3928;
+ public int b3929;
+ public int b3930;
+ public int b3931;
+ public int b3932;
+ public int b3933;
+ public int b3934;
+ public int b3935;
+ public int b3936;
+ public int b3937;
+ public int b3938;
+ public int b3939;
+ public int b3940;
+ public int b3941;
+ public int b3942;
+ public int b3943;
+ public int b3944;
+ public int b3945;
+ public int b3946;
+ public int b3947;
+ public int b3948;
+ public int b3949;
+ public int b3950;
+ public int b3951;
+ public int b3952;
+ public int b3953;
+ public int b3954;
+ public int b3955;
+ public int b3956;
+ public int b3957;
+ public int b3958;
+ public int b3959;
+ public int b3960;
+ public int b3961;
+ public int b3962;
+ public int b3963;
+ public int b3964;
+ public int b3965;
+ public int b3966;
+ public int b3967;
+ public int b3968;
+ public int b3969;
+ public int b3970;
+ public int b3971;
+ public int b3972;
+ public int b3973;
+ public int b3974;
+ public int b3975;
+ public int b3976;
+ public int b3977;
+ public int b3978;
+ public int b3979;
+ public int b3980;
+ public int b3981;
+ public int b3982;
+ public int b3983;
+ public int b3984;
+ public int b3985;
+ public int b3986;
+ public int b3987;
+ public int b3988;
+ public int b3989;
+ public int b3990;
+ public int b3991;
+ public int b3992;
+ public int b3993;
+ public int b3994;
+ public int b3995;
+ public int b3996;
+ public int b3997;
+ public int b3998;
+ public int b3999;
+ public int b4000;
+ public int b4001;
+ public int b4002;
+ public int b4003;
+ public int b4004;
+ public int b4005;
+ public int b4006;
+ public int b4007;
+ public int b4008;
+ public int b4009;
+ public int b4010;
+ public int b4011;
+ public int b4012;
+ public int b4013;
+ public int b4014;
+ public int b4015;
+ public int b4016;
+ public int b4017;
+ public int b4018;
+ public int b4019;
+ public int b4020;
+ public int b4021;
+ public int b4022;
+ public int b4023;
+ public int b4024;
+ public int b4025;
+ public int b4026;
+ public int b4027;
+ public int b4028;
+ public int b4029;
+ public int b4030;
+ public int b4031;
+ public int b4032;
+ public int b4033;
+ public int b4034;
+ public int b4035;
+ public int b4036;
+ public int b4037;
+ public int b4038;
+ public int b4039;
+ public int b4040;
+ public int b4041;
+ public int b4042;
+ public int b4043;
+ public int b4044;
+ public int b4045;
+ public int b4046;
+ public int b4047;
+ public int b4048;
+ public int b4049;
+ public int b4050;
+ public int b4051;
+ public int b4052;
+ public int b4053;
+ public int b4054;
+ public int b4055;
+ public int b4056;
+ public int b4057;
+ public int b4058;
+ public int b4059;
+ public int b4060;
+ public int b4061;
+ public int b4062;
+ public int b4063;
+ public int b4064;
+ public int b4065;
+ public int b4066;
+ public int b4067;
+ public int b4068;
+ public int b4069;
+ public int b4070;
+ public int b4071;
+ public int b4072;
+ public int b4073;
+ public int b4074;
+ public int b4075;
+ public int b4076;
+ public int b4077;
+ public int b4078;
+ public int b4079;
+ public int b4080;
+ public int b4081;
+ public int b4082;
+ public int b4083;
+ public int b4084;
+ public int b4085;
+ public int b4086;
+ public int b4087;
+ public int b4088;
+ public int b4089;
+ public int b4090;
+ public int b4091;
+ public int b4092;
+ public int b4093;
+ public int b4094;
+ public int b4095;
+ public int b4096;
+ public int b4097;
+ public int b4098;
+ public int b4099;
+ public int b4100;
+ public int b4101;
+ public int b4102;
+ public int b4103;
+ public int b4104;
+ public int b4105;
+ public int b4106;
+ public int b4107;
+ public int b4108;
+ public int b4109;
+ public int b4110;
+ public int b4111;
+ public int b4112;
+ public int b4113;
+ public int b4114;
+ public int b4115;
+ public int b4116;
+ public int b4117;
+ public int b4118;
+ public int b4119;
+ public int b4120;
+ public int b4121;
+ public int b4122;
+ public int b4123;
+ public int b4124;
+ public int b4125;
+ public int b4126;
+ public int b4127;
+ public int b4128;
+ public int b4129;
+ public int b4130;
+ public int b4131;
+ public int b4132;
+ public int b4133;
+ public int b4134;
+ public int b4135;
+ public int b4136;
+ public int b4137;
+ public int b4138;
+ public int b4139;
+ public int b4140;
+ public int b4141;
+ public int b4142;
+ public int b4143;
+ public int b4144;
+ public int b4145;
+ public int b4146;
+ public int b4147;
+ public int b4148;
+ public int b4149;
+ public int b4150;
+ public int b4151;
+ public int b4152;
+ public int b4153;
+ public int b4154;
+ public int b4155;
+ public int b4156;
+ public int b4157;
+ public int b4158;
+ public int b4159;
+ public int b4160;
+ public int b4161;
+ public int b4162;
+ public int b4163;
+ public int b4164;
+ public int b4165;
+ public int b4166;
+ public int b4167;
+ public int b4168;
+ public int b4169;
+ public int b4170;
+ public int b4171;
+ public int b4172;
+ public int b4173;
+ public int b4174;
+ public int b4175;
+ public int b4176;
+ public int b4177;
+ public int b4178;
+ public int b4179;
+ public int b4180;
+ public int b4181;
+ public int b4182;
+ public int b4183;
+ public int b4184;
+ public int b4185;
+ public int b4186;
+ public int b4187;
+ public int b4188;
+ public int b4189;
+ public int b4190;
+ public int b4191;
+ public int b4192;
+ public int b4193;
+ public int b4194;
+ public int b4195;
+ public int b4196;
+ public int b4197;
+ public int b4198;
+ public int b4199;
+ public int b4200;
+ public int b4201;
+ public int b4202;
+ public int b4203;
+ public int b4204;
+ public int b4205;
+ public int b4206;
+ public int b4207;
+ public int b4208;
+ public int b4209;
+ public int b4210;
+ public int b4211;
+ public int b4212;
+ public int b4213;
+ public int b4214;
+ public int b4215;
+ public int b4216;
+ public int b4217;
+ public int b4218;
+ public int b4219;
+ public int b4220;
+ public int b4221;
+ public int b4222;
+ public int b4223;
+ public int b4224;
+ public int b4225;
+ public int b4226;
+ public int b4227;
+ public int b4228;
+ public int b4229;
+ public int b4230;
+ public int b4231;
+ public int b4232;
+ public int b4233;
+ public int b4234;
+ public int b4235;
+ public int b4236;
+ public int b4237;
+ public int b4238;
+ public int b4239;
+ public int b4240;
+ public int b4241;
+ public int b4242;
+ public int b4243;
+ public int b4244;
+ public int b4245;
+ public int b4246;
+ public int b4247;
+ public int b4248;
+ public int b4249;
+ public int b4250;
+ public int b4251;
+ public int b4252;
+ public int b4253;
+ public int b4254;
+ public int b4255;
+ public int b4256;
+ public int b4257;
+ public int b4258;
+ public int b4259;
+ public int b4260;
+ public int b4261;
+ public int b4262;
+ public int b4263;
+ public int b4264;
+ public int b4265;
+ public int b4266;
+ public int b4267;
+ public int b4268;
+ public int b4269;
+ public int b4270;
+ public int b4271;
+ public int b4272;
+ public int b4273;
+ public int b4274;
+ public int b4275;
+ public int b4276;
+ public int b4277;
+ public int b4278;
+ public int b4279;
+ public int b4280;
+ public int b4281;
+ public int b4282;
+ public int b4283;
+ public int b4284;
+ public int b4285;
+ public int b4286;
+ public int b4287;
+ public int b4288;
+ public int b4289;
+ public int b4290;
+ public int b4291;
+ public int b4292;
+ public int b4293;
+ public int b4294;
+ public int b4295;
+ public int b4296;
+ public int b4297;
+ public int b4298;
+ public int b4299;
+ public int b4300;
+ public int b4301;
+ public int b4302;
+ public int b4303;
+ public int b4304;
+ public int b4305;
+ public int b4306;
+ public int b4307;
+ public int b4308;
+ public int b4309;
+ public int b4310;
+ public int b4311;
+ public int b4312;
+ public int b4313;
+ public int b4314;
+ public int b4315;
+ public int b4316;
+ public int b4317;
+ public int b4318;
+ public int b4319;
+ public int b4320;
+ public int b4321;
+ public int b4322;
+ public int b4323;
+ public int b4324;
+ public int b4325;
+ public int b4326;
+ public int b4327;
+ public int b4328;
+ public int b4329;
+ public int b4330;
+ public int b4331;
+ public int b4332;
+ public int b4333;
+ public int b4334;
+ public int b4335;
+ public int b4336;
+ public int b4337;
+ public int b4338;
+ public int b4339;
+ public int b4340;
+ public int b4341;
+ public int b4342;
+ public int b4343;
+ public int b4344;
+ public int b4345;
+ public int b4346;
+ public int b4347;
+ public int b4348;
+ public int b4349;
+ public int b4350;
+ public int b4351;
+ public int b4352;
+ public int b4353;
+ public int b4354;
+ public int b4355;
+ public int b4356;
+ public int b4357;
+ public int b4358;
+ public int b4359;
+ public int b4360;
+ public int b4361;
+ public int b4362;
+ public int b4363;
+ public int b4364;
+ public int b4365;
+ public int b4366;
+ public int b4367;
+ public int b4368;
+ public int b4369;
+ public int b4370;
+ public int b4371;
+ public int b4372;
+ public int b4373;
+ public int b4374;
+ public int b4375;
+ public int b4376;
+ public int b4377;
+ public int b4378;
+ public int b4379;
+ public int b4380;
+ public int b4381;
+ public int b4382;
+ public int b4383;
+ public int b4384;
+ public int b4385;
+ public int b4386;
+ public int b4387;
+ public int b4388;
+ public int b4389;
+ public int b4390;
+ public int b4391;
+ public int b4392;
+ public int b4393;
+ public int b4394;
+ public int b4395;
+ public int b4396;
+ public int b4397;
+ public int b4398;
+ public int b4399;
+ public int b4400;
+ public int b4401;
+ public int b4402;
+ public int b4403;
+ public int b4404;
+ public int b4405;
+ public int b4406;
+ public int b4407;
+ public int b4408;
+ public int b4409;
+ public int b4410;
+ public int b4411;
+ public int b4412;
+ public int b4413;
+ public int b4414;
+ public int b4415;
+ public int b4416;
+ public int b4417;
+ public int b4418;
+ public int b4419;
+ public int b4420;
+ public int b4421;
+ public int b4422;
+ public int b4423;
+ public int b4424;
+ public int b4425;
+ public int b4426;
+ public int b4427;
+ public int b4428;
+ public int b4429;
+ public int b4430;
+ public int b4431;
+ public int b4432;
+ public int b4433;
+ public int b4434;
+ public int b4435;
+ public int b4436;
+ public int b4437;
+ public int b4438;
+ public int b4439;
+ public int b4440;
+ public int b4441;
+ public int b4442;
+ public int b4443;
+ public int b4444;
+ public int b4445;
+ public int b4446;
+ public int b4447;
+ public int b4448;
+ public int b4449;
+ public int b4450;
+ public int b4451;
+ public int b4452;
+ public int b4453;
+ public int b4454;
+ public int b4455;
+ public int b4456;
+ public int b4457;
+ public int b4458;
+ public int b4459;
+ public int b4460;
+ public int b4461;
+ public int b4462;
+ public int b4463;
+ public int b4464;
+ public int b4465;
+ public int b4466;
+ public int b4467;
+ public int b4468;
+ public int b4469;
+ public int b4470;
+ public int b4471;
+ public int b4472;
+ public int b4473;
+ public int b4474;
+ public int b4475;
+ public int b4476;
+ public int b4477;
+ public int b4478;
+ public int b4479;
+ public int b4480;
+ public int b4481;
+ public int b4482;
+ public int b4483;
+ public int b4484;
+ public int b4485;
+ public int b4486;
+ public int b4487;
+ public int b4488;
+ public int b4489;
+ public int b4490;
+ public int b4491;
+ public int b4492;
+ public int b4493;
+ public int b4494;
+ public int b4495;
+ public int b4496;
+ public int b4497;
+ public int b4498;
+ public int b4499;
+ public int b4500;
+ public int b4501;
+ public int b4502;
+ public int b4503;
+ public int b4504;
+ public int b4505;
+ public int b4506;
+ public int b4507;
+ public int b4508;
+ public int b4509;
+ public int b4510;
+ public int b4511;
+ public int b4512;
+ public int b4513;
+ public int b4514;
+ public int b4515;
+ public int b4516;
+ public int b4517;
+ public int b4518;
+ public int b4519;
+ public int b4520;
+ public int b4521;
+ public int b4522;
+ public int b4523;
+ public int b4524;
+ public int b4525;
+ public int b4526;
+ public int b4527;
+ public int b4528;
+ public int b4529;
+ public int b4530;
+ public int b4531;
+ public int b4532;
+ public int b4533;
+ public int b4534;
+ public int b4535;
+ public int b4536;
+ public int b4537;
+ public int b4538;
+ public int b4539;
+ public int b4540;
+ public int b4541;
+ public int b4542;
+ public int b4543;
+ public int b4544;
+ public int b4545;
+ public int b4546;
+ public int b4547;
+ public int b4548;
+ public int b4549;
+ public int b4550;
+ public int b4551;
+ public int b4552;
+ public int b4553;
+ public int b4554;
+ public int b4555;
+ public int b4556;
+ public int b4557;
+ public int b4558;
+ public int b4559;
+ public int b4560;
+ public int b4561;
+ public int b4562;
+ public int b4563;
+ public int b4564;
+ public int b4565;
+ public int b4566;
+ public int b4567;
+ public int b4568;
+ public int b4569;
+ public int b4570;
+ public int b4571;
+ public int b4572;
+ public int b4573;
+ public int b4574;
+ public int b4575;
+ public int b4576;
+ public int b4577;
+ public int b4578;
+ public int b4579;
+ public int b4580;
+ public int b4581;
+ public int b4582;
+ public int b4583;
+ public int b4584;
+ public int b4585;
+ public int b4586;
+ public int b4587;
+ public int b4588;
+ public int b4589;
+ public int b4590;
+ public int b4591;
+ public int b4592;
+ public int b4593;
+ public int b4594;
+ public int b4595;
+ public int b4596;
+ public int b4597;
+ public int b4598;
+ public int b4599;
+ public int b4600;
+ public int b4601;
+ public int b4602;
+ public int b4603;
+ public int b4604;
+ public int b4605;
+ public int b4606;
+ public int b4607;
+ public int b4608;
+ public int b4609;
+ public int b4610;
+ public int b4611;
+ public int b4612;
+ public int b4613;
+ public int b4614;
+ public int b4615;
+ public int b4616;
+ public int b4617;
+ public int b4618;
+ public int b4619;
+ public int b4620;
+ public int b4621;
+ public int b4622;
+ public int b4623;
+ public int b4624;
+ public int b4625;
+ public int b4626;
+ public int b4627;
+ public int b4628;
+ public int b4629;
+ public int b4630;
+ public int b4631;
+ public int b4632;
+ public int b4633;
+ public int b4634;
+ public int b4635;
+ public int b4636;
+ public int b4637;
+ public int b4638;
+ public int b4639;
+ public int b4640;
+ public int b4641;
+ public int b4642;
+ public int b4643;
+ public int b4644;
+ public int b4645;
+ public int b4646;
+ public int b4647;
+ public int b4648;
+ public int b4649;
+ public int b4650;
+ public int b4651;
+ public int b4652;
+ public int b4653;
+ public int b4654;
+ public int b4655;
+ public int b4656;
+ public int b4657;
+ public int b4658;
+ public int b4659;
+ public int b4660;
+ public int b4661;
+ public int b4662;
+ public int b4663;
+ public int b4664;
+ public int b4665;
+ public int b4666;
+ public int b4667;
+ public int b4668;
+ public int b4669;
+ public int b4670;
+ public int b4671;
+ public int b4672;
+ public int b4673;
+ public int b4674;
+ public int b4675;
+ public int b4676;
+ public int b4677;
+ public int b4678;
+ public int b4679;
+ public int b4680;
+ public int b4681;
+ public int b4682;
+ public int b4683;
+ public int b4684;
+ public int b4685;
+ public int b4686;
+ public int b4687;
+ public int b4688;
+ public int b4689;
+ public int b4690;
+ public int b4691;
+ public int b4692;
+ public int b4693;
+ public int b4694;
+ public int b4695;
+ public int b4696;
+ public int b4697;
+ public int b4698;
+ public int b4699;
+ public int b4700;
+ public int b4701;
+ public int b4702;
+ public int b4703;
+ public int b4704;
+ public int b4705;
+ public int b4706;
+ public int b4707;
+ public int b4708;
+ public int b4709;
+ public int b4710;
+ public int b4711;
+ public int b4712;
+ public int b4713;
+ public int b4714;
+ public int b4715;
+ public int b4716;
+ public int b4717;
+ public int b4718;
+ public int b4719;
+ public int b4720;
+ public int b4721;
+ public int b4722;
+ public int b4723;
+ public int b4724;
+ public int b4725;
+ public int b4726;
+ public int b4727;
+ public int b4728;
+ public int b4729;
+ public int b4730;
+ public int b4731;
+ public int b4732;
+ public int b4733;
+ public int b4734;
+ public int b4735;
+ public int b4736;
+ public int b4737;
+ public int b4738;
+ public int b4739;
+ public int b4740;
+ public int b4741;
+ public int b4742;
+ public int b4743;
+ public int b4744;
+ public int b4745;
+ public int b4746;
+ public int b4747;
+ public int b4748;
+ public int b4749;
+ public int b4750;
+ public int b4751;
+ public int b4752;
+ public int b4753;
+ public int b4754;
+ public int b4755;
+ public int b4756;
+ public int b4757;
+ public int b4758;
+ public int b4759;
+ public int b4760;
+ public int b4761;
+ public int b4762;
+ public int b4763;
+ public int b4764;
+ public int b4765;
+ public int b4766;
+ public int b4767;
+ public int b4768;
+ public int b4769;
+ public int b4770;
+ public int b4771;
+ public int b4772;
+ public int b4773;
+ public int b4774;
+ public int b4775;
+ public int b4776;
+ public int b4777;
+ public int b4778;
+ public int b4779;
+ public int b4780;
+ public int b4781;
+ public int b4782;
+ public int b4783;
+ public int b4784;
+ public int b4785;
+ public int b4786;
+ public int b4787;
+ public int b4788;
+ public int b4789;
+ public int b4790;
+ public int b4791;
+ public int b4792;
+ public int b4793;
+ public int b4794;
+ public int b4795;
+ public int b4796;
+ public int b4797;
+ public int b4798;
+ public int b4799;
+ public int b4800;
+ public int b4801;
+ public int b4802;
+ public int b4803;
+ public int b4804;
+ public int b4805;
+ public int b4806;
+ public int b4807;
+ public int b4808;
+ public int b4809;
+ public int b4810;
+ public int b4811;
+ public int b4812;
+ public int b4813;
+ public int b4814;
+ public int b4815;
+ public int b4816;
+ public int b4817;
+ public int b4818;
+ public int b4819;
+ public int b4820;
+ public int b4821;
+ public int b4822;
+ public int b4823;
+ public int b4824;
+ public int b4825;
+ public int b4826;
+ public int b4827;
+ public int b4828;
+ public int b4829;
+ public int b4830;
+ public int b4831;
+ public int b4832;
+ public int b4833;
+ public int b4834;
+ public int b4835;
+ public int b4836;
+ public int b4837;
+ public int b4838;
+ public int b4839;
+ public int b4840;
+ public int b4841;
+ public int b4842;
+ public int b4843;
+ public int b4844;
+ public int b4845;
+ public int b4846;
+ public int b4847;
+ public int b4848;
+ public int b4849;
+ public int b4850;
+ public int b4851;
+ public int b4852;
+ public int b4853;
+ public int b4854;
+ public int b4855;
+ public int b4856;
+ public int b4857;
+ public int b4858;
+ public int b4859;
+ public int b4860;
+ public int b4861;
+ public int b4862;
+ public int b4863;
+ public int b4864;
+ public int b4865;
+ public int b4866;
+ public int b4867;
+ public int b4868;
+ public int b4869;
+ public int b4870;
+ public int b4871;
+ public int b4872;
+ public int b4873;
+ public int b4874;
+ public int b4875;
+ public int b4876;
+ public int b4877;
+ public int b4878;
+ public int b4879;
+ public int b4880;
+ public int b4881;
+ public int b4882;
+ public int b4883;
+ public int b4884;
+ public int b4885;
+ public int b4886;
+ public int b4887;
+ public int b4888;
+ public int b4889;
+ public int b4890;
+ public int b4891;
+ public int b4892;
+ public int b4893;
+ public int b4894;
+ public int b4895;
+ public int b4896;
+ public int b4897;
+ public int b4898;
+ public int b4899;
+ public int b4900;
+ public int b4901;
+ public int b4902;
+ public int b4903;
+ public int b4904;
+ public int b4905;
+ public int b4906;
+ public int b4907;
+ public int b4908;
+ public int b4909;
+ public int b4910;
+ public int b4911;
+ public int b4912;
+ public int b4913;
+ public int b4914;
+ public int b4915;
+ public int b4916;
+ public int b4917;
+ public int b4918;
+ public int b4919;
+ public int b4920;
+ public int b4921;
+ public int b4922;
+ public int b4923;
+ public int b4924;
+ public int b4925;
+ public int b4926;
+ public int b4927;
+ public int b4928;
+ public int b4929;
+ public int b4930;
+ public int b4931;
+ public int b4932;
+ public int b4933;
+ public int b4934;
+ public int b4935;
+ public int b4936;
+ public int b4937;
+ public int b4938;
+ public int b4939;
+ public int b4940;
+ public int b4941;
+ public int b4942;
+ public int b4943;
+ public int b4944;
+ public int b4945;
+ public int b4946;
+ public int b4947;
+ public int b4948;
+ public int b4949;
+ public int b4950;
+ public int b4951;
+ public int b4952;
+ public int b4953;
+ public int b4954;
+ public int b4955;
+ public int b4956;
+ public int b4957;
+ public int b4958;
+ public int b4959;
+ public int b4960;
+ public int b4961;
+ public int b4962;
+ public int b4963;
+ public int b4964;
+ public int b4965;
+ public int b4966;
+ public int b4967;
+ public int b4968;
+ public int b4969;
+ public int b4970;
+ public int b4971;
+ public int b4972;
+ public int b4973;
+ public int b4974;
+ public int b4975;
+ public int b4976;
+ public int b4977;
+ public int b4978;
+ public int b4979;
+ public int b4980;
+ public int b4981;
+ public int b4982;
+ public int b4983;
+ public int b4984;
+ public int b4985;
+ public int b4986;
+ public int b4987;
+ public int b4988;
+ public int b4989;
+ public int b4990;
+ public int b4991;
+ public int b4992;
+ public int b4993;
+ public int b4994;
+ public int b4995;
+ public int b4996;
+ public int b4997;
+ public int b4998;
+ public int b4999;
+ public int b5000;
+ public int b5001;
+ public int b5002;
+ public int b5003;
+ public int b5004;
+ public int b5005;
+ public int b5006;
+ public int b5007;
+ public int b5008;
+ public int b5009;
+ public int b5010;
+ public int b5011;
+ public int b5012;
+ public int b5013;
+ public int b5014;
+ public int b5015;
+ public int b5016;
+ public int b5017;
+ public int b5018;
+ public int b5019;
+ public int b5020;
+ public int b5021;
+ public int b5022;
+ public int b5023;
+ public int b5024;
+ public int b5025;
+ public int b5026;
+ public int b5027;
+ public int b5028;
+ public int b5029;
+ public int b5030;
+ public int b5031;
+ public int b5032;
+ public int b5033;
+ public int b5034;
+ public int b5035;
+ public int b5036;
+ public int b5037;
+ public int b5038;
+ public int b5039;
+ public int b5040;
+ public int b5041;
+ public int b5042;
+ public int b5043;
+ public int b5044;
+ public int b5045;
+ public int b5046;
+ public int b5047;
+ public int b5048;
+ public int b5049;
+ public int b5050;
+ public int b5051;
+ public int b5052;
+ public int b5053;
+ public int b5054;
+ public int b5055;
+ public int b5056;
+ public int b5057;
+ public int b5058;
+ public int b5059;
+ public int b5060;
+ public int b5061;
+ public int b5062;
+ public int b5063;
+ public int b5064;
+ public int b5065;
+ public int b5066;
+ public int b5067;
+ public int b5068;
+ public int b5069;
+ public int b5070;
+ public int b5071;
+ public int b5072;
+ public int b5073;
+ public int b5074;
+ public int b5075;
+ public int b5076;
+ public int b5077;
+ public int b5078;
+ public int b5079;
+ public int b5080;
+ public int b5081;
+ public int b5082;
+ public int b5083;
+ public int b5084;
+ public int b5085;
+ public int b5086;
+ public int b5087;
+ public int b5088;
+ public int b5089;
+ public int b5090;
+ public int b5091;
+ public int b5092;
+ public int b5093;
+ public int b5094;
+ public int b5095;
+ public int b5096;
+ public int b5097;
+ public int b5098;
+ public int b5099;
+ public int b5100;
+ public int b5101;
+ public int b5102;
+ public int b5103;
+ public int b5104;
+ public int b5105;
+ public int b5106;
+ public int b5107;
+ public int b5108;
+ public int b5109;
+ public int b5110;
+ public int b5111;
+ public int b5112;
+ public int b5113;
+ public int b5114;
+ public int b5115;
+ public int b5116;
+ public int b5117;
+ public int b5118;
+ public int b5119;
+ public int b5120;
+ public int b5121;
+ public int b5122;
+ public int b5123;
+ public int b5124;
+ public int b5125;
+ public int b5126;
+ public int b5127;
+ public int b5128;
+ public int b5129;
+ public int b5130;
+ public int b5131;
+ public int b5132;
+ public int b5133;
+ public int b5134;
+ public int b5135;
+ public int b5136;
+ public int b5137;
+ public int b5138;
+ public int b5139;
+ public int b5140;
+ public int b5141;
+ public int b5142;
+ public int b5143;
+ public int b5144;
+ public int b5145;
+ public int b5146;
+ public int b5147;
+ public int b5148;
+ public int b5149;
+ public int b5150;
+ public int b5151;
+ public int b5152;
+ public int b5153;
+ public int b5154;
+ public int b5155;
+ public int b5156;
+ public int b5157;
+ public int b5158;
+ public int b5159;
+ public int b5160;
+ public int b5161;
+ public int b5162;
+ public int b5163;
+ public int b5164;
+ public int b5165;
+ public int b5166;
+ public int b5167;
+ public int b5168;
+ public int b5169;
+ public int b5170;
+ public int b5171;
+ public int b5172;
+ public int b5173;
+ public int b5174;
+ public int b5175;
+ public int b5176;
+ public int b5177;
+ public int b5178;
+ public int b5179;
+ public int b5180;
+ public int b5181;
+ public int b5182;
+ public int b5183;
+ public int b5184;
+ public int b5185;
+ public int b5186;
+ public int b5187;
+ public int b5188;
+ public int b5189;
+ public int b5190;
+ public int b5191;
+ public int b5192;
+ public int b5193;
+ public int b5194;
+ public int b5195;
+ public int b5196;
+ public int b5197;
+ public int b5198;
+ public int b5199;
+ public int b5200;
+ public int b5201;
+ public int b5202;
+ public int b5203;
+ public int b5204;
+ public int b5205;
+ public int b5206;
+ public int b5207;
+ public int b5208;
+ public int b5209;
+ public int b5210;
+ public int b5211;
+ public int b5212;
+ public int b5213;
+ public int b5214;
+ public int b5215;
+ public int b5216;
+ public int b5217;
+ public int b5218;
+ public int b5219;
+ public int b5220;
+ public int b5221;
+ public int b5222;
+ public int b5223;
+ public int b5224;
+ public int b5225;
+ public int b5226;
+ public int b5227;
+ public int b5228;
+ public int b5229;
+ public int b5230;
+ public int b5231;
+ public int b5232;
+ public int b5233;
+ public int b5234;
+ public int b5235;
+ public int b5236;
+ public int b5237;
+ public int b5238;
+ public int b5239;
+ public int b5240;
+ public int b5241;
+ public int b5242;
+ public int b5243;
+ public int b5244;
+ public int b5245;
+ public int b5246;
+ public int b5247;
+ public int b5248;
+ public int b5249;
+ public int b5250;
+ public int b5251;
+ public int b5252;
+ public int b5253;
+ public int b5254;
+ public int b5255;
+ public int b5256;
+ public int b5257;
+ public int b5258;
+ public int b5259;
+ public int b5260;
+ public int b5261;
+ public int b5262;
+ public int b5263;
+ public int b5264;
+ public int b5265;
+ public int b5266;
+ public int b5267;
+ public int b5268;
+ public int b5269;
+ public int b5270;
+ public int b5271;
+ public int b5272;
+ public int b5273;
+ public int b5274;
+ public int b5275;
+ public int b5276;
+ public int b5277;
+ public int b5278;
+ public int b5279;
+ public int b5280;
+ public int b5281;
+ public int b5282;
+ public int b5283;
+ public int b5284;
+ public int b5285;
+ public int b5286;
+ public int b5287;
+ public int b5288;
+ public int b5289;
+ public int b5290;
+ public int b5291;
+ public int b5292;
+ public int b5293;
+ public int b5294;
+ public int b5295;
+ public int b5296;
+ public int b5297;
+ public int b5298;
+ public int b5299;
+ public int b5300;
+ public int b5301;
+ public int b5302;
+ public int b5303;
+ public int b5304;
+ public int b5305;
+ public int b5306;
+ public int b5307;
+ public int b5308;
+ public int b5309;
+ public int b5310;
+ public int b5311;
+ public int b5312;
+ public int b5313;
+ public int b5314;
+ public int b5315;
+ public int b5316;
+ public int b5317;
+ public int b5318;
+ public int b5319;
+ public int b5320;
+ public int b5321;
+ public int b5322;
+ public int b5323;
+ public int b5324;
+ public int b5325;
+ public int b5326;
+ public int b5327;
+ public int b5328;
+ public int b5329;
+ public int b5330;
+ public int b5331;
+ public int b5332;
+ public int b5333;
+ public int b5334;
+ public int b5335;
+ public int b5336;
+ public int b5337;
+ public int b5338;
+ public int b5339;
+ public int b5340;
+ public int b5341;
+ public int b5342;
+ public int b5343;
+ public int b5344;
+ public int b5345;
+ public int b5346;
+ public int b5347;
+ public int b5348;
+ public int b5349;
+ public int b5350;
+ public int b5351;
+ public int b5352;
+ public int b5353;
+ public int b5354;
+ public int b5355;
+ public int b5356;
+ public int b5357;
+ public int b5358;
+ public int b5359;
+ public int b5360;
+ public int b5361;
+ public int b5362;
+ public int b5363;
+ public int b5364;
+ public int b5365;
+ public int b5366;
+ public int b5367;
+ public int b5368;
+ public int b5369;
+ public int b5370;
+ public int b5371;
+ public int b5372;
+ public int b5373;
+ public int b5374;
+ public int b5375;
+ public int b5376;
+ public int b5377;
+ public int b5378;
+ public int b5379;
+ public int b5380;
+ public int b5381;
+ public int b5382;
+ public int b5383;
+ public int b5384;
+ public int b5385;
+ public int b5386;
+ public int b5387;
+ public int b5388;
+ public int b5389;
+ public int b5390;
+ public int b5391;
+ public int b5392;
+ public int b5393;
+ public int b5394;
+ public int b5395;
+ public int b5396;
+ public int b5397;
+ public int b5398;
+ public int b5399;
+ public int b5400;
+ public int b5401;
+ public int b5402;
+ public int b5403;
+ public int b5404;
+ public int b5405;
+ public int b5406;
+ public int b5407;
+ public int b5408;
+ public int b5409;
+ public int b5410;
+ public int b5411;
+ public int b5412;
+ public int b5413;
+ public int b5414;
+ public int b5415;
+ public int b5416;
+ public int b5417;
+ public int b5418;
+ public int b5419;
+ public int b5420;
+ public int b5421;
+ public int b5422;
+ public int b5423;
+ public int b5424;
+ public int b5425;
+ public int b5426;
+ public int b5427;
+ public int b5428;
+ public int b5429;
+ public int b5430;
+ public int b5431;
+ public int b5432;
+ public int b5433;
+ public int b5434;
+ public int b5435;
+ public int b5436;
+ public int b5437;
+ public int b5438;
+ public int b5439;
+ public int b5440;
+ public int b5441;
+ public int b5442;
+ public int b5443;
+ public int b5444;
+ public int b5445;
+ public int b5446;
+ public int b5447;
+ public int b5448;
+ public int b5449;
+ public int b5450;
+ public int b5451;
+ public int b5452;
+ public int b5453;
+ public int b5454;
+ public int b5455;
+ public int b5456;
+ public int b5457;
+ public int b5458;
+ public int b5459;
+ public int b5460;
+ public int b5461;
+ public int b5462;
+ public int b5463;
+ public int b5464;
+ public int b5465;
+ public int b5466;
+ public int b5467;
+ public int b5468;
+ public int b5469;
+ public int b5470;
+ public int b5471;
+ public int b5472;
+ public int b5473;
+ public int b5474;
+ public int b5475;
+ public int b5476;
+ public int b5477;
+ public int b5478;
+ public int b5479;
+ public int b5480;
+ public int b5481;
+ public int b5482;
+ public int b5483;
+ public int b5484;
+ public int b5485;
+ public int b5486;
+ public int b5487;
+ public int b5488;
+ public int b5489;
+ public int b5490;
+ public int b5491;
+ public int b5492;
+ public int b5493;
+ public int b5494;
+ public int b5495;
+ public int b5496;
+ public int b5497;
+ public int b5498;
+ public int b5499;
+ public int b5500;
+ public int b5501;
+ public int b5502;
+ public int b5503;
+ public int b5504;
+ public int b5505;
+ public int b5506;
+ public int b5507;
+ public int b5508;
+ public int b5509;
+ public int b5510;
+ public int b5511;
+ public int b5512;
+ public int b5513;
+ public int b5514;
+ public int b5515;
+ public int b5516;
+ public int b5517;
+ public int b5518;
+ public int b5519;
+ public int b5520;
+ public int b5521;
+ public int b5522;
+ public int b5523;
+ public int b5524;
+ public int b5525;
+ public int b5526;
+ public int b5527;
+ public int b5528;
+ public int b5529;
+ public int b5530;
+ public int b5531;
+ public int b5532;
+ public int b5533;
+ public int b5534;
+ public int b5535;
+ public int b5536;
+ public int b5537;
+ public int b5538;
+ public int b5539;
+ public int b5540;
+ public int b5541;
+ public int b5542;
+ public int b5543;
+ public int b5544;
+ public int b5545;
+ public int b5546;
+ public int b5547;
+ public int b5548;
+ public int b5549;
+ public int b5550;
+ public int b5551;
+ public int b5552;
+ public int b5553;
+ public int b5554;
+ public int b5555;
+ public int b5556;
+ public int b5557;
+ public int b5558;
+ public int b5559;
+ public int b5560;
+ public int b5561;
+ public int b5562;
+ public int b5563;
+ public int b5564;
+ public int b5565;
+ public int b5566;
+ public int b5567;
+ public int b5568;
+ public int b5569;
+ public int b5570;
+ public int b5571;
+ public int b5572;
+ public int b5573;
+ public int b5574;
+ public int b5575;
+ public int b5576;
+ public int b5577;
+ public int b5578;
+ public int b5579;
+ public int b5580;
+ public int b5581;
+ public int b5582;
+ public int b5583;
+ public int b5584;
+ public int b5585;
+ public int b5586;
+ public int b5587;
+ public int b5588;
+ public int b5589;
+ public int b5590;
+ public int b5591;
+ public int b5592;
+ public int b5593;
+ public int b5594;
+ public int b5595;
+ public int b5596;
+ public int b5597;
+ public int b5598;
+ public int b5599;
+ public int b5600;
+ public int b5601;
+ public int b5602;
+ public int b5603;
+ public int b5604;
+ public int b5605;
+ public int b5606;
+ public int b5607;
+ public int b5608;
+ public int b5609;
+ public int b5610;
+ public int b5611;
+ public int b5612;
+ public int b5613;
+ public int b5614;
+ public int b5615;
+ public int b5616;
+ public int b5617;
+ public int b5618;
+ public int b5619;
+ public int b5620;
+ public int b5621;
+ public int b5622;
+ public int b5623;
+ public int b5624;
+ public int b5625;
+ public int b5626;
+ public int b5627;
+ public int b5628;
+ public int b5629;
+ public int b5630;
+ public int b5631;
+ public int b5632;
+ public int b5633;
+ public int b5634;
+ public int b5635;
+ public int b5636;
+ public int b5637;
+ public int b5638;
+ public int b5639;
+ public int b5640;
+ public int b5641;
+ public int b5642;
+ public int b5643;
+ public int b5644;
+ public int b5645;
+ public int b5646;
+ public int b5647;
+ public int b5648;
+ public int b5649;
+ public int b5650;
+ public int b5651;
+ public int b5652;
+ public int b5653;
+ public int b5654;
+ public int b5655;
+ public int b5656;
+ public int b5657;
+ public int b5658;
+ public int b5659;
+ public int b5660;
+ public int b5661;
+ public int b5662;
+ public int b5663;
+ public int b5664;
+ public int b5665;
+ public int b5666;
+ public int b5667;
+ public int b5668;
+ public int b5669;
+ public int b5670;
+ public int b5671;
+ public int b5672;
+ public int b5673;
+ public int b5674;
+ public int b5675;
+ public int b5676;
+ public int b5677;
+ public int b5678;
+ public int b5679;
+ public int b5680;
+ public int b5681;
+ public int b5682;
+ public int b5683;
+ public int b5684;
+ public int b5685;
+ public int b5686;
+ public int b5687;
+ public int b5688;
+ public int b5689;
+ public int b5690;
+ public int b5691;
+ public int b5692;
+ public int b5693;
+ public int b5694;
+ public int b5695;
+ public int b5696;
+ public int b5697;
+ public int b5698;
+ public int b5699;
+ public int b5700;
+ public int b5701;
+ public int b5702;
+ public int b5703;
+ public int b5704;
+ public int b5705;
+ public int b5706;
+ public int b5707;
+ public int b5708;
+ public int b5709;
+ public int b5710;
+ public int b5711;
+ public int b5712;
+ public int b5713;
+ public int b5714;
+ public int b5715;
+ public int b5716;
+ public int b5717;
+ public int b5718;
+ public int b5719;
+ public int b5720;
+ public int b5721;
+ public int b5722;
+ public int b5723;
+ public int b5724;
+ public int b5725;
+ public int b5726;
+ public int b5727;
+ public int b5728;
+ public int b5729;
+ public int b5730;
+ public int b5731;
+ public int b5732;
+ public int b5733;
+ public int b5734;
+ public int b5735;
+ public int b5736;
+ public int b5737;
+ public int b5738;
+ public int b5739;
+ public int b5740;
+ public int b5741;
+ public int b5742;
+ public int b5743;
+ public int b5744;
+ public int b5745;
+ public int b5746;
+ public int b5747;
+ public int b5748;
+ public int b5749;
+ public int b5750;
+ public int b5751;
+ public int b5752;
+ public int b5753;
+ public int b5754;
+ public int b5755;
+ public int b5756;
+ public int b5757;
+ public int b5758;
+ public int b5759;
+ public int b5760;
+ public int b5761;
+ public int b5762;
+ public int b5763;
+ public int b5764;
+ public int b5765;
+ public int b5766;
+ public int b5767;
+ public int b5768;
+ public int b5769;
+ public int b5770;
+ public int b5771;
+ public int b5772;
+ public int b5773;
+ public int b5774;
+ public int b5775;
+ public int b5776;
+ public int b5777;
+ public int b5778;
+ public int b5779;
+ public int b5780;
+ public int b5781;
+ public int b5782;
+ public int b5783;
+ public int b5784;
+ public int b5785;
+ public int b5786;
+ public int b5787;
+ public int b5788;
+ public int b5789;
+ public int b5790;
+ public int b5791;
+ public int b5792;
+ public int b5793;
+ public int b5794;
+ public int b5795;
+ public int b5796;
+ public int b5797;
+ public int b5798;
+ public int b5799;
+ public int b5800;
+ public int b5801;
+ public int b5802;
+ public int b5803;
+ public int b5804;
+ public int b5805;
+ public int b5806;
+ public int b5807;
+ public int b5808;
+ public int b5809;
+ public int b5810;
+ public int b5811;
+ public int b5812;
+ public int b5813;
+ public int b5814;
+ public int b5815;
+ public int b5816;
+ public int b5817;
+ public int b5818;
+ public int b5819;
+ public int b5820;
+ public int b5821;
+ public int b5822;
+ public int b5823;
+ public int b5824;
+ public int b5825;
+ public int b5826;
+ public int b5827;
+ public int b5828;
+ public int b5829;
+ public int b5830;
+ public int b5831;
+ public int b5832;
+ public int b5833;
+ public int b5834;
+ public int b5835;
+ public int b5836;
+ public int b5837;
+ public int b5838;
+ public int b5839;
+ public int b5840;
+ public int b5841;
+ public int b5842;
+ public int b5843;
+ public int b5844;
+ public int b5845;
+ public int b5846;
+ public int b5847;
+ public int b5848;
+ public int b5849;
+ public int b5850;
+ public int b5851;
+ public int b5852;
+ public int b5853;
+ public int b5854;
+ public int b5855;
+ public int b5856;
+ public int b5857;
+ public int b5858;
+ public int b5859;
+ public int b5860;
+ public int b5861;
+ public int b5862;
+ public int b5863;
+ public int b5864;
+ public int b5865;
+ public int b5866;
+ public int b5867;
+ public int b5868;
+ public int b5869;
+ public int b5870;
+ public int b5871;
+ public int b5872;
+ public int b5873;
+ public int b5874;
+ public int b5875;
+ public int b5876;
+ public int b5877;
+ public int b5878;
+ public int b5879;
+ public int b5880;
+ public int b5881;
+ public int b5882;
+ public int b5883;
+ public int b5884;
+ public int b5885;
+ public int b5886;
+ public int b5887;
+ public int b5888;
+ public int b5889;
+ public int b5890;
+ public int b5891;
+ public int b5892;
+ public int b5893;
+ public int b5894;
+ public int b5895;
+ public int b5896;
+ public int b5897;
+ public int b5898;
+ public int b5899;
+ public int b5900;
+ public int b5901;
+ public int b5902;
+ public int b5903;
+ public int b5904;
+ public int b5905;
+ public int b5906;
+ public int b5907;
+ public int b5908;
+ public int b5909;
+ public int b5910;
+ public int b5911;
+ public int b5912;
+ public int b5913;
+ public int b5914;
+ public int b5915;
+ public int b5916;
+ public int b5917;
+ public int b5918;
+ public int b5919;
+ public int b5920;
+ public int b5921;
+ public int b5922;
+ public int b5923;
+ public int b5924;
+ public int b5925;
+ public int b5926;
+ public int b5927;
+ public int b5928;
+ public int b5929;
+ public int b5930;
+ public int b5931;
+ public int b5932;
+ public int b5933;
+ public int b5934;
+ public int b5935;
+ public int b5936;
+ public int b5937;
+ public int b5938;
+ public int b5939;
+ public int b5940;
+ public int b5941;
+ public int b5942;
+ public int b5943;
+ public int b5944;
+ public int b5945;
+ public int b5946;
+ public int b5947;
+ public int b5948;
+ public int b5949;
+ public int b5950;
+ public int b5951;
+ public int b5952;
+ public int b5953;
+ public int b5954;
+ public int b5955;
+ public int b5956;
+ public int b5957;
+ public int b5958;
+ public int b5959;
+ public int b5960;
+ public int b5961;
+ public int b5962;
+ public int b5963;
+ public int b5964;
+ public int b5965;
+ public int b5966;
+ public int b5967;
+ public int b5968;
+ public int b5969;
+ public int b5970;
+ public int b5971;
+ public int b5972;
+ public int b5973;
+ public int b5974;
+ public int b5975;
+ public int b5976;
+ public int b5977;
+ public int b5978;
+ public int b5979;
+ public int b5980;
+ public int b5981;
+ public int b5982;
+ public int b5983;
+ public int b5984;
+ public int b5985;
+ public int b5986;
+ public int b5987;
+ public int b5988;
+ public int b5989;
+ public int b5990;
+ public int b5991;
+ public int b5992;
+ public int b5993;
+ public int b5994;
+ public int b5995;
+ public int b5996;
+ public int b5997;
+ public int b5998;
+ public int b5999;
+ public int b6000;
+ public int b6001;
+ public int b6002;
+ public int b6003;
+ public int b6004;
+ public int b6005;
+ public int b6006;
+ public int b6007;
+ public int b6008;
+ public int b6009;
+ public int b6010;
+ public int b6011;
+ public int b6012;
+ public int b6013;
+ public int b6014;
+ public int b6015;
+ public int b6016;
+ public int b6017;
+ public int b6018;
+ public int b6019;
+ public int b6020;
+ public int b6021;
+ public int b6022;
+ public int b6023;
+ public int b6024;
+ public int b6025;
+ public int b6026;
+ public int b6027;
+ public int b6028;
+ public int b6029;
+ public int b6030;
+ public int b6031;
+ public int b6032;
+ public int b6033;
+ public int b6034;
+ public int b6035;
+ public int b6036;
+ public int b6037;
+ public int b6038;
+ public int b6039;
+ public int b6040;
+ public int b6041;
+ public int b6042;
+ public int b6043;
+ public int b6044;
+ public int b6045;
+ public int b6046;
+ public int b6047;
+ public int b6048;
+ public int b6049;
+ public int b6050;
+ public int b6051;
+ public int b6052;
+ public int b6053;
+ public int b6054;
+ public int b6055;
+ public int b6056;
+ public int b6057;
+ public int b6058;
+ public int b6059;
+ public int b6060;
+ public int b6061;
+ public int b6062;
+ public int b6063;
+ public int b6064;
+ public int b6065;
+ public int b6066;
+ public int b6067;
+ public int b6068;
+ public int b6069;
+ public int b6070;
+ public int b6071;
+ public int b6072;
+ public int b6073;
+ public int b6074;
+ public int b6075;
+ public int b6076;
+ public int b6077;
+ public int b6078;
+ public int b6079;
+ public int b6080;
+ public int b6081;
+ public int b6082;
+ public int b6083;
+ public int b6084;
+ public int b6085;
+ public int b6086;
+ public int b6087;
+ public int b6088;
+ public int b6089;
+ public int b6090;
+ public int b6091;
+ public int b6092;
+ public int b6093;
+ public int b6094;
+ public int b6095;
+ public int b6096;
+ public int b6097;
+ public int b6098;
+ public int b6099;
+ public int b6100;
+ public int b6101;
+ public int b6102;
+ public int b6103;
+ public int b6104;
+ public int b6105;
+ public int b6106;
+ public int b6107;
+ public int b6108;
+ public int b6109;
+ public int b6110;
+ public int b6111;
+ public int b6112;
+ public int b6113;
+ public int b6114;
+ public int b6115;
+ public int b6116;
+ public int b6117;
+ public int b6118;
+ public int b6119;
+ public int b6120;
+ public int b6121;
+ public int b6122;
+ public int b6123;
+ public int b6124;
+ public int b6125;
+ public int b6126;
+ public int b6127;
+ public int b6128;
+ public int b6129;
+ public int b6130;
+ public int b6131;
+ public int b6132;
+ public int b6133;
+ public int b6134;
+ public int b6135;
+ public int b6136;
+ public int b6137;
+ public int b6138;
+ public int b6139;
+ public int b6140;
+ public int b6141;
+ public int b6142;
+ public int b6143;
+ public int b6144;
+ public int b6145;
+ public int b6146;
+ public int b6147;
+ public int b6148;
+ public int b6149;
+ public int b6150;
+ public int b6151;
+ public int b6152;
+ public int b6153;
+ public int b6154;
+ public int b6155;
+ public int b6156;
+ public int b6157;
+ public int b6158;
+ public int b6159;
+ public int b6160;
+ public int b6161;
+ public int b6162;
+ public int b6163;
+ public int b6164;
+ public int b6165;
+ public int b6166;
+ public int b6167;
+ public int b6168;
+ public int b6169;
+ public int b6170;
+ public int b6171;
+ public int b6172;
+ public int b6173;
+ public int b6174;
+ public int b6175;
+ public int b6176;
+ public int b6177;
+ public int b6178;
+ public int b6179;
+ public int b6180;
+ public int b6181;
+ public int b6182;
+ public int b6183;
+ public int b6184;
+ public int b6185;
+ public int b6186;
+ public int b6187;
+ public int b6188;
+ public int b6189;
+ public int b6190;
+ public int b6191;
+ public int b6192;
+ public int b6193;
+ public int b6194;
+ public int b6195;
+ public int b6196;
+ public int b6197;
+ public int b6198;
+ public int b6199;
+ public int b6200;
+ public int b6201;
+ public int b6202;
+ public int b6203;
+ public int b6204;
+ public int b6205;
+ public int b6206;
+ public int b6207;
+ public int b6208;
+ public int b6209;
+ public int b6210;
+ public int b6211;
+ public int b6212;
+ public int b6213;
+ public int b6214;
+ public int b6215;
+ public int b6216;
+ public int b6217;
+ public int b6218;
+ public int b6219;
+ public int b6220;
+ public int b6221;
+ public int b6222;
+ public int b6223;
+ public int b6224;
+ public int b6225;
+ public int b6226;
+ public int b6227;
+ public int b6228;
+ public int b6229;
+ public int b6230;
+ public int b6231;
+ public int b6232;
+ public int b6233;
+ public int b6234;
+ public int b6235;
+ public int b6236;
+ public int b6237;
+ public int b6238;
+ public int b6239;
+ public int b6240;
+ public int b6241;
+ public int b6242;
+ public int b6243;
+ public int b6244;
+ public int b6245;
+ public int b6246;
+ public int b6247;
+ public int b6248;
+ public int b6249;
+ public int b6250;
+ public int b6251;
+ public int b6252;
+ public int b6253;
+ public int b6254;
+ public int b6255;
+ public int b6256;
+ public int b6257;
+ public int b6258;
+ public int b6259;
+ public int b6260;
+ public int b6261;
+ public int b6262;
+ public int b6263;
+ public int b6264;
+ public int b6265;
+ public int b6266;
+ public int b6267;
+ public int b6268;
+ public int b6269;
+ public int b6270;
+ public int b6271;
+ public int b6272;
+ public int b6273;
+ public int b6274;
+ public int b6275;
+ public int b6276;
+ public int b6277;
+ public int b6278;
+ public int b6279;
+ public int b6280;
+ public int b6281;
+ public int b6282;
+ public int b6283;
+ public int b6284;
+ public int b6285;
+ public int b6286;
+ public int b6287;
+ public int b6288;
+ public int b6289;
+ public int b6290;
+ public int b6291;
+ public int b6292;
+ public int b6293;
+ public int b6294;
+ public int b6295;
+ public int b6296;
+ public int b6297;
+ public int b6298;
+ public int b6299;
+ public int b6300;
+ public int b6301;
+ public int b6302;
+ public int b6303;
+ public int b6304;
+ public int b6305;
+ public int b6306;
+ public int b6307;
+ public int b6308;
+ public int b6309;
+ public int b6310;
+ public int b6311;
+ public int b6312;
+ public int b6313;
+ public int b6314;
+ public int b6315;
+ public int b6316;
+ public int b6317;
+ public int b6318;
+ public int b6319;
+ public int b6320;
+ public int b6321;
+ public int b6322;
+ public int b6323;
+ public int b6324;
+ public int b6325;
+ public int b6326;
+ public int b6327;
+ public int b6328;
+ public int b6329;
+ public int b6330;
+ public int b6331;
+ public int b6332;
+ public int b6333;
+ public int b6334;
+ public int b6335;
+ public int b6336;
+ public int b6337;
+ public int b6338;
+ public int b6339;
+ public int b6340;
+ public int b6341;
+ public int b6342;
+ public int b6343;
+ public int b6344;
+ public int b6345;
+ public int b6346;
+ public int b6347;
+ public int b6348;
+ public int b6349;
+ public int b6350;
+ public int b6351;
+ public int b6352;
+ public int b6353;
+ public int b6354;
+ public int b6355;
+ public int b6356;
+ public int b6357;
+ public int b6358;
+ public int b6359;
+ public int b6360;
+ public int b6361;
+ public int b6362;
+ public int b6363;
+ public int b6364;
+ public int b6365;
+ public int b6366;
+ public int b6367;
+ public int b6368;
+ public int b6369;
+ public int b6370;
+ public int b6371;
+ public int b6372;
+ public int b6373;
+ public int b6374;
+ public int b6375;
+ public int b6376;
+ public int b6377;
+ public int b6378;
+ public int b6379;
+ public int b6380;
+ public int b6381;
+ public int b6382;
+ public int b6383;
+ public int b6384;
+ public int b6385;
+ public int b6386;
+ public int b6387;
+ public int b6388;
+ public int b6389;
+ public int b6390;
+ public int b6391;
+ public int b6392;
+ public int b6393;
+ public int b6394;
+ public int b6395;
+ public int b6396;
+ public int b6397;
+ public int b6398;
+ public int b6399;
+ public int b6400;
+ public int b6401;
+ public int b6402;
+ public int b6403;
+ public int b6404;
+ public int b6405;
+ public int b6406;
+ public int b6407;
+ public int b6408;
+ public int b6409;
+ public int b6410;
+ public int b6411;
+ public int b6412;
+ public int b6413;
+ public int b6414;
+ public int b6415;
+ public int b6416;
+ public int b6417;
+ public int b6418;
+ public int b6419;
+ public int b6420;
+ public int b6421;
+ public int b6422;
+ public int b6423;
+ public int b6424;
+ public int b6425;
+ public int b6426;
+ public int b6427;
+ public int b6428;
+ public int b6429;
+ public int b6430;
+ public int b6431;
+ public int b6432;
+ public int b6433;
+ public int b6434;
+ public int b6435;
+ public int b6436;
+ public int b6437;
+ public int b6438;
+ public int b6439;
+ public int b6440;
+ public int b6441;
+ public int b6442;
+ public int b6443;
+ public int b6444;
+ public int b6445;
+ public int b6446;
+ public int b6447;
+ public int b6448;
+ public int b6449;
+ public int b6450;
+ public int b6451;
+ public int b6452;
+ public int b6453;
+ public int b6454;
+ public int b6455;
+ public int b6456;
+ public int b6457;
+ public int b6458;
+ public int b6459;
+ public int b6460;
+ public int b6461;
+ public int b6462;
+ public int b6463;
+ public int b6464;
+ public int b6465;
+ public int b6466;
+ public int b6467;
+ public int b6468;
+ public int b6469;
+ public int b6470;
+ public int b6471;
+ public int b6472;
+ public int b6473;
+ public int b6474;
+ public int b6475;
+ public int b6476;
+ public int b6477;
+ public int b6478;
+ public int b6479;
+ public int b6480;
+ public int b6481;
+ public int b6482;
+ public int b6483;
+ public int b6484;
+ public int b6485;
+ public int b6486;
+ public int b6487;
+ public int b6488;
+ public int b6489;
+ public int b6490;
+ public int b6491;
+ public int b6492;
+ public int b6493;
+ public int b6494;
+ public int b6495;
+ public int b6496;
+ public int b6497;
+ public int b6498;
+ public int b6499;
+ public int b6500;
+ public int b6501;
+ public int b6502;
+ public int b6503;
+ public int b6504;
+ public int b6505;
+ public int b6506;
+ public int b6507;
+ public int b6508;
+ public int b6509;
+ public int b6510;
+ public int b6511;
+ public int b6512;
+ public int b6513;
+ public int b6514;
+ public int b6515;
+ public int b6516;
+ public int b6517;
+ public int b6518;
+ public int b6519;
+ public int b6520;
+ public int b6521;
+ public int b6522;
+ public int b6523;
+ public int b6524;
+ public int b6525;
+ public int b6526;
+ public int b6527;
+ public int b6528;
+ public int b6529;
+ public int b6530;
+ public int b6531;
+ public int b6532;
+ public int b6533;
+ public int b6534;
+ public int b6535;
+ public int b6536;
+ public int b6537;
+ public int b6538;
+ public int b6539;
+ public int b6540;
+ public int b6541;
+ public int b6542;
+ public int b6543;
+ public int b6544;
+ public int b6545;
+ public int b6546;
+ public int b6547;
+ public int b6548;
+ public int b6549;
+ public int b6550;
+ public int b6551;
+ public int b6552;
+ public int b6553;
+ public int b6554;
+ public int b6555;
+ public int b6556;
+ public int b6557;
+ public int b6558;
+ public int b6559;
+ public int b6560;
+ public int b6561;
+ public int b6562;
+ public int b6563;
+ public int b6564;
+ public int b6565;
+ public int b6566;
+ public int b6567;
+ public int b6568;
+ public int b6569;
+ public int b6570;
+ public int b6571;
+ public int b6572;
+ public int b6573;
+ public int b6574;
+ public int b6575;
+ public int b6576;
+ public int b6577;
+ public int b6578;
+ public int b6579;
+ public int b6580;
+ public int b6581;
+ public int b6582;
+ public int b6583;
+ public int b6584;
+ public int b6585;
+ public int b6586;
+ public int b6587;
+ public int b6588;
+ public int b6589;
+ public int b6590;
+ public int b6591;
+ public int b6592;
+ public int b6593;
+ public int b6594;
+ public int b6595;
+ public int b6596;
+ public int b6597;
+ public int b6598;
+ public int b6599;
+ public int b6600;
+ public int b6601;
+ public int b6602;
+ public int b6603;
+ public int b6604;
+ public int b6605;
+ public int b6606;
+ public int b6607;
+ public int b6608;
+ public int b6609;
+ public int b6610;
+ public int b6611;
+ public int b6612;
+ public int b6613;
+ public int b6614;
+ public int b6615;
+ public int b6616;
+ public int b6617;
+ public int b6618;
+ public int b6619;
+ public int b6620;
+ public int b6621;
+ public int b6622;
+ public int b6623;
+ public int b6624;
+ public int b6625;
+ public int b6626;
+ public int b6627;
+ public int b6628;
+ public int b6629;
+ public int b6630;
+ public int b6631;
+ public int b6632;
+ public int b6633;
+ public int b6634;
+ public int b6635;
+ public int b6636;
+ public int b6637;
+ public int b6638;
+ public int b6639;
+ public int b6640;
+ public int b6641;
+ public int b6642;
+ public int b6643;
+ public int b6644;
+ public int b6645;
+ public int b6646;
+ public int b6647;
+ public int b6648;
+ public int b6649;
+ public int b6650;
+ public int b6651;
+ public int b6652;
+ public int b6653;
+ public int b6654;
+ public int b6655;
+ public int b6656;
+ public int b6657;
+ public int b6658;
+ public int b6659;
+ public int b6660;
+ public int b6661;
+ public int b6662;
+ public int b6663;
+ public int b6664;
+ public int b6665;
+ public int b6666;
+ public int b6667;
+ public int b6668;
+ public int b6669;
+ public int b6670;
+ public int b6671;
+ public int b6672;
+ public int b6673;
+ public int b6674;
+ public int b6675;
+ public int b6676;
+ public int b6677;
+ public int b6678;
+ public int b6679;
+ public int b6680;
+ public int b6681;
+ public int b6682;
+ public int b6683;
+ public int b6684;
+ public int b6685;
+ public int b6686;
+ public int b6687;
+ public int b6688;
+ public int b6689;
+ public int b6690;
+ public int b6691;
+ public int b6692;
+ public int b6693;
+ public int b6694;
+ public int b6695;
+ public int b6696;
+ public int b6697;
+ public int b6698;
+ public int b6699;
+ public int b6700;
+ public int b6701;
+ public int b6702;
+ public int b6703;
+ public int b6704;
+ public int b6705;
+ public int b6706;
+ public int b6707;
+ public int b6708;
+ public int b6709;
+ public int b6710;
+ public int b6711;
+ public int b6712;
+ public int b6713;
+ public int b6714;
+ public int b6715;
+ public int b6716;
+ public int b6717;
+ public int b6718;
+ public int b6719;
+ public int b6720;
+ public int b6721;
+ public int b6722;
+ public int b6723;
+ public int b6724;
+ public int b6725;
+ public int b6726;
+ public int b6727;
+ public int b6728;
+ public int b6729;
+ public int b6730;
+ public int b6731;
+ public int b6732;
+ public int b6733;
+ public int b6734;
+ public int b6735;
+ public int b6736;
+ public int b6737;
+ public int b6738;
+ public int b6739;
+ public int b6740;
+ public int b6741;
+ public int b6742;
+ public int b6743;
+ public int b6744;
+ public int b6745;
+ public int b6746;
+ public int b6747;
+ public int b6748;
+ public int b6749;
+ public int b6750;
+ public int b6751;
+ public int b6752;
+ public int b6753;
+ public int b6754;
+ public int b6755;
+ public int b6756;
+ public int b6757;
+ public int b6758;
+ public int b6759;
+ public int b6760;
+ public int b6761;
+ public int b6762;
+ public int b6763;
+ public int b6764;
+ public int b6765;
+ public int b6766;
+ public int b6767;
+ public int b6768;
+ public int b6769;
+ public int b6770;
+ public int b6771;
+ public int b6772;
+ public int b6773;
+ public int b6774;
+ public int b6775;
+ public int b6776;
+ public int b6777;
+ public int b6778;
+ public int b6779;
+ public int b6780;
+ public int b6781;
+ public int b6782;
+ public int b6783;
+ public int b6784;
+ public int b6785;
+ public int b6786;
+ public int b6787;
+ public int b6788;
+ public int b6789;
+ public int b6790;
+ public int b6791;
+ public int b6792;
+ public int b6793;
+ public int b6794;
+ public int b6795;
+ public int b6796;
+ public int b6797;
+ public int b6798;
+ public int b6799;
+ public int b6800;
+ public int b6801;
+ public int b6802;
+ public int b6803;
+ public int b6804;
+ public int b6805;
+ public int b6806;
+ public int b6807;
+ public int b6808;
+ public int b6809;
+ public int b6810;
+ public int b6811;
+ public int b6812;
+ public int b6813;
+ public int b6814;
+ public int b6815;
+ public int b6816;
+ public int b6817;
+ public int b6818;
+ public int b6819;
+ public int b6820;
+ public int b6821;
+ public int b6822;
+ public int b6823;
+ public int b6824;
+ public int b6825;
+ public int b6826;
+ public int b6827;
+ public int b6828;
+ public int b6829;
+ public int b6830;
+ public int b6831;
+ public int b6832;
+ public int b6833;
+ public int b6834;
+ public int b6835;
+ public int b6836;
+ public int b6837;
+ public int b6838;
+ public int b6839;
+ public int b6840;
+ public int b6841;
+ public int b6842;
+ public int b6843;
+ public int b6844;
+ public int b6845;
+ public int b6846;
+ public int b6847;
+ public int b6848;
+ public int b6849;
+ public int b6850;
+ public int b6851;
+ public int b6852;
+ public int b6853;
+ public int b6854;
+ public int b6855;
+ public int b6856;
+ public int b6857;
+ public int b6858;
+ public int b6859;
+ public int b6860;
+ public int b6861;
+ public int b6862;
+ public int b6863;
+ public int b6864;
+ public int b6865;
+ public int b6866;
+ public int b6867;
+ public int b6868;
+ public int b6869;
+ public int b6870;
+ public int b6871;
+ public int b6872;
+ public int b6873;
+ public int b6874;
+ public int b6875;
+ public int b6876;
+ public int b6877;
+ public int b6878;
+ public int b6879;
+ public int b6880;
+ public int b6881;
+ public int b6882;
+ public int b6883;
+ public int b6884;
+ public int b6885;
+ public int b6886;
+ public int b6887;
+ public int b6888;
+ public int b6889;
+ public int b6890;
+ public int b6891;
+ public int b6892;
+ public int b6893;
+ public int b6894;
+ public int b6895;
+ public int b6896;
+ public int b6897;
+ public int b6898;
+ public int b6899;
+ public int b6900;
+ public int b6901;
+ public int b6902;
+ public int b6903;
+ public int b6904;
+ public int b6905;
+ public int b6906;
+ public int b6907;
+ public int b6908;
+ public int b6909;
+ public int b6910;
+ public int b6911;
+ public int b6912;
+ public int b6913;
+ public int b6914;
+ public int b6915;
+ public int b6916;
+ public int b6917;
+ public int b6918;
+ public int b6919;
+ public int b6920;
+ public int b6921;
+ public int b6922;
+ public int b6923;
+ public int b6924;
+ public int b6925;
+ public int b6926;
+ public int b6927;
+ public int b6928;
+ public int b6929;
+ public int b6930;
+ public int b6931;
+ public int b6932;
+ public int b6933;
+ public int b6934;
+ public int b6935;
+ public int b6936;
+ public int b6937;
+ public int b6938;
+ public int b6939;
+ public int b6940;
+ public int b6941;
+ public int b6942;
+ public int b6943;
+ public int b6944;
+ public int b6945;
+ public int b6946;
+ public int b6947;
+ public int b6948;
+ public int b6949;
+ public int b6950;
+ public int b6951;
+ public int b6952;
+ public int b6953;
+ public int b6954;
+ public int b6955;
+ public int b6956;
+ public int b6957;
+ public int b6958;
+ public int b6959;
+ public int b6960;
+ public int b6961;
+ public int b6962;
+ public int b6963;
+ public int b6964;
+ public int b6965;
+ public int b6966;
+ public int b6967;
+ public int b6968;
+ public int b6969;
+ public int b6970;
+ public int b6971;
+ public int b6972;
+ public int b6973;
+ public int b6974;
+ public int b6975;
+ public int b6976;
+ public int b6977;
+ public int b6978;
+ public int b6979;
+ public int b6980;
+ public int b6981;
+ public int b6982;
+ public int b6983;
+ public int b6984;
+ public int b6985;
+ public int b6986;
+ public int b6987;
+ public int b6988;
+ public int b6989;
+ public int b6990;
+ public int b6991;
+ public int b6992;
+ public int b6993;
+ public int b6994;
+ public int b6995;
+ public int b6996;
+ public int b6997;
+ public int b6998;
+ public int b6999;
+ public int b7000;
+ public int b7001;
+ public int b7002;
+ public int b7003;
+ public int b7004;
+ public int b7005;
+ public int b7006;
+ public int b7007;
+ public int b7008;
+ public int b7009;
+ public int b7010;
+ public int b7011;
+ public int b7012;
+ public int b7013;
+ public int b7014;
+ public int b7015;
+ public int b7016;
+ public int b7017;
+ public int b7018;
+ public int b7019;
+ public int b7020;
+ public int b7021;
+ public int b7022;
+ public int b7023;
+ public int b7024;
+ public int b7025;
+ public int b7026;
+ public int b7027;
+ public int b7028;
+ public int b7029;
+ public int b7030;
+ public int b7031;
+ public int b7032;
+ public int b7033;
+ public int b7034;
+ public int b7035;
+ public int b7036;
+ public int b7037;
+ public int b7038;
+ public int b7039;
+ public int b7040;
+ public int b7041;
+ public int b7042;
+ public int b7043;
+ public int b7044;
+ public int b7045;
+ public int b7046;
+ public int b7047;
+ public int b7048;
+ public int b7049;
+ public int b7050;
+ public int b7051;
+ public int b7052;
+ public int b7053;
+ public int b7054;
+ public int b7055;
+ public int b7056;
+ public int b7057;
+ public int b7058;
+ public int b7059;
+ public int b7060;
+ public int b7061;
+ public int b7062;
+ public int b7063;
+ public int b7064;
+ public int b7065;
+ public int b7066;
+ public int b7067;
+ public int b7068;
+ public int b7069;
+ public int b7070;
+ public int b7071;
+ public int b7072;
+ public int b7073;
+ public int b7074;
+ public int b7075;
+ public int b7076;
+ public int b7077;
+ public int b7078;
+ public int b7079;
+ public int b7080;
+ public int b7081;
+ public int b7082;
+ public int b7083;
+ public int b7084;
+ public int b7085;
+ public int b7086;
+ public int b7087;
+ public int b7088;
+ public int b7089;
+ public int b7090;
+ public int b7091;
+ public int b7092;
+ public int b7093;
+ public int b7094;
+ public int b7095;
+ public int b7096;
+ public int b7097;
+ public int b7098;
+ public int b7099;
+ public int b7100;
+ public int b7101;
+ public int b7102;
+ public int b7103;
+ public int b7104;
+ public int b7105;
+ public int b7106;
+ public int b7107;
+ public int b7108;
+ public int b7109;
+ public int b7110;
+ public int b7111;
+ public int b7112;
+ public int b7113;
+ public int b7114;
+ public int b7115;
+ public int b7116;
+ public int b7117;
+ public int b7118;
+ public int b7119;
+ public int b7120;
+ public int b7121;
+ public int b7122;
+ public int b7123;
+ public int b7124;
+ public int b7125;
+ public int b7126;
+ public int b7127;
+ public int b7128;
+ public int b7129;
+ public int b7130;
+ public int b7131;
+ public int b7132;
+ public int b7133;
+ public int b7134;
+ public int b7135;
+ public int b7136;
+ public int b7137;
+ public int b7138;
+ public int b7139;
+ public int b7140;
+ public int b7141;
+ public int b7142;
+ public int b7143;
+ public int b7144;
+ public int b7145;
+ public int b7146;
+ public int b7147;
+ public int b7148;
+ public int b7149;
+ public int b7150;
+ public int b7151;
+ public int b7152;
+ public int b7153;
+ public int b7154;
+ public int b7155;
+ public int b7156;
+ public int b7157;
+ public int b7158;
+ public int b7159;
+ public int b7160;
+ public int b7161;
+ public int b7162;
+ public int b7163;
+ public int b7164;
+ public int b7165;
+ public int b7166;
+ public int b7167;
+ public int b7168;
+ public int b7169;
+ public int b7170;
+ public int b7171;
+ public int b7172;
+ public int b7173;
+ public int b7174;
+ public int b7175;
+ public int b7176;
+ public int b7177;
+ public int b7178;
+ public int b7179;
+ public int b7180;
+ public int b7181;
+ public int b7182;
+ public int b7183;
+ public int b7184;
+ public int b7185;
+ public int b7186;
+ public int b7187;
+ public int b7188;
+ public int b7189;
+ public int b7190;
+ public int b7191;
+ public int b7192;
+ public int b7193;
+ public int b7194;
+ public int b7195;
+ public int b7196;
+ public int b7197;
+ public int b7198;
+ public int b7199;
+ public int b7200;
+ public int b7201;
+ public int b7202;
+ public int b7203;
+ public int b7204;
+ public int b7205;
+ public int b7206;
+ public int b7207;
+ public int b7208;
+ public int b7209;
+ public int b7210;
+ public int b7211;
+ public int b7212;
+ public int b7213;
+ public int b7214;
+ public int b7215;
+ public int b7216;
+ public int b7217;
+ public int b7218;
+ public int b7219;
+ public int b7220;
+ public int b7221;
+ public int b7222;
+ public int b7223;
+ public int b7224;
+ public int b7225;
+ public int b7226;
+ public int b7227;
+ public int b7228;
+ public int b7229;
+ public int b7230;
+ public int b7231;
+ public int b7232;
+ public int b7233;
+ public int b7234;
+ public int b7235;
+ public int b7236;
+ public int b7237;
+ public int b7238;
+ public int b7239;
+ public int b7240;
+ public int b7241;
+ public int b7242;
+ public int b7243;
+ public int b7244;
+ public int b7245;
+ public int b7246;
+ public int b7247;
+ public int b7248;
+ public int b7249;
+ public int b7250;
+ public int b7251;
+ public int b7252;
+ public int b7253;
+ public int b7254;
+ public int b7255;
+ public int b7256;
+ public int b7257;
+ public int b7258;
+ public int b7259;
+ public int b7260;
+ public int b7261;
+ public int b7262;
+ public int b7263;
+ public int b7264;
+ public int b7265;
+ public int b7266;
+ public int b7267;
+ public int b7268;
+ public int b7269;
+ public int b7270;
+ public int b7271;
+ public int b7272;
+ public int b7273;
+ public int b7274;
+ public int b7275;
+ public int b7276;
+ public int b7277;
+ public int b7278;
+ public int b7279;
+ public int b7280;
+ public int b7281;
+ public int b7282;
+ public int b7283;
+ public int b7284;
+ public int b7285;
+ public int b7286;
+ public int b7287;
+ public int b7288;
+ public int b7289;
+ public int b7290;
+ public int b7291;
+ public int b7292;
+ public int b7293;
+ public int b7294;
+ public int b7295;
+ public int b7296;
+ public int b7297;
+ public int b7298;
+ public int b7299;
+ public int b7300;
+ public int b7301;
+ public int b7302;
+ public int b7303;
+ public int b7304;
+ public int b7305;
+ public int b7306;
+ public int b7307;
+ public int b7308;
+ public int b7309;
+ public int b7310;
+ public int b7311;
+ public int b7312;
+ public int b7313;
+ public int b7314;
+ public int b7315;
+ public int b7316;
+ public int b7317;
+ public int b7318;
+ public int b7319;
+ public int b7320;
+ public int b7321;
+ public int b7322;
+ public int b7323;
+ public int b7324;
+ public int b7325;
+ public int b7326;
+ public int b7327;
+ public int b7328;
+ public int b7329;
+ public int b7330;
+ public int b7331;
+ public int b7332;
+ public int b7333;
+ public int b7334;
+ public int b7335;
+ public int b7336;
+ public int b7337;
+ public int b7338;
+ public int b7339;
+ public int b7340;
+ public int b7341;
+ public int b7342;
+ public int b7343;
+ public int b7344;
+ public int b7345;
+ public int b7346;
+ public int b7347;
+ public int b7348;
+ public int b7349;
+ public int b7350;
+ public int b7351;
+ public int b7352;
+ public int b7353;
+ public int b7354;
+ public int b7355;
+ public int b7356;
+ public int b7357;
+ public int b7358;
+ public int b7359;
+ public int b7360;
+ public int b7361;
+ public int b7362;
+ public int b7363;
+ public int b7364;
+ public int b7365;
+ public int b7366;
+ public int b7367;
+ public int b7368;
+ public int b7369;
+ public int b7370;
+ public int b7371;
+ public int b7372;
+ public int b7373;
+ public int b7374;
+ public int b7375;
+ public int b7376;
+ public int b7377;
+ public int b7378;
+ public int b7379;
+ public int b7380;
+ public int b7381;
+ public int b7382;
+ public int b7383;
+ public int b7384;
+ public int b7385;
+ public int b7386;
+ public int b7387;
+ public int b7388;
+ public int b7389;
+ public int b7390;
+ public int b7391;
+ public int b7392;
+ public int b7393;
+ public int b7394;
+ public int b7395;
+ public int b7396;
+ public int b7397;
+ public int b7398;
+ public int b7399;
+ public int b7400;
+ public int b7401;
+ public int b7402;
+ public int b7403;
+ public int b7404;
+ public int b7405;
+ public int b7406;
+ public int b7407;
+ public int b7408;
+ public int b7409;
+ public int b7410;
+ public int b7411;
+ public int b7412;
+ public int b7413;
+ public int b7414;
+ public int b7415;
+ public int b7416;
+ public int b7417;
+ public int b7418;
+ public int b7419;
+ public int b7420;
+ public int b7421;
+ public int b7422;
+ public int b7423;
+ public int b7424;
+ public int b7425;
+ public int b7426;
+ public int b7427;
+ public int b7428;
+ public int b7429;
+ public int b7430;
+ public int b7431;
+ public int b7432;
+ public int b7433;
+ public int b7434;
+ public int b7435;
+ public int b7436;
+ public int b7437;
+ public int b7438;
+ public int b7439;
+ public int b7440;
+ public int b7441;
+ public int b7442;
+ public int b7443;
+ public int b7444;
+ public int b7445;
+ public int b7446;
+ public int b7447;
+ public int b7448;
+ public int b7449;
+ public int b7450;
+ public int b7451;
+ public int b7452;
+ public int b7453;
+ public int b7454;
+ public int b7455;
+ public int b7456;
+ public int b7457;
+ public int b7458;
+ public int b7459;
+ public int b7460;
+ public int b7461;
+ public int b7462;
+ public int b7463;
+ public int b7464;
+ public int b7465;
+ public int b7466;
+ public int b7467;
+ public int b7468;
+ public int b7469;
+ public int b7470;
+ public int b7471;
+ public int b7472;
+ public int b7473;
+ public int b7474;
+ public int b7475;
+ public int b7476;
+ public int b7477;
+ public int b7478;
+ public int b7479;
+ public int b7480;
+ public int b7481;
+ public int b7482;
+ public int b7483;
+ public int b7484;
+ public int b7485;
+ public int b7486;
+ public int b7487;
+ public int b7488;
+ public int b7489;
+ public int b7490;
+ public int b7491;
+ public int b7492;
+ public int b7493;
+ public int b7494;
+ public int b7495;
+ public int b7496;
+ public int b7497;
+ public int b7498;
+ public int b7499;
+ public int b7500;
+ public int b7501;
+ public int b7502;
+ public int b7503;
+ public int b7504;
+ public int b7505;
+ public int b7506;
+ public int b7507;
+ public int b7508;
+ public int b7509;
+ public int b7510;
+ public int b7511;
+ public int b7512;
+ public int b7513;
+ public int b7514;
+ public int b7515;
+ public int b7516;
+ public int b7517;
+ public int b7518;
+ public int b7519;
+ public int b7520;
+ public int b7521;
+ public int b7522;
+ public int b7523;
+ public int b7524;
+ public int b7525;
+ public int b7526;
+ public int b7527;
+ public int b7528;
+ public int b7529;
+ public int b7530;
+ public int b7531;
+ public int b7532;
+ public int b7533;
+ public int b7534;
+ public int b7535;
+ public int b7536;
+ public int b7537;
+ public int b7538;
+ public int b7539;
+ public int b7540;
+ public int b7541;
+ public int b7542;
+ public int b7543;
+ public int b7544;
+ public int b7545;
+ public int b7546;
+ public int b7547;
+ public int b7548;
+ public int b7549;
+ public int b7550;
+ public int b7551;
+ public int b7552;
+ public int b7553;
+ public int b7554;
+ public int b7555;
+ public int b7556;
+ public int b7557;
+ public int b7558;
+ public int b7559;
+ public int b7560;
+ public int b7561;
+ public int b7562;
+ public int b7563;
+ public int b7564;
+ public int b7565;
+ public int b7566;
+ public int b7567;
+ public int b7568;
+ public int b7569;
+ public int b7570;
+ public int b7571;
+ public int b7572;
+ public int b7573;
+ public int b7574;
+ public int b7575;
+ public int b7576;
+ public int b7577;
+ public int b7578;
+ public int b7579;
+ public int b7580;
+ public int b7581;
+ public int b7582;
+ public int b7583;
+ public int b7584;
+ public int b7585;
+ public int b7586;
+ public int b7587;
+ public int b7588;
+ public int b7589;
+ public int b7590;
+ public int b7591;
+ public int b7592;
+ public int b7593;
+ public int b7594;
+ public int b7595;
+ public int b7596;
+ public int b7597;
+ public int b7598;
+ public int b7599;
+ public int b7600;
+ public int b7601;
+ public int b7602;
+ public int b7603;
+ public int b7604;
+ public int b7605;
+ public int b7606;
+ public int b7607;
+ public int b7608;
+ public int b7609;
+ public int b7610;
+ public int b7611;
+ public int b7612;
+ public int b7613;
+ public int b7614;
+ public int b7615;
+ public int b7616;
+ public int b7617;
+ public int b7618;
+ public int b7619;
+ public int b7620;
+ public int b7621;
+ public int b7622;
+ public int b7623;
+ public int b7624;
+ public int b7625;
+ public int b7626;
+ public int b7627;
+ public int b7628;
+ public int b7629;
+ public int b7630;
+ public int b7631;
+ public int b7632;
+ public int b7633;
+ public int b7634;
+ public int b7635;
+ public int b7636;
+ public int b7637;
+ public int b7638;
+ public int b7639;
+ public int b7640;
+ public int b7641;
+ public int b7642;
+ public int b7643;
+ public int b7644;
+ public int b7645;
+ public int b7646;
+ public int b7647;
+ public int b7648;
+ public int b7649;
+ public int b7650;
+ public int b7651;
+ public int b7652;
+ public int b7653;
+ public int b7654;
+ public int b7655;
+ public int b7656;
+ public int b7657;
+ public int b7658;
+ public int b7659;
+ public int b7660;
+ public int b7661;
+ public int b7662;
+ public int b7663;
+ public int b7664;
+ public int b7665;
+ public int b7666;
+ public int b7667;
+ public int b7668;
+ public int b7669;
+ public int b7670;
+ public int b7671;
+ public int b7672;
+ public int b7673;
+ public int b7674;
+ public int b7675;
+ public int b7676;
+ public int b7677;
+ public int b7678;
+ public int b7679;
+ public int b7680;
+ public int b7681;
+ public int b7682;
+ public int b7683;
+ public int b7684;
+ public int b7685;
+ public int b7686;
+ public int b7687;
+ public int b7688;
+ public int b7689;
+ public int b7690;
+ public int b7691;
+ public int b7692;
+ public int b7693;
+ public int b7694;
+ public int b7695;
+ public int b7696;
+ public int b7697;
+ public int b7698;
+ public int b7699;
+ public int b7700;
+ public int b7701;
+ public int b7702;
+ public int b7703;
+ public int b7704;
+ public int b7705;
+ public int b7706;
+ public int b7707;
+ public int b7708;
+ public int b7709;
+ public int b7710;
+ public int b7711;
+ public int b7712;
+ public int b7713;
+ public int b7714;
+ public int b7715;
+ public int b7716;
+ public int b7717;
+ public int b7718;
+ public int b7719;
+ public int b7720;
+ public int b7721;
+ public int b7722;
+ public int b7723;
+ public int b7724;
+ public int b7725;
+ public int b7726;
+ public int b7727;
+ public int b7728;
+ public int b7729;
+ public int b7730;
+ public int b7731;
+ public int b7732;
+ public int b7733;
+ public int b7734;
+ public int b7735;
+ public int b7736;
+ public int b7737;
+ public int b7738;
+ public int b7739;
+ public int b7740;
+ public int b7741;
+ public int b7742;
+ public int b7743;
+ public int b7744;
+ public int b7745;
+ public int b7746;
+ public int b7747;
+ public int b7748;
+ public int b7749;
+ public int b7750;
+ public int b7751;
+ public int b7752;
+ public int b7753;
+ public int b7754;
+ public int b7755;
+ public int b7756;
+ public int b7757;
+ public int b7758;
+ public int b7759;
+ public int b7760;
+ public int b7761;
+ public int b7762;
+ public int b7763;
+ public int b7764;
+ public int b7765;
+ public int b7766;
+ public int b7767;
+ public int b7768;
+ public int b7769;
+ public int b7770;
+ public int b7771;
+ public int b7772;
+ public int b7773;
+ public int b7774;
+ public int b7775;
+ public int b7776;
+ public int b7777;
+ public int b7778;
+ public int b7779;
+ public int b7780;
+ public int b7781;
+ public int b7782;
+ public int b7783;
+ public int b7784;
+ public int b7785;
+ public int b7786;
+ public int b7787;
+ public int b7788;
+ public int b7789;
+ public int b7790;
+ public int b7791;
+ public int b7792;
+ public int b7793;
+ public int b7794;
+ public int b7795;
+ public int b7796;
+ public int b7797;
+ public int b7798;
+ public int b7799;
+ public int b7800;
+ public int b7801;
+ public int b7802;
+ public int b7803;
+ public int b7804;
+ public int b7805;
+ public int b7806;
+ public int b7807;
+ public int b7808;
+ public int b7809;
+ public int b7810;
+ public int b7811;
+ public int b7812;
+ public int b7813;
+ public int b7814;
+ public int b7815;
+ public int b7816;
+ public int b7817;
+ public int b7818;
+ public int b7819;
+ public int b7820;
+ public int b7821;
+ public int b7822;
+ public int b7823;
+ public int b7824;
+ public int b7825;
+ public int b7826;
+ public int b7827;
+ public int b7828;
+ public int b7829;
+ public int b7830;
+ public int b7831;
+ public int b7832;
+ public int b7833;
+ public int b7834;
+ public int b7835;
+ public int b7836;
+ public int b7837;
+ public int b7838;
+ public int b7839;
+ public int b7840;
+ public int b7841;
+ public int b7842;
+ public int b7843;
+ public int b7844;
+ public int b7845;
+ public int b7846;
+ public int b7847;
+ public int b7848;
+ public int b7849;
+ public int b7850;
+ public int b7851;
+ public int b7852;
+ public int b7853;
+ public int b7854;
+ public int b7855;
+ public int b7856;
+ public int b7857;
+ public int b7858;
+ public int b7859;
+ public int b7860;
+ public int b7861;
+ public int b7862;
+ public int b7863;
+ public int b7864;
+ public int b7865;
+ public int b7866;
+ public int b7867;
+ public int b7868;
+ public int b7869;
+ public int b7870;
+ public int b7871;
+ public int b7872;
+ public int b7873;
+ public int b7874;
+ public int b7875;
+ public int b7876;
+ public int b7877;
+ public int b7878;
+ public int b7879;
+ public int b7880;
+ public int b7881;
+ public int b7882;
+ public int b7883;
+ public int b7884;
+ public int b7885;
+ public int b7886;
+ public int b7887;
+ public int b7888;
+ public int b7889;
+ public int b7890;
+ public int b7891;
+ public int b7892;
+ public int b7893;
+ public int b7894;
+ public int b7895;
+ public int b7896;
+ public int b7897;
+ public int b7898;
+ public int b7899;
+ public int b7900;
+ public int b7901;
+ public int b7902;
+ public int b7903;
+ public int b7904;
+ public int b7905;
+ public int b7906;
+ public int b7907;
+ public int b7908;
+ public int b7909;
+ public int b7910;
+ public int b7911;
+ public int b7912;
+ public int b7913;
+ public int b7914;
+ public int b7915;
+ public int b7916;
+ public int b7917;
+ public int b7918;
+ public int b7919;
+ public int b7920;
+ public int b7921;
+ public int b7922;
+ public int b7923;
+ public int b7924;
+ public int b7925;
+ public int b7926;
+ public int b7927;
+ public int b7928;
+ public int b7929;
+ public int b7930;
+ public int b7931;
+ public int b7932;
+ public int b7933;
+ public int b7934;
+ public int b7935;
+ public int b7936;
+ public int b7937;
+ public int b7938;
+ public int b7939;
+ public int b7940;
+ public int b7941;
+ public int b7942;
+ public int b7943;
+ public int b7944;
+ public int b7945;
+ public int b7946;
+ public int b7947;
+ public int b7948;
+ public int b7949;
+ public int b7950;
+ public int b7951;
+ public int b7952;
+ public int b7953;
+ public int b7954;
+ public int b7955;
+ public int b7956;
+ public int b7957;
+ public int b7958;
+ public int b7959;
+ public int b7960;
+ public int b7961;
+ public int b7962;
+ public int b7963;
+ public int b7964;
+ public int b7965;
+ public int b7966;
+ public int b7967;
+ public int b7968;
+ public int b7969;
+ public int b7970;
+ public int b7971;
+ public int b7972;
+ public int b7973;
+ public int b7974;
+ public int b7975;
+ public int b7976;
+ public int b7977;
+ public int b7978;
+ public int b7979;
+ public int b7980;
+ public int b7981;
+ public int b7982;
+ public int b7983;
+ public int b7984;
+ public int b7985;
+ public int b7986;
+ public int b7987;
+ public int b7988;
+ public int b7989;
+ public int b7990;
+ public int b7991;
+ public int b7992;
+ public int b7993;
+ public int b7994;
+ public int b7995;
+ public int b7996;
+ public int b7997;
+ public int b7998;
+ public int b7999;
+ public int b8000;
+ public int b8001;
+ public int b8002;
+ public int b8003;
+ public int b8004;
+ public int b8005;
+ public int b8006;
+ public int b8007;
+ public int b8008;
+ public int b8009;
+ public int b8010;
+ public int b8011;
+ public int b8012;
+ public int b8013;
+ public int b8014;
+ public int b8015;
+ public int b8016;
+ public int b8017;
+ public int b8018;
+ public int b8019;
+ public int b8020;
+ public int b8021;
+ public int b8022;
+ public int b8023;
+ public int b8024;
+ public int b8025;
+ public int b8026;
+ public int b8027;
+ public int b8028;
+ public int b8029;
+ public int b8030;
+ public int b8031;
+ public int b8032;
+ public int b8033;
+ public int b8034;
+ public int b8035;
+ public int b8036;
+ public int b8037;
+ public int b8038;
+ public int b8039;
+ public int b8040;
+ public int b8041;
+ public int b8042;
+ public int b8043;
+ public int b8044;
+ public int b8045;
+ public int b8046;
+ public int b8047;
+ public int b8048;
+ public int b8049;
+ public int b8050;
+ public int b8051;
+ public int b8052;
+ public int b8053;
+ public int b8054;
+ public int b8055;
+ public int b8056;
+ public int b8057;
+ public int b8058;
+ public int b8059;
+ public int b8060;
+ public int b8061;
+ public int b8062;
+ public int b8063;
+ public int b8064;
+ public int b8065;
+ public int b8066;
+ public int b8067;
+ public int b8068;
+ public int b8069;
+ public int b8070;
+ public int b8071;
+ public int b8072;
+ public int b8073;
+ public int b8074;
+ public int b8075;
+ public int b8076;
+ public int b8077;
+ public int b8078;
+ public int b8079;
+ public int b8080;
+ public int b8081;
+ public int b8082;
+ public int b8083;
+ public int b8084;
+ public int b8085;
+ public int b8086;
+ public int b8087;
+ public int b8088;
+ public int b8089;
+ public int b8090;
+ public int b8091;
+ public int b8092;
+ public int b8093;
+ public int b8094;
+ public int b8095;
+ public int b8096;
+ public int b8097;
+ public int b8098;
+ public int b8099;
+ public int b8100;
+ public int b8101;
+ public int b8102;
+ public int b8103;
+ public int b8104;
+ public int b8105;
+ public int b8106;
+ public int b8107;
+ public int b8108;
+ public int b8109;
+ public int b8110;
+ public int b8111;
+ public int b8112;
+ public int b8113;
+ public int b8114;
+ public int b8115;
+ public int b8116;
+ public int b8117;
+ public int b8118;
+ public int b8119;
+ public int b8120;
+ public int b8121;
+ public int b8122;
+ public int b8123;
+ public int b8124;
+ public int b8125;
+ public int b8126;
+ public int b8127;
+ public int b8128;
+ public int b8129;
+ public int b8130;
+ public int b8131;
+ public int b8132;
+ public int b8133;
+ public int b8134;
+ public int b8135;
+ public int b8136;
+ public int b8137;
+ public int b8138;
+ public int b8139;
+ public int b8140;
+ public int b8141;
+ public int b8142;
+ public int b8143;
+ public int b8144;
+ public int b8145;
+ public int b8146;
+ public int b8147;
+ public int b8148;
+ public int b8149;
+ public int b8150;
+ public int b8151;
+ public int b8152;
+ public int b8153;
+ public int b8154;
+ public int b8155;
+ public int b8156;
+ public int b8157;
+ public int b8158;
+ public int b8159;
+ public int b8160;
+ public int b8161;
+ public int b8162;
+ public int b8163;
+ public int b8164;
+ public int b8165;
+ public int b8166;
+ public int b8167;
+ public int b8168;
+ public int b8169;
+ public int b8170;
+ public int b8171;
+ public int b8172;
+ public int b8173;
+ public int b8174;
+ public int b8175;
+ public int b8176;
+ public int b8177;
+ public int b8178;
+ public int b8179;
+ public int b8180;
+ public int b8181;
+ public int b8182;
+ public int b8183;
+ public int b8184;
+ public int b8185;
+ public int b8186;
+ public int b8187;
+ public int b8188;
+ public int b8189;
+ public int b8190;
+ public int b8191;
+ public int b8192;
+ public int b8193;
+ public int b8194;
+ public int b8195;
+ public int b8196;
+ public int b8197;
+ public int b8198;
+ public int b8199;
+ public int b8200;
+ public int b8201;
+ public int b8202;
+ public int b8203;
+ public int b8204;
+ public int b8205;
+ public int b8206;
+ public int b8207;
+ public int b8208;
+ public int b8209;
+ public int b8210;
+ public int b8211;
+ public int b8212;
+ public int b8213;
+ public int b8214;
+ public int b8215;
+ public int b8216;
+ public int b8217;
+ public int b8218;
+ public int b8219;
+ public int b8220;
+ public int b8221;
+ public int b8222;
+ public int b8223;
+ public int b8224;
+ public int b8225;
+ public int b8226;
+ public int b8227;
+ public int b8228;
+ public int b8229;
+ public int b8230;
+ public int b8231;
+ public int b8232;
+ public int b8233;
+ public int b8234;
+ public int b8235;
+ public int b8236;
+ public int b8237;
+ public int b8238;
+ public int b8239;
+ public int b8240;
+ public int b8241;
+ public int b8242;
+ public int b8243;
+ public int b8244;
+ public int b8245;
+ public int b8246;
+ public int b8247;
+ public int b8248;
+ public int b8249;
+ public int b8250;
+ public int b8251;
+ public int b8252;
+ public int b8253;
+ public int b8254;
+ public int b8255;
+ public int b8256;
+ public int b8257;
+ public int b8258;
+ public int b8259;
+ public int b8260;
+ public int b8261;
+ public int b8262;
+ public int b8263;
+ public int b8264;
+ public int b8265;
+ public int b8266;
+ public int b8267;
+ public int b8268;
+ public int b8269;
+ public int b8270;
+ public int b8271;
+ public int b8272;
+ public int b8273;
+ public int b8274;
+ public int b8275;
+ public int b8276;
+ public int b8277;
+ public int b8278;
+ public int b8279;
+ public int b8280;
+ public int b8281;
+ public int b8282;
+ public int b8283;
+ public int b8284;
+ public int b8285;
+ public int b8286;
+ public int b8287;
+ public int b8288;
+ public int b8289;
+ public int b8290;
+ public int b8291;
+ public int b8292;
+ public int b8293;
+ public int b8294;
+ public int b8295;
+ public int b8296;
+ public int b8297;
+ public int b8298;
+ public int b8299;
+ public int b8300;
+ public int b8301;
+ public int b8302;
+ public int b8303;
+ public int b8304;
+ public int b8305;
+ public int b8306;
+ public int b8307;
+ public int b8308;
+ public int b8309;
+ public int b8310;
+ public int b8311;
+ public int b8312;
+ public int b8313;
+ public int b8314;
+ public int b8315;
+ public int b8316;
+ public int b8317;
+ public int b8318;
+ public int b8319;
+ public int b8320;
+ public int b8321;
+ public int b8322;
+ public int b8323;
+ public int b8324;
+ public int b8325;
+ public int b8326;
+ public int b8327;
+ public int b8328;
+ public int b8329;
+ public int b8330;
+ public int b8331;
+ public int b8332;
+ public int b8333;
+ public int b8334;
+ public int b8335;
+ public int b8336;
+ public int b8337;
+ public int b8338;
+ public int b8339;
+ public int b8340;
+ public int b8341;
+ public int b8342;
+ public int b8343;
+ public int b8344;
+ public int b8345;
+ public int b8346;
+ public int b8347;
+ public int b8348;
+ public int b8349;
+ public int b8350;
+ public int b8351;
+ public int b8352;
+ public int b8353;
+ public int b8354;
+ public int b8355;
+ public int b8356;
+ public int b8357;
+ public int b8358;
+ public int b8359;
+ public int b8360;
+ public int b8361;
+ public int b8362;
+ public int b8363;
+ public int b8364;
+ public int b8365;
+ public int b8366;
+ public int b8367;
+ public int b8368;
+ public int b8369;
+ public int b8370;
+ public int b8371;
+ public int b8372;
+ public int b8373;
+ public int b8374;
+ public int b8375;
+ public int b8376;
+ public int b8377;
+ public int b8378;
+ public int b8379;
+ public int b8380;
+ public int b8381;
+ public int b8382;
+ public int b8383;
+ public int b8384;
+ public int b8385;
+ public int b8386;
+ public int b8387;
+ public int b8388;
+ public int b8389;
+ public int b8390;
+ public int b8391;
+ public int b8392;
+ public int b8393;
+ public int b8394;
+ public int b8395;
+ public int b8396;
+ public int b8397;
+ public int b8398;
+ public int b8399;
+ public int b8400;
+ public int b8401;
+ public int b8402;
+ public int b8403;
+ public int b8404;
+ public int b8405;
+ public int b8406;
+ public int b8407;
+ public int b8408;
+ public int b8409;
+ public int b8410;
+ public int b8411;
+ public int b8412;
+ public int b8413;
+ public int b8414;
+ public int b8415;
+ public int b8416;
+ public int b8417;
+ public int b8418;
+ public int b8419;
+ public int b8420;
+ public int b8421;
+ public int b8422;
+ public int b8423;
+ public int b8424;
+ public int b8425;
+ public int b8426;
+ public int b8427;
+ public int b8428;
+ public int b8429;
+ public int b8430;
+ public int b8431;
+ public int b8432;
+ public int b8433;
+ public int b8434;
+ public int b8435;
+ public int b8436;
+ public int b8437;
+ public int b8438;
+ public int b8439;
+ public int b8440;
+ public int b8441;
+ public int b8442;
+ public int b8443;
+ public int b8444;
+ public int b8445;
+ public int b8446;
+ public int b8447;
+ public int b8448;
+ public int b8449;
+ public int b8450;
+ public int b8451;
+ public int b8452;
+ public int b8453;
+ public int b8454;
+ public int b8455;
+ public int b8456;
+ public int b8457;
+ public int b8458;
+ public int b8459;
+ public int b8460;
+ public int b8461;
+ public int b8462;
+ public int b8463;
+ public int b8464;
+ public int b8465;
+ public int b8466;
+ public int b8467;
+ public int b8468;
+ public int b8469;
+ public int b8470;
+ public int b8471;
+ public int b8472;
+ public int b8473;
+ public int b8474;
+ public int b8475;
+ public int b8476;
+ public int b8477;
+ public int b8478;
+ public int b8479;
+ public int b8480;
+ public int b8481;
+ public int b8482;
+ public int b8483;
+ public int b8484;
+ public int b8485;
+ public int b8486;
+ public int b8487;
+ public int b8488;
+ public int b8489;
+ public int b8490;
+ public int b8491;
+ public int b8492;
+ public int b8493;
+ public int b8494;
+ public int b8495;
+ public int b8496;
+ public int b8497;
+ public int b8498;
+ public int b8499;
+ public int b8500;
+ public int b8501;
+ public int b8502;
+ public int b8503;
+ public int b8504;
+ public int b8505;
+ public int b8506;
+ public int b8507;
+ public int b8508;
+ public int b8509;
+ public int b8510;
+ public int b8511;
+ public int b8512;
+ public int b8513;
+ public int b8514;
+ public int b8515;
+ public int b8516;
+ public int b8517;
+ public int b8518;
+ public int b8519;
+ public int b8520;
+ public int b8521;
+ public int b8522;
+ public int b8523;
+ public int b8524;
+ public int b8525;
+ public int b8526;
+ public int b8527;
+ public int b8528;
+ public int b8529;
+ public int b8530;
+ public int b8531;
+ public int b8532;
+ public int b8533;
+ public int b8534;
+ public int b8535;
+ public int b8536;
+ public int b8537;
+ public int b8538;
+ public int b8539;
+ public int b8540;
+ public int b8541;
+ public int b8542;
+ public int b8543;
+ public int b8544;
+ public int b8545;
+ public int b8546;
+ public int b8547;
+ public int b8548;
+ public int b8549;
+ public int b8550;
+ public int b8551;
+ public int b8552;
+ public int b8553;
+ public int b8554;
+ public int b8555;
+ public int b8556;
+ public int b8557;
+ public int b8558;
+ public int b8559;
+ public int b8560;
+ public int b8561;
+ public int b8562;
+ public int b8563;
+ public int b8564;
+ public int b8565;
+ public int b8566;
+ public int b8567;
+ public int b8568;
+ public int b8569;
+ public int b8570;
+ public int b8571;
+ public int b8572;
+ public int b8573;
+ public int b8574;
+ public int b8575;
+ public int b8576;
+ public int b8577;
+ public int b8578;
+ public int b8579;
+ public int b8580;
+ public int b8581;
+ public int b8582;
+ public int b8583;
+ public int b8584;
+ public int b8585;
+ public int b8586;
+ public int b8587;
+ public int b8588;
+ public int b8589;
+ public int b8590;
+ public int b8591;
+ public int b8592;
+ public int b8593;
+ public int b8594;
+ public int b8595;
+ public int b8596;
+ public int b8597;
+ public int b8598;
+ public int b8599;
+ public int b8600;
+ public int b8601;
+ public int b8602;
+ public int b8603;
+ public int b8604;
+ public int b8605;
+ public int b8606;
+ public int b8607;
+ public int b8608;
+ public int b8609;
+ public int b8610;
+ public int b8611;
+ public int b8612;
+ public int b8613;
+ public int b8614;
+ public int b8615;
+ public int b8616;
+ public int b8617;
+ public int b8618;
+ public int b8619;
+ public int b8620;
+ public int b8621;
+ public int b8622;
+ public int b8623;
+ public int b8624;
+ public int b8625;
+ public int b8626;
+ public int b8627;
+ public int b8628;
+ public int b8629;
+ public int b8630;
+ public int b8631;
+ public int b8632;
+ public int b8633;
+ public int b8634;
+ public int b8635;
+ public int b8636;
+ public int b8637;
+ public int b8638;
+ public int b8639;
+ public int b8640;
+ public int b8641;
+ public int b8642;
+ public int b8643;
+ public int b8644;
+ public int b8645;
+ public int b8646;
+ public int b8647;
+ public int b8648;
+ public int b8649;
+ public int b8650;
+ public int b8651;
+ public int b8652;
+ public int b8653;
+ public int b8654;
+ public int b8655;
+ public int b8656;
+ public int b8657;
+ public int b8658;
+ public int b8659;
+ public int b8660;
+ public int b8661;
+ public int b8662;
+ public int b8663;
+ public int b8664;
+ public int b8665;
+ public int b8666;
+ public int b8667;
+ public int b8668;
+ public int b8669;
+ public int b8670;
+ public int b8671;
+ public int b8672;
+ public int b8673;
+ public int b8674;
+ public int b8675;
+ public int b8676;
+ public int b8677;
+ public int b8678;
+ public int b8679;
+ public int b8680;
+ public int b8681;
+ public int b8682;
+ public int b8683;
+ public int b8684;
+ public int b8685;
+ public int b8686;
+ public int b8687;
+ public int b8688;
+ public int b8689;
+ public int b8690;
+ public int b8691;
+ public int b8692;
+ public int b8693;
+ public int b8694;
+ public int b8695;
+ public int b8696;
+ public int b8697;
+ public int b8698;
+ public int b8699;
+ public int b8700;
+ public int b8701;
+ public int b8702;
+ public int b8703;
+ public int b8704;
+ public int b8705;
+ public int b8706;
+ public int b8707;
+ public int b8708;
+ public int b8709;
+ public int b8710;
+ public int b8711;
+ public int b8712;
+ public int b8713;
+ public int b8714;
+ public int b8715;
+ public int b8716;
+ public int b8717;
+ public int b8718;
+ public int b8719;
+ public int b8720;
+ public int b8721;
+ public int b8722;
+ public int b8723;
+ public int b8724;
+ public int b8725;
+ public int b8726;
+ public int b8727;
+ public int b8728;
+ public int b8729;
+ public int b8730;
+ public int b8731;
+ public int b8732;
+ public int b8733;
+ public int b8734;
+ public int b8735;
+ public int b8736;
+ public int b8737;
+ public int b8738;
+ public int b8739;
+ public int b8740;
+ public int b8741;
+ public int b8742;
+ public int b8743;
+ public int b8744;
+ public int b8745;
+ public int b8746;
+ public int b8747;
+ public int b8748;
+ public int b8749;
+ public int b8750;
+ public int b8751;
+ public int b8752;
+ public int b8753;
+ public int b8754;
+ public int b8755;
+ public int b8756;
+ public int b8757;
+ public int b8758;
+ public int b8759;
+ public int b8760;
+ public int b8761;
+ public int b8762;
+ public int b8763;
+ public int b8764;
+ public int b8765;
+ public int b8766;
+ public int b8767;
+ public int b8768;
+ public int b8769;
+ public int b8770;
+ public int b8771;
+ public int b8772;
+ public int b8773;
+ public int b8774;
+ public int b8775;
+ public int b8776;
+ public int b8777;
+ public int b8778;
+ public int b8779;
+ public int b8780;
+ public int b8781;
+ public int b8782;
+ public int b8783;
+ public int b8784;
+ public int b8785;
+ public int b8786;
+ public int b8787;
+ public int b8788;
+ public int b8789;
+ public int b8790;
+ public int b8791;
+ public int b8792;
+ public int b8793;
+ public int b8794;
+ public int b8795;
+ public int b8796;
+ public int b8797;
+ public int b8798;
+ public int b8799;
+ public int b8800;
+ public int b8801;
+ public int b8802;
+ public int b8803;
+ public int b8804;
+ public int b8805;
+ public int b8806;
+ public int b8807;
+ public int b8808;
+ public int b8809;
+ public int b8810;
+ public int b8811;
+ public int b8812;
+ public int b8813;
+ public int b8814;
+ public int b8815;
+ public int b8816;
+ public int b8817;
+ public int b8818;
+ public int b8819;
+ public int b8820;
+ public int b8821;
+ public int b8822;
+ public int b8823;
+ public int b8824;
+ public int b8825;
+ public int b8826;
+ public int b8827;
+ public int b8828;
+ public int b8829;
+ public int b8830;
+ public int b8831;
+ public int b8832;
+ public int b8833;
+ public int b8834;
+ public int b8835;
+ public int b8836;
+ public int b8837;
+ public int b8838;
+ public int b8839;
+ public int b8840;
+ public int b8841;
+ public int b8842;
+ public int b8843;
+ public int b8844;
+ public int b8845;
+ public int b8846;
+ public int b8847;
+ public int b8848;
+ public int b8849;
+ public int b8850;
+ public int b8851;
+ public int b8852;
+ public int b8853;
+ public int b8854;
+ public int b8855;
+ public int b8856;
+ public int b8857;
+ public int b8858;
+ public int b8859;
+ public int b8860;
+ public int b8861;
+ public int b8862;
+ public int b8863;
+ public int b8864;
+ public int b8865;
+ public int b8866;
+ public int b8867;
+ public int b8868;
+ public int b8869;
+ public int b8870;
+ public int b8871;
+ public int b8872;
+ public int b8873;
+ public int b8874;
+ public int b8875;
+ public int b8876;
+ public int b8877;
+ public int b8878;
+ public int b8879;
+ public int b8880;
+ public int b8881;
+ public int b8882;
+ public int b8883;
+ public int b8884;
+ public int b8885;
+ public int b8886;
+ public int b8887;
+ public int b8888;
+ public int b8889;
+ public int b8890;
+ public int b8891;
+ public int b8892;
+ public int b8893;
+ public int b8894;
+ public int b8895;
+ public int b8896;
+ public int b8897;
+ public int b8898;
+ public int b8899;
+ public int b8900;
+ public int b8901;
+ public int b8902;
+ public int b8903;
+ public int b8904;
+ public int b8905;
+ public int b8906;
+ public int b8907;
+ public int b8908;
+ public int b8909;
+ public int b8910;
+ public int b8911;
+ public int b8912;
+ public int b8913;
+ public int b8914;
+ public int b8915;
+ public int b8916;
+ public int b8917;
+ public int b8918;
+ public int b8919;
+ public int b8920;
+ public int b8921;
+ public int b8922;
+ public int b8923;
+ public int b8924;
+ public int b8925;
+ public int b8926;
+ public int b8927;
+ public int b8928;
+ public int b8929;
+ public int b8930;
+ public int b8931;
+ public int b8932;
+ public int b8933;
+ public int b8934;
+ public int b8935;
+ public int b8936;
+ public int b8937;
+ public int b8938;
+ public int b8939;
+ public int b8940;
+ public int b8941;
+ public int b8942;
+ public int b8943;
+ public int b8944;
+ public int b8945;
+ public int b8946;
+ public int b8947;
+ public int b8948;
+ public int b8949;
+ public int b8950;
+ public int b8951;
+ public int b8952;
+ public int b8953;
+ public int b8954;
+ public int b8955;
+ public int b8956;
+ public int b8957;
+ public int b8958;
+ public int b8959;
+ public int b8960;
+ public int b8961;
+ public int b8962;
+ public int b8963;
+ public int b8964;
+ public int b8965;
+ public int b8966;
+ public int b8967;
+ public int b8968;
+ public int b8969;
+ public int b8970;
+ public int b8971;
+ public int b8972;
+ public int b8973;
+ public int b8974;
+ public int b8975;
+ public int b8976;
+ public int b8977;
+ public int b8978;
+ public int b8979;
+ public int b8980;
+ public int b8981;
+ public int b8982;
+ public int b8983;
+ public int b8984;
+ public int b8985;
+ public int b8986;
+ public int b8987;
+ public int b8988;
+ public int b8989;
+ public int b8990;
+ public int b8991;
+ public int b8992;
+ public int b8993;
+ public int b8994;
+ public int b8995;
+ public int b8996;
+ public int b8997;
+ public int b8998;
+ public int b8999;
+ public int b9000;
+ public int b9001;
+ public int b9002;
+ public int b9003;
+ public int b9004;
+ public int b9005;
+ public int b9006;
+ public int b9007;
+ public int b9008;
+ public int b9009;
+ public int b9010;
+ public int b9011;
+ public int b9012;
+ public int b9013;
+ public int b9014;
+ public int b9015;
+ public int b9016;
+ public int b9017;
+ public int b9018;
+ public int b9019;
+ public int b9020;
+ public int b9021;
+ public int b9022;
+ public int b9023;
+ public int b9024;
+ public int b9025;
+ public int b9026;
+ public int b9027;
+ public int b9028;
+ public int b9029;
+ public int b9030;
+ public int b9031;
+ public int b9032;
+ public int b9033;
+ public int b9034;
+ public int b9035;
+ public int b9036;
+ public int b9037;
+ public int b9038;
+ public int b9039;
+ public int b9040;
+ public int b9041;
+ public int b9042;
+ public int b9043;
+ public int b9044;
+ public int b9045;
+ public int b9046;
+ public int b9047;
+ public int b9048;
+ public int b9049;
+ public int b9050;
+ public int b9051;
+ public int b9052;
+ public int b9053;
+ public int b9054;
+ public int b9055;
+ public int b9056;
+ public int b9057;
+ public int b9058;
+ public int b9059;
+ public int b9060;
+ public int b9061;
+ public int b9062;
+ public int b9063;
+ public int b9064;
+ public int b9065;
+ public int b9066;
+ public int b9067;
+ public int b9068;
+ public int b9069;
+ public int b9070;
+ public int b9071;
+ public int b9072;
+ public int b9073;
+ public int b9074;
+ public int b9075;
+ public int b9076;
+ public int b9077;
+ public int b9078;
+ public int b9079;
+ public int b9080;
+ public int b9081;
+ public int b9082;
+ public int b9083;
+ public int b9084;
+ public int b9085;
+ public int b9086;
+ public int b9087;
+ public int b9088;
+ public int b9089;
+ public int b9090;
+ public int b9091;
+ public int b9092;
+ public int b9093;
+ public int b9094;
+ public int b9095;
+ public int b9096;
+ public int b9097;
+ public int b9098;
+ public int b9099;
+ public int b9100;
+ public int b9101;
+ public int b9102;
+ public int b9103;
+ public int b9104;
+ public int b9105;
+ public int b9106;
+ public int b9107;
+ public int b9108;
+ public int b9109;
+ public int b9110;
+ public int b9111;
+ public int b9112;
+ public int b9113;
+ public int b9114;
+ public int b9115;
+ public int b9116;
+ public int b9117;
+ public int b9118;
+ public int b9119;
+ public int b9120;
+ public int b9121;
+ public int b9122;
+ public int b9123;
+ public int b9124;
+ public int b9125;
+ public int b9126;
+ public int b9127;
+ public int b9128;
+ public int b9129;
+ public int b9130;
+ public int b9131;
+ public int b9132;
+ public int b9133;
+ public int b9134;
+ public int b9135;
+ public int b9136;
+ public int b9137;
+ public int b9138;
+ public int b9139;
+ public int b9140;
+ public int b9141;
+ public int b9142;
+ public int b9143;
+ public int b9144;
+ public int b9145;
+ public int b9146;
+ public int b9147;
+ public int b9148;
+ public int b9149;
+ public int b9150;
+ public int b9151;
+ public int b9152;
+ public int b9153;
+ public int b9154;
+ public int b9155;
+ public int b9156;
+ public int b9157;
+ public int b9158;
+ public int b9159;
+ public int b9160;
+ public int b9161;
+ public int b9162;
+ public int b9163;
+ public int b9164;
+ public int b9165;
+ public int b9166;
+ public int b9167;
+ public int b9168;
+ public int b9169;
+ public int b9170;
+ public int b9171;
+ public int b9172;
+ public int b9173;
+ public int b9174;
+ public int b9175;
+ public int b9176;
+ public int b9177;
+ public int b9178;
+ public int b9179;
+ public int b9180;
+ public int b9181;
+ public int b9182;
+ public int b9183;
+ public int b9184;
+ public int b9185;
+ public int b9186;
+ public int b9187;
+ public int b9188;
+ public int b9189;
+ public int b9190;
+ public int b9191;
+ public int b9192;
+ public int b9193;
+ public int b9194;
+ public int b9195;
+ public int b9196;
+ public int b9197;
+ public int b9198;
+ public int b9199;
+ public int b9200;
+ public int b9201;
+ public int b9202;
+ public int b9203;
+ public int b9204;
+ public int b9205;
+ public int b9206;
+ public int b9207;
+ public int b9208;
+ public int b9209;
+ public int b9210;
+ public int b9211;
+ public int b9212;
+ public int b9213;
+ public int b9214;
+ public int b9215;
+ public int b9216;
+ public int b9217;
+ public int b9218;
+ public int b9219;
+ public int b9220;
+ public int b9221;
+ public int b9222;
+ public int b9223;
+ public int b9224;
+ public int b9225;
+ public int b9226;
+ public int b9227;
+ public int b9228;
+ public int b9229;
+ public int b9230;
+ public int b9231;
+ public int b9232;
+ public int b9233;
+ public int b9234;
+ public int b9235;
+ public int b9236;
+ public int b9237;
+ public int b9238;
+ public int b9239;
+ public int b9240;
+ public int b9241;
+ public int b9242;
+ public int b9243;
+ public int b9244;
+ public int b9245;
+ public int b9246;
+ public int b9247;
+ public int b9248;
+ public int b9249;
+ public int b9250;
+ public int b9251;
+ public int b9252;
+ public int b9253;
+ public int b9254;
+ public int b9255;
+ public int b9256;
+ public int b9257;
+ public int b9258;
+ public int b9259;
+ public int b9260;
+ public int b9261;
+ public int b9262;
+ public int b9263;
+ public int b9264;
+ public int b9265;
+ public int b9266;
+ public int b9267;
+ public int b9268;
+ public int b9269;
+ public int b9270;
+ public int b9271;
+ public int b9272;
+ public int b9273;
+ public int b9274;
+ public int b9275;
+ public int b9276;
+ public int b9277;
+ public int b9278;
+ public int b9279;
+ public int b9280;
+ public int b9281;
+ public int b9282;
+ public int b9283;
+ public int b9284;
+ public int b9285;
+ public int b9286;
+ public int b9287;
+ public int b9288;
+ public int b9289;
+ public int b9290;
+ public int b9291;
+ public int b9292;
+ public int b9293;
+ public int b9294;
+ public int b9295;
+ public int b9296;
+ public int b9297;
+ public int b9298;
+ public int b9299;
+ public int b9300;
+ public int b9301;
+ public int b9302;
+ public int b9303;
+ public int b9304;
+ public int b9305;
+ public int b9306;
+ public int b9307;
+ public int b9308;
+ public int b9309;
+ public int b9310;
+ public int b9311;
+ public int b9312;
+ public int b9313;
+ public int b9314;
+ public int b9315;
+ public int b9316;
+ public int b9317;
+ public int b9318;
+ public int b9319;
+ public int b9320;
+ public int b9321;
+ public int b9322;
+ public int b9323;
+ public int b9324;
+ public int b9325;
+ public int b9326;
+ public int b9327;
+ public int b9328;
+ public int b9329;
+ public int b9330;
+ public int b9331;
+ public int b9332;
+ public int b9333;
+ public int b9334;
+ public int b9335;
+ public int b9336;
+ public int b9337;
+ public int b9338;
+ public int b9339;
+ public int b9340;
+ public int b9341;
+ public int b9342;
+ public int b9343;
+ public int b9344;
+ public int b9345;
+ public int b9346;
+ public int b9347;
+ public int b9348;
+ public int b9349;
+ public int b9350;
+ public int b9351;
+ public int b9352;
+ public int b9353;
+ public int b9354;
+ public int b9355;
+ public int b9356;
+ public int b9357;
+ public int b9358;
+ public int b9359;
+ public int b9360;
+ public int b9361;
+ public int b9362;
+ public int b9363;
+ public int b9364;
+ public int b9365;
+ public int b9366;
+ public int b9367;
+ public int b9368;
+ public int b9369;
+ public int b9370;
+ public int b9371;
+ public int b9372;
+ public int b9373;
+ public int b9374;
+ public int b9375;
+ public int b9376;
+ public int b9377;
+ public int b9378;
+ public int b9379;
+ public int b9380;
+ public int b9381;
+ public int b9382;
+ public int b9383;
+ public int b9384;
+ public int b9385;
+ public int b9386;
+ public int b9387;
+ public int b9388;
+ public int b9389;
+ public int b9390;
+ public int b9391;
+ public int b9392;
+ public int b9393;
+ public int b9394;
+ public int b9395;
+ public int b9396;
+ public int b9397;
+ public int b9398;
+ public int b9399;
+ public int b9400;
+ public int b9401;
+ public int b9402;
+ public int b9403;
+ public int b9404;
+ public int b9405;
+ public int b9406;
+ public int b9407;
+ public int b9408;
+ public int b9409;
+ public int b9410;
+ public int b9411;
+ public int b9412;
+ public int b9413;
+ public int b9414;
+ public int b9415;
+ public int b9416;
+ public int b9417;
+ public int b9418;
+ public int b9419;
+ public int b9420;
+ public int b9421;
+ public int b9422;
+ public int b9423;
+ public int b9424;
+ public int b9425;
+ public int b9426;
+ public int b9427;
+ public int b9428;
+ public int b9429;
+ public int b9430;
+ public int b9431;
+ public int b9432;
+ public int b9433;
+ public int b9434;
+ public int b9435;
+ public int b9436;
+ public int b9437;
+ public int b9438;
+ public int b9439;
+ public int b9440;
+ public int b9441;
+ public int b9442;
+ public int b9443;
+ public int b9444;
+ public int b9445;
+ public int b9446;
+ public int b9447;
+ public int b9448;
+ public int b9449;
+ public int b9450;
+ public int b9451;
+ public int b9452;
+ public int b9453;
+ public int b9454;
+ public int b9455;
+ public int b9456;
+ public int b9457;
+ public int b9458;
+ public int b9459;
+ public int b9460;
+ public int b9461;
+ public int b9462;
+ public int b9463;
+ public int b9464;
+ public int b9465;
+ public int b9466;
+ public int b9467;
+ public int b9468;
+ public int b9469;
+ public int b9470;
+ public int b9471;
+ public int b9472;
+ public int b9473;
+ public int b9474;
+ public int b9475;
+ public int b9476;
+ public int b9477;
+ public int b9478;
+ public int b9479;
+ public int b9480;
+ public int b9481;
+ public int b9482;
+ public int b9483;
+ public int b9484;
+ public int b9485;
+ public int b9486;
+ public int b9487;
+ public int b9488;
+ public int b9489;
+ public int b9490;
+ public int b9491;
+ public int b9492;
+ public int b9493;
+ public int b9494;
+ public int b9495;
+ public int b9496;
+ public int b9497;
+ public int b9498;
+ public int b9499;
+ public int b9500;
+ public int b9501;
+ public int b9502;
+ public int b9503;
+ public int b9504;
+ public int b9505;
+ public int b9506;
+ public int b9507;
+ public int b9508;
+ public int b9509;
+ public int b9510;
+ public int b9511;
+ public int b9512;
+ public int b9513;
+ public int b9514;
+ public int b9515;
+ public int b9516;
+ public int b9517;
+ public int b9518;
+ public int b9519;
+ public int b9520;
+ public int b9521;
+ public int b9522;
+ public int b9523;
+ public int b9524;
+ public int b9525;
+ public int b9526;
+ public int b9527;
+ public int b9528;
+ public int b9529;
+ public int b9530;
+ public int b9531;
+ public int b9532;
+ public int b9533;
+ public int b9534;
+ public int b9535;
+ public int b9536;
+ public int b9537;
+ public int b9538;
+ public int b9539;
+ public int b9540;
+ public int b9541;
+ public int b9542;
+ public int b9543;
+ public int b9544;
+ public int b9545;
+ public int b9546;
+ public int b9547;
+ public int b9548;
+ public int b9549;
+ public int b9550;
+ public int b9551;
+ public int b9552;
+ public int b9553;
+ public int b9554;
+ public int b9555;
+ public int b9556;
+ public int b9557;
+ public int b9558;
+ public int b9559;
+ public int b9560;
+ public int b9561;
+ public int b9562;
+ public int b9563;
+ public int b9564;
+ public int b9565;
+ public int b9566;
+ public int b9567;
+ public int b9568;
+ public int b9569;
+ public int b9570;
+ public int b9571;
+ public int b9572;
+ public int b9573;
+ public int b9574;
+ public int b9575;
+ public int b9576;
+ public int b9577;
+ public int b9578;
+ public int b9579;
+ public int b9580;
+ public int b9581;
+ public int b9582;
+ public int b9583;
+ public int b9584;
+ public int b9585;
+ public int b9586;
+ public int b9587;
+ public int b9588;
+ public int b9589;
+ public int b9590;
+ public int b9591;
+ public int b9592;
+ public int b9593;
+ public int b9594;
+ public int b9595;
+ public int b9596;
+ public int b9597;
+ public int b9598;
+ public int b9599;
+ public int b9600;
+ public int b9601;
+ public int b9602;
+ public int b9603;
+ public int b9604;
+ public int b9605;
+ public int b9606;
+ public int b9607;
+ public int b9608;
+ public int b9609;
+ public int b9610;
+ public int b9611;
+ public int b9612;
+ public int b9613;
+ public int b9614;
+ public int b9615;
+ public int b9616;
+ public int b9617;
+ public int b9618;
+ public int b9619;
+ public int b9620;
+ public int b9621;
+ public int b9622;
+ public int b9623;
+ public int b9624;
+ public int b9625;
+ public int b9626;
+ public int b9627;
+ public int b9628;
+ public int b9629;
+ public int b9630;
+ public int b9631;
+ public int b9632;
+ public int b9633;
+ public int b9634;
+ public int b9635;
+ public int b9636;
+ public int b9637;
+ public int b9638;
+ public int b9639;
+ public int b9640;
+ public int b9641;
+ public int b9642;
+ public int b9643;
+ public int b9644;
+ public int b9645;
+ public int b9646;
+ public int b9647;
+ public int b9648;
+ public int b9649;
+ public int b9650;
+ public int b9651;
+ public int b9652;
+ public int b9653;
+ public int b9654;
+ public int b9655;
+ public int b9656;
+ public int b9657;
+ public int b9658;
+ public int b9659;
+ public int b9660;
+ public int b9661;
+ public int b9662;
+ public int b9663;
+ public int b9664;
+ public int b9665;
+ public int b9666;
+ public int b9667;
+ public int b9668;
+ public int b9669;
+ public int b9670;
+ public int b9671;
+ public int b9672;
+ public int b9673;
+ public int b9674;
+ public int b9675;
+ public int b9676;
+ public int b9677;
+ public int b9678;
+ public int b9679;
+ public int b9680;
+ public int b9681;
+ public int b9682;
+ public int b9683;
+ public int b9684;
+ public int b9685;
+ public int b9686;
+ public int b9687;
+ public int b9688;
+ public int b9689;
+ public int b9690;
+ public int b9691;
+ public int b9692;
+ public int b9693;
+ public int b9694;
+ public int b9695;
+ public int b9696;
+ public int b9697;
+ public int b9698;
+ public int b9699;
+ public int b9700;
+ public int b9701;
+ public int b9702;
+ public int b9703;
+ public int b9704;
+ public int b9705;
+ public int b9706;
+ public int b9707;
+ public int b9708;
+ public int b9709;
+ public int b9710;
+ public int b9711;
+ public int b9712;
+ public int b9713;
+ public int b9714;
+ public int b9715;
+ public int b9716;
+ public int b9717;
+ public int b9718;
+ public int b9719;
+ public int b9720;
+ public int b9721;
+ public int b9722;
+ public int b9723;
+ public int b9724;
+ public int b9725;
+ public int b9726;
+ public int b9727;
+ public int b9728;
+ public int b9729;
+ public int b9730;
+ public int b9731;
+ public int b9732;
+ public int b9733;
+ public int b9734;
+ public int b9735;
+ public int b9736;
+ public int b9737;
+ public int b9738;
+ public int b9739;
+ public int b9740;
+ public int b9741;
+ public int b9742;
+ public int b9743;
+ public int b9744;
+ public int b9745;
+ public int b9746;
+ public int b9747;
+ public int b9748;
+ public int b9749;
+ public int b9750;
+ public int b9751;
+ public int b9752;
+ public int b9753;
+ public int b9754;
+ public int b9755;
+ public int b9756;
+ public int b9757;
+ public int b9758;
+ public int b9759;
+ public int b9760;
+ public int b9761;
+ public int b9762;
+ public int b9763;
+ public int b9764;
+ public int b9765;
+ public int b9766;
+ public int b9767;
+ public int b9768;
+ public int b9769;
+ public int b9770;
+ public int b9771;
+ public int b9772;
+ public int b9773;
+ public int b9774;
+ public int b9775;
+ public int b9776;
+ public int b9777;
+ public int b9778;
+ public int b9779;
+ public int b9780;
+ public int b9781;
+ public int b9782;
+ public int b9783;
+ public int b9784;
+ public int b9785;
+ public int b9786;
+ public int b9787;
+ public int b9788;
+ public int b9789;
+ public int b9790;
+ public int b9791;
+ public int b9792;
+ public int b9793;
+ public int b9794;
+ public int b9795;
+ public int b9796;
+ public int b9797;
+ public int b9798;
+ public int b9799;
+ public int b9800;
+ public int b9801;
+ public int b9802;
+ public int b9803;
+ public int b9804;
+ public int b9805;
+ public int b9806;
+ public int b9807;
+ public int b9808;
+ public int b9809;
+ public int b9810;
+ public int b9811;
+ public int b9812;
+ public int b9813;
+ public int b9814;
+ public int b9815;
+ public int b9816;
+ public int b9817;
+ public int b9818;
+ public int b9819;
+ public int b9820;
+ public int b9821;
+ public int b9822;
+ public int b9823;
+ public int b9824;
+ public int b9825;
+ public int b9826;
+ public int b9827;
+ public int b9828;
+ public int b9829;
+ public int b9830;
+ public int b9831;
+ public int b9832;
+ public int b9833;
+ public int b9834;
+ public int b9835;
+ public int b9836;
+ public int b9837;
+ public int b9838;
+ public int b9839;
+ public int b9840;
+ public int b9841;
+ public int b9842;
+ public int b9843;
+ public int b9844;
+ public int b9845;
+ public int b9846;
+ public int b9847;
+ public int b9848;
+ public int b9849;
+ public int b9850;
+ public int b9851;
+ public int b9852;
+ public int b9853;
+ public int b9854;
+ public int b9855;
+ public int b9856;
+ public int b9857;
+ public int b9858;
+ public int b9859;
+ public int b9860;
+ public int b9861;
+ public int b9862;
+ public int b9863;
+ public int b9864;
+ public int b9865;
+ public int b9866;
+ public int b9867;
+ public int b9868;
+ public int b9869;
+ public int b9870;
+ public int b9871;
+ public int b9872;
+ public int b9873;
+ public int b9874;
+ public int b9875;
+ public int b9876;
+ public int b9877;
+ public int b9878;
+ public int b9879;
+ public int b9880;
+ public int b9881;
+ public int b9882;
+ public int b9883;
+ public int b9884;
+ public int b9885;
+ public int b9886;
+ public int b9887;
+ public int b9888;
+ public int b9889;
+ public int b9890;
+ public int b9891;
+ public int b9892;
+ public int b9893;
+ public int b9894;
+ public int b9895;
+ public int b9896;
+ public int b9897;
+ public int b9898;
+ public int b9899;
+ public int b9900;
+ public int b9901;
+ public int b9902;
+ public int b9903;
+ public int b9904;
+ public int b9905;
+ public int b9906;
+ public int b9907;
+ public int b9908;
+ public int b9909;
+ public int b9910;
+ public int b9911;
+ public int b9912;
+ public int b9913;
+ public int b9914;
+ public int b9915;
+ public int b9916;
+ public int b9917;
+ public int b9918;
+ public int b9919;
+ public int b9920;
+ public int b9921;
+ public int b9922;
+ public int b9923;
+ public int b9924;
+ public int b9925;
+ public int b9926;
+ public int b9927;
+ public int b9928;
+ public int b9929;
+ public int b9930;
+ public int b9931;
+ public int b9932;
+ public int b9933;
+ public int b9934;
+ public int b9935;
+ public int b9936;
+ public int b9937;
+ public int b9938;
+ public int b9939;
+ public int b9940;
+ public int b9941;
+ public int b9942;
+ public int b9943;
+ public int b9944;
+ public int b9945;
+ public int b9946;
+ public int b9947;
+ public int b9948;
+ public int b9949;
+ public int b9950;
+ public int b9951;
+ public int b9952;
+ public int b9953;
+ public int b9954;
+ public int b9955;
+ public int b9956;
+ public int b9957;
+ public int b9958;
+ public int b9959;
+ public int b9960;
+ public int b9961;
+ public int b9962;
+ public int b9963;
+ public int b9964;
+ public int b9965;
+ public int b9966;
+ public int b9967;
+ public int b9968;
+ public int b9969;
+ public int b9970;
+ public int b9971;
+ public int b9972;
+ public int b9973;
+ public int b9974;
+ public int b9975;
+ public int b9976;
+ public int b9977;
+ public int b9978;
+ public int b9979;
+ public int b9980;
+ public int b9981;
+ public int b9982;
+ public int b9983;
+ public int b9984;
+ public int b9985;
+ public int b9986;
+ public int b9987;
+ public int b9988;
+ public int b9989;
+ public int b9990;
+ public int b9991;
+ public int b9992;
+ public int b9993;
+ public int b9994;
+ public int b9995;
+ public int b9996;
+ public int b9997;
+ public int b9998;
+ public int b9999;
+ public int b10000;
+ public int b10001;
+ public int b10002;
+ public int b10003;
+ public int b10004;
+ public int b10005;
+ public int b10006;
+ public int b10007;
+ public int b10008;
+ public int b10009;
+ public int b10010;
+ public int b10011;
+ public int b10012;
+ public int b10013;
+ public int b10014;
+ public int b10015;
+ public int b10016;
+ public int b10017;
+ public int b10018;
+ public int b10019;
+ public int b10020;
+ public int b10021;
+ public int b10022;
+ public int b10023;
+ public int b10024;
+ public int b10025;
+ public int b10026;
+ public int b10027;
+ public int b10028;
+ public int b10029;
+ public int b10030;
+ public int b10031;
+ public int b10032;
+ public int b10033;
+ public int b10034;
+ public int b10035;
+ public int b10036;
+ public int b10037;
+ public int b10038;
+ public int b10039;
+ public int b10040;
+ public int b10041;
+ public int b10042;
+ public int b10043;
+ public int b10044;
+ public int b10045;
+ public int b10046;
+ public int b10047;
+ public int b10048;
+ public int b10049;
+ public int b10050;
+ public int b10051;
+ public int b10052;
+ public int b10053;
+ public int b10054;
+ public int b10055;
+ public int b10056;
+ public int b10057;
+ public int b10058;
+ public int b10059;
+ public int b10060;
+ public int b10061;
+ public int b10062;
+ public int b10063;
+ public int b10064;
+ public int b10065;
+ public int b10066;
+ public int b10067;
+ public int b10068;
+ public int b10069;
+ public int b10070;
+ public int b10071;
+ public int b10072;
+ public int b10073;
+ public int b10074;
+ public int b10075;
+ public int b10076;
+ public int b10077;
+ public int b10078;
+ public int b10079;
+ public int b10080;
+ public int b10081;
+ public int b10082;
+ public int b10083;
+ public int b10084;
+ public int b10085;
+ public int b10086;
+ public int b10087;
+ public int b10088;
+ public int b10089;
+ public int b10090;
+ public int b10091;
+ public int b10092;
+ public int b10093;
+ public int b10094;
+ public int b10095;
+ public int b10096;
+ public int b10097;
+ public int b10098;
+ public int b10099;
+ public int b10100;
+ public int b10101;
+ public int b10102;
+ public int b10103;
+ public int b10104;
+ public int b10105;
+ public int b10106;
+ public int b10107;
+ public int b10108;
+ public int b10109;
+ public int b10110;
+ public int b10111;
+ public int b10112;
+ public int b10113;
+ public int b10114;
+ public int b10115;
+ public int b10116;
+ public int b10117;
+ public int b10118;
+ public int b10119;
+ public int b10120;
+ public int b10121;
+ public int b10122;
+ public int b10123;
+ public int b10124;
+ public int b10125;
+ public int b10126;
+ public int b10127;
+ public int b10128;
+ public int b10129;
+ public int b10130;
+ public int b10131;
+ public int b10132;
+ public int b10133;
+ public int b10134;
+ public int b10135;
+ public int b10136;
+ public int b10137;
+ public int b10138;
+ public int b10139;
+ public int b10140;
+ public int b10141;
+ public int b10142;
+ public int b10143;
+ public int b10144;
+ public int b10145;
+ public int b10146;
+ public int b10147;
+ public int b10148;
+ public int b10149;
+ public int b10150;
+ public int b10151;
+ public int b10152;
+ public int b10153;
+ public int b10154;
+ public int b10155;
+ public int b10156;
+ public int b10157;
+ public int b10158;
+ public int b10159;
+ public int b10160;
+ public int b10161;
+ public int b10162;
+ public int b10163;
+ public int b10164;
+ public int b10165;
+ public int b10166;
+ public int b10167;
+ public int b10168;
+ public int b10169;
+ public int b10170;
+ public int b10171;
+ public int b10172;
+ public int b10173;
+ public int b10174;
+ public int b10175;
+ public int b10176;
+ public int b10177;
+ public int b10178;
+ public int b10179;
+ public int b10180;
+ public int b10181;
+ public int b10182;
+ public int b10183;
+ public int b10184;
+ public int b10185;
+ public int b10186;
+ public int b10187;
+ public int b10188;
+ public int b10189;
+ public int b10190;
+ public int b10191;
+ public int b10192;
+ public int b10193;
+ public int b10194;
+ public int b10195;
+ public int b10196;
+ public int b10197;
+ public int b10198;
+ public int b10199;
+ public int b10200;
+ public int b10201;
+ public int b10202;
+ public int b10203;
+ public int b10204;
+ public int b10205;
+ public int b10206;
+ public int b10207;
+ public int b10208;
+ public int b10209;
+ public int b10210;
+ public int b10211;
+ public int b10212;
+ public int b10213;
+ public int b10214;
+ public int b10215;
+ public int b10216;
+ public int b10217;
+ public int b10218;
+ public int b10219;
+ public int b10220;
+ public int b10221;
+ public int b10222;
+ public int b10223;
+ public int b10224;
+ public int b10225;
+ public int b10226;
+ public int b10227;
+ public int b10228;
+ public int b10229;
+ public int b10230;
+ public int b10231;
+ public int b10232;
+ public int b10233;
+ public int b10234;
+ public int b10235;
+ public int b10236;
+ public int b10237;
+ public int b10238;
+ public int b10239;
+ public int b10240;
+ public int b10241;
+ public int b10242;
+ public int b10243;
+ public int b10244;
+ public int b10245;
+ public int b10246;
+ public int b10247;
+ public int b10248;
+ public int b10249;
+ public int b10250;
+ public int b10251;
+ public int b10252;
+ public int b10253;
+ public int b10254;
+ public int b10255;
+ public int b10256;
+ public int b10257;
+ public int b10258;
+ public int b10259;
+ public int b10260;
+ public int b10261;
+ public int b10262;
+ public int b10263;
+ public int b10264;
+ public int b10265;
+ public int b10266;
+ public int b10267;
+ public int b10268;
+ public int b10269;
+ public int b10270;
+ public int b10271;
+ public int b10272;
+ public int b10273;
+ public int b10274;
+ public int b10275;
+ public int b10276;
+ public int b10277;
+ public int b10278;
+ public int b10279;
+ public int b10280;
+ public int b10281;
+ public int b10282;
+ public int b10283;
+ public int b10284;
+ public int b10285;
+ public int b10286;
+ public int b10287;
+ public int b10288;
+ public int b10289;
+ public int b10290;
+ public int b10291;
+ public int b10292;
+ public int b10293;
+ public int b10294;
+ public int b10295;
+ public int b10296;
+ public int b10297;
+ public int b10298;
+ public int b10299;
+ public int b10300;
+ public int b10301;
+ public int b10302;
+ public int b10303;
+ public int b10304;
+ public int b10305;
+ public int b10306;
+ public int b10307;
+ public int b10308;
+ public int b10309;
+ public int b10310;
+ public int b10311;
+ public int b10312;
+ public int b10313;
+ public int b10314;
+ public int b10315;
+ public int b10316;
+ public int b10317;
+ public int b10318;
+ public int b10319;
+ public int b10320;
+ public int b10321;
+ public int b10322;
+ public int b10323;
+ public int b10324;
+ public int b10325;
+ public int b10326;
+ public int b10327;
+ public int b10328;
+ public int b10329;
+ public int b10330;
+ public int b10331;
+ public int b10332;
+ public int b10333;
+ public int b10334;
+ public int b10335;
+ public int b10336;
+ public int b10337;
+ public int b10338;
+ public int b10339;
+ public int b10340;
+ public int b10341;
+ public int b10342;
+ public int b10343;
+ public int b10344;
+ public int b10345;
+ public int b10346;
+ public int b10347;
+ public int b10348;
+ public int b10349;
+ public int b10350;
+ public int b10351;
+ public int b10352;
+ public int b10353;
+ public int b10354;
+ public int b10355;
+ public int b10356;
+ public int b10357;
+ public int b10358;
+ public int b10359;
+ public int b10360;
+ public int b10361;
+ public int b10362;
+ public int b10363;
+ public int b10364;
+ public int b10365;
+ public int b10366;
+ public int b10367;
+ public int b10368;
+ public int b10369;
+ public int b10370;
+ public int b10371;
+ public int b10372;
+ public int b10373;
+ public int b10374;
+ public int b10375;
+ public int b10376;
+ public int b10377;
+ public int b10378;
+ public int b10379;
+ public int b10380;
+ public int b10381;
+ public int b10382;
+ public int b10383;
+ public int b10384;
+ public int b10385;
+ public int b10386;
+ public int b10387;
+ public int b10388;
+ public int b10389;
+ public int b10390;
+ public int b10391;
+ public int b10392;
+ public int b10393;
+ public int b10394;
+ public int b10395;
+ public int b10396;
+ public int b10397;
+ public int b10398;
+ public int b10399;
+ public int b10400;
+ public int b10401;
+ public int b10402;
+ public int b10403;
+ public int b10404;
+ public int b10405;
+ public int b10406;
+ public int b10407;
+ public int b10408;
+ public int b10409;
+ public int b10410;
+ public int b10411;
+ public int b10412;
+ public int b10413;
+ public int b10414;
+ public int b10415;
+ public int b10416;
+ public int b10417;
+ public int b10418;
+ public int b10419;
+ public int b10420;
+ public int b10421;
+ public int b10422;
+ public int b10423;
+ public int b10424;
+ public int b10425;
+ public int b10426;
+ public int b10427;
+ public int b10428;
+ public int b10429;
+ public int b10430;
+ public int b10431;
+ public int b10432;
+ public int b10433;
+ public int b10434;
+ public int b10435;
+ public int b10436;
+ public int b10437;
+ public int b10438;
+ public int b10439;
+ public int b10440;
+ public int b10441;
+ public int b10442;
+ public int b10443;
+ public int b10444;
+ public int b10445;
+ public int b10446;
+ public int b10447;
+ public int b10448;
+ public int b10449;
+ public int b10450;
+ public int b10451;
+ public int b10452;
+ public int b10453;
+ public int b10454;
+ public int b10455;
+ public int b10456;
+ public int b10457;
+ public int b10458;
+ public int b10459;
+ public int b10460;
+ public int b10461;
+ public int b10462;
+ public int b10463;
+ public int b10464;
+ public int b10465;
+ public int b10466;
+ public int b10467;
+ public int b10468;
+ public int b10469;
+ public int b10470;
+ public int b10471;
+ public int b10472;
+ public int b10473;
+ public int b10474;
+ public int b10475;
+ public int b10476;
+ public int b10477;
+ public int b10478;
+ public int b10479;
+ public int b10480;
+ public int b10481;
+ public int b10482;
+ public int b10483;
+ public int b10484;
+ public int b10485;
+ public int b10486;
+ public int b10487;
+ public int b10488;
+ public int b10489;
+ public int b10490;
+ public int b10491;
+ public int b10492;
+ public int b10493;
+ public int b10494;
+ public int b10495;
+ public int b10496;
+ public int b10497;
+ public int b10498;
+ public int b10499;
+ public int b10500;
+ public int b10501;
+ public int b10502;
+ public int b10503;
+ public int b10504;
+ public int b10505;
+ public int b10506;
+ public int b10507;
+ public int b10508;
+ public int b10509;
+ public int b10510;
+ public int b10511;
+ public int b10512;
+ public int b10513;
+ public int b10514;
+ public int b10515;
+ public int b10516;
+ public int b10517;
+ public int b10518;
+ public int b10519;
+ public int b10520;
+ public int b10521;
+ public int b10522;
+ public int b10523;
+ public int b10524;
+ public int b10525;
+ public int b10526;
+ public int b10527;
+ public int b10528;
+ public int b10529;
+ public int b10530;
+ public int b10531;
+ public int b10532;
+ public int b10533;
+ public int b10534;
+ public int b10535;
+ public int b10536;
+ public int b10537;
+ public int b10538;
+ public int b10539;
+ public int b10540;
+ public int b10541;
+ public int b10542;
+ public int b10543;
+ public int b10544;
+ public int b10545;
+ public int b10546;
+ public int b10547;
+ public int b10548;
+ public int b10549;
+ public int b10550;
+ public int b10551;
+ public int b10552;
+ public int b10553;
+ public int b10554;
+ public int b10555;
+ public int b10556;
+ public int b10557;
+ public int b10558;
+ public int b10559;
+ public int b10560;
+ public int b10561;
+ public int b10562;
+ public int b10563;
+ public int b10564;
+ public int b10565;
+ public int b10566;
+ public int b10567;
+ public int b10568;
+ public int b10569;
+ public int b10570;
+ public int b10571;
+ public int b10572;
+ public int b10573;
+ public int b10574;
+ public int b10575;
+ public int b10576;
+ public int b10577;
+ public int b10578;
+ public int b10579;
+ public int b10580;
+ public int b10581;
+ public int b10582;
+ public int b10583;
+ public int b10584;
+ public int b10585;
+ public int b10586;
+ public int b10587;
+ public int b10588;
+ public int b10589;
+ public int b10590;
+ public int b10591;
+ public int b10592;
+ public int b10593;
+ public int b10594;
+ public int b10595;
+ public int b10596;
+ public int b10597;
+ public int b10598;
+ public int b10599;
+ public int b10600;
+ public int b10601;
+ public int b10602;
+ public int b10603;
+ public int b10604;
+ public int b10605;
+ public int b10606;
+ public int b10607;
+ public int b10608;
+ public int b10609;
+ public int b10610;
+ public int b10611;
+ public int b10612;
+ public int b10613;
+ public int b10614;
+ public int b10615;
+ public int b10616;
+ public int b10617;
+ public int b10618;
+ public int b10619;
+ public int b10620;
+ public int b10621;
+ public int b10622;
+ public int b10623;
+ public int b10624;
+ public int b10625;
+ public int b10626;
+ public int b10627;
+ public int b10628;
+ public int b10629;
+ public int b10630;
+ public int b10631;
+ public int b10632;
+ public int b10633;
+ public int b10634;
+ public int b10635;
+ public int b10636;
+ public int b10637;
+ public int b10638;
+ public int b10639;
+ public int b10640;
+ public int b10641;
+ public int b10642;
+ public int b10643;
+ public int b10644;
+ public int b10645;
+ public int b10646;
+ public int b10647;
+ public int b10648;
+ public int b10649;
+ public int b10650;
+ public int b10651;
+ public int b10652;
+ public int b10653;
+ public int b10654;
+ public int b10655;
+ public int b10656;
+ public int b10657;
+ public int b10658;
+ public int b10659;
+ public int b10660;
+ public int b10661;
+ public int b10662;
+ public int b10663;
+ public int b10664;
+ public int b10665;
+ public int b10666;
+ public int b10667;
+ public int b10668;
+ public int b10669;
+ public int b10670;
+ public int b10671;
+ public int b10672;
+ public int b10673;
+ public int b10674;
+ public int b10675;
+ public int b10676;
+ public int b10677;
+ public int b10678;
+ public int b10679;
+ public int b10680;
+ public int b10681;
+ public int b10682;
+ public int b10683;
+ public int b10684;
+ public int b10685;
+ public int b10686;
+ public int b10687;
+ public int b10688;
+ public int b10689;
+ public int b10690;
+ public int b10691;
+ public int b10692;
+ public int b10693;
+ public int b10694;
+ public int b10695;
+ public int b10696;
+ public int b10697;
+ public int b10698;
+ public int b10699;
+ public int b10700;
+ public int b10701;
+ public int b10702;
+ public int b10703;
+ public int b10704;
+ public int b10705;
+ public int b10706;
+ public int b10707;
+ public int b10708;
+ public int b10709;
+ public int b10710;
+ public int b10711;
+ public int b10712;
+ public int b10713;
+ public int b10714;
+ public int b10715;
+ public int b10716;
+ public int b10717;
+ public int b10718;
+ public int b10719;
+ public int b10720;
+ public int b10721;
+ public int b10722;
+ public int b10723;
+ public int b10724;
+ public int b10725;
+ public int b10726;
+ public int b10727;
+ public int b10728;
+ public int b10729;
+ public int b10730;
+ public int b10731;
+ public int b10732;
+ public int b10733;
+ public int b10734;
+ public int b10735;
+ public int b10736;
+ public int b10737;
+ public int b10738;
+ public int b10739;
+ public int b10740;
+ public int b10741;
+ public int b10742;
+ public int b10743;
+ public int b10744;
+ public int b10745;
+ public int b10746;
+ public int b10747;
+ public int b10748;
+ public int b10749;
+ public int b10750;
+ public int b10751;
+ public int b10752;
+ public int b10753;
+ public int b10754;
+ public int b10755;
+ public int b10756;
+ public int b10757;
+ public int b10758;
+ public int b10759;
+ public int b10760;
+ public int b10761;
+ public int b10762;
+ public int b10763;
+ public int b10764;
+ public int b10765;
+ public int b10766;
+ public int b10767;
+ public int b10768;
+ public int b10769;
+ public int b10770;
+ public int b10771;
+ public int b10772;
+ public int b10773;
+ public int b10774;
+ public int b10775;
+ public int b10776;
+ public int b10777;
+ public int b10778;
+ public int b10779;
+ public int b10780;
+ public int b10781;
+ public int b10782;
+ public int b10783;
+ public int b10784;
+ public int b10785;
+ public int b10786;
+ public int b10787;
+ public int b10788;
+ public int b10789;
+ public int b10790;
+ public int b10791;
+ public int b10792;
+ public int b10793;
+ public int b10794;
+ public int b10795;
+ public int b10796;
+ public int b10797;
+ public int b10798;
+ public int b10799;
+ public int b10800;
+ public int b10801;
+ public int b10802;
+ public int b10803;
+ public int b10804;
+ public int b10805;
+ public int b10806;
+ public int b10807;
+ public int b10808;
+ public int b10809;
+ public int b10810;
+ public int b10811;
+ public int b10812;
+ public int b10813;
+ public int b10814;
+ public int b10815;
+ public int b10816;
+ public int b10817;
+ public int b10818;
+ public int b10819;
+ public int b10820;
+ public int b10821;
+ public int b10822;
+ public int b10823;
+ public int b10824;
+ public int b10825;
+ public int b10826;
+ public int b10827;
+ public int b10828;
+ public int b10829;
+ public int b10830;
+ public int b10831;
+ public int b10832;
+ public int b10833;
+ public int b10834;
+ public int b10835;
+ public int b10836;
+ public int b10837;
+ public int b10838;
+ public int b10839;
+ public int b10840;
+ public int b10841;
+ public int b10842;
+ public int b10843;
+ public int b10844;
+ public int b10845;
+ public int b10846;
+ public int b10847;
+ public int b10848;
+ public int b10849;
+ public int b10850;
+ public int b10851;
+ public int b10852;
+ public int b10853;
+ public int b10854;
+ public int b10855;
+ public int b10856;
+ public int b10857;
+ public int b10858;
+ public int b10859;
+ public int b10860;
+ public int b10861;
+ public int b10862;
+ public int b10863;
+ public int b10864;
+ public int b10865;
+ public int b10866;
+ public int b10867;
+ public int b10868;
+ public int b10869;
+ public int b10870;
+ public int b10871;
+ public int b10872;
+ public int b10873;
+ public int b10874;
+ public int b10875;
+ public int b10876;
+ public int b10877;
+ public int b10878;
+ public int b10879;
+ public int b10880;
+ public int b10881;
+ public int b10882;
+ public int b10883;
+ public int b10884;
+ public int b10885;
+ public int b10886;
+ public int b10887;
+ public int b10888;
+ public int b10889;
+ public int b10890;
+ public int b10891;
+ public int b10892;
+ public int b10893;
+ public int b10894;
+ public int b10895;
+ public int b10896;
+ public int b10897;
+ public int b10898;
+ public int b10899;
+ public int b10900;
+ public int b10901;
+ public int b10902;
+ public int b10903;
+ public int b10904;
+ public int b10905;
+ public int b10906;
+ public int b10907;
+ public int b10908;
+ public int b10909;
+ public int b10910;
+ public int b10911;
+ public int b10912;
+ public int b10913;
+ public int b10914;
+ public int b10915;
+ public int b10916;
+ public int b10917;
+ public int b10918;
+ public int b10919;
+ public int b10920;
+ public int b10921;
+ public int b10922;
+ public int b10923;
+ public int b10924;
+ public int b10925;
+ public int b10926;
+ public int b10927;
+ public int b10928;
+ public int b10929;
+ public int b10930;
+ public int b10931;
+ public int b10932;
+ public int b10933;
+ public int b10934;
+ public int b10935;
+ public int b10936;
+ public int b10937;
+ public int b10938;
+ public int b10939;
+ public int b10940;
+ public int b10941;
+ public int b10942;
+ public int b10943;
+ public int b10944;
+ public int b10945;
+ public int b10946;
+ public int b10947;
+ public int b10948;
+ public int b10949;
+ public int b10950;
+ public int b10951;
+ public int b10952;
+ public int b10953;
+ public int b10954;
+ public int b10955;
+ public int b10956;
+ public int b10957;
+ public int b10958;
+ public int b10959;
+ public int b10960;
+ public int b10961;
+ public int b10962;
+ public int b10963;
+ public int b10964;
+ public int b10965;
+ public int b10966;
+ public int b10967;
+ public int b10968;
+ public int b10969;
+ public int b10970;
+ public int b10971;
+ public int b10972;
+ public int b10973;
+ public int b10974;
+ public int b10975;
+ public int b10976;
+ public int b10977;
+ public int b10978;
+ public int b10979;
+ public int b10980;
+ public int b10981;
+ public int b10982;
+ public int b10983;
+ public int b10984;
+ public int b10985;
+ public int b10986;
+ public int b10987;
+ public int b10988;
+ public int b10989;
+ public int b10990;
+ public int b10991;
+ public int b10992;
+ public int b10993;
+ public int b10994;
+ public int b10995;
+ public int b10996;
+ public int b10997;
+ public int b10998;
+ public int b10999;
+ public int b11000;
+ public int b11001;
+ public int b11002;
+ public int b11003;
+ public int b11004;
+ public int b11005;
+ public int b11006;
+ public int b11007;
+ public int b11008;
+ public int b11009;
+ public int b11010;
+ public int b11011;
+ public int b11012;
+ public int b11013;
+ public int b11014;
+ public int b11015;
+ public int b11016;
+ public int b11017;
+ public int b11018;
+ public int b11019;
+ public int b11020;
+ public int b11021;
+ public int b11022;
+ public int b11023;
+ public int b11024;
+ public int b11025;
+ public int b11026;
+ public int b11027;
+ public int b11028;
+ public int b11029;
+ public int b11030;
+ public int b11031;
+ public int b11032;
+ public int b11033;
+ public int b11034;
+ public int b11035;
+ public int b11036;
+ public int b11037;
+ public int b11038;
+ public int b11039;
+ public int b11040;
+ public int b11041;
+ public int b11042;
+ public int b11043;
+ public int b11044;
+ public int b11045;
+ public int b11046;
+ public int b11047;
+ public int b11048;
+ public int b11049;
+ public int b11050;
+ public int b11051;
+ public int b11052;
+ public int b11053;
+ public int b11054;
+ public int b11055;
+ public int b11056;
+ public int b11057;
+ public int b11058;
+ public int b11059;
+ public int b11060;
+ public int b11061;
+ public int b11062;
+ public int b11063;
+ public int b11064;
+ public int b11065;
+ public int b11066;
+ public int b11067;
+ public int b11068;
+ public int b11069;
+ public int b11070;
+ public int b11071;
+ public int b11072;
+ public int b11073;
+ public int b11074;
+ public int b11075;
+ public int b11076;
+ public int b11077;
+ public int b11078;
+ public int b11079;
+ public int b11080;
+ public int b11081;
+ public int b11082;
+ public int b11083;
+ public int b11084;
+ public int b11085;
+ public int b11086;
+ public int b11087;
+ public int b11088;
+ public int b11089;
+ public int b11090;
+ public int b11091;
+ public int b11092;
+ public int b11093;
+ public int b11094;
+ public int b11095;
+ public int b11096;
+ public int b11097;
+ public int b11098;
+ public int b11099;
+ public int b11100;
+ public int b11101;
+ public int b11102;
+ public int b11103;
+ public int b11104;
+ public int b11105;
+ public int b11106;
+ public int b11107;
+ public int b11108;
+ public int b11109;
+ public int b11110;
+ public int b11111;
+ public int b11112;
+ public int b11113;
+ public int b11114;
+ public int b11115;
+ public int b11116;
+ public int b11117;
+ public int b11118;
+ public int b11119;
+ public int b11120;
+ public int b11121;
+ public int b11122;
+ public int b11123;
+ public int b11124;
+ public int b11125;
+ public int b11126;
+ public int b11127;
+ public int b11128;
+ public int b11129;
+ public int b11130;
+ public int b11131;
+ public int b11132;
+ public int b11133;
+ public int b11134;
+ public int b11135;
+ public int b11136;
+ public int b11137;
+ public int b11138;
+ public int b11139;
+ public int b11140;
+ public int b11141;
+ public int b11142;
+ public int b11143;
+ public int b11144;
+ public int b11145;
+ public int b11146;
+ public int b11147;
+ public int b11148;
+ public int b11149;
+ public int b11150;
+ public int b11151;
+ public int b11152;
+ public int b11153;
+ public int b11154;
+ public int b11155;
+ public int b11156;
+ public int b11157;
+ public int b11158;
+ public int b11159;
+ public int b11160;
+ public int b11161;
+ public int b11162;
+ public int b11163;
+ public int b11164;
+ public int b11165;
+ public int b11166;
+ public int b11167;
+ public int b11168;
+ public int b11169;
+ public int b11170;
+ public int b11171;
+ public int b11172;
+ public int b11173;
+ public int b11174;
+ public int b11175;
+ public int b11176;
+ public int b11177;
+ public int b11178;
+ public int b11179;
+ public int b11180;
+ public int b11181;
+ public int b11182;
+ public int b11183;
+ public int b11184;
+ public int b11185;
+ public int b11186;
+ public int b11187;
+ public int b11188;
+ public int b11189;
+ public int b11190;
+ public int b11191;
+ public int b11192;
+ public int b11193;
+ public int b11194;
+ public int b11195;
+ public int b11196;
+ public int b11197;
+ public int b11198;
+ public int b11199;
+ public int b11200;
+ public int b11201;
+ public int b11202;
+ public int b11203;
+ public int b11204;
+ public int b11205;
+ public int b11206;
+ public int b11207;
+ public int b11208;
+ public int b11209;
+ public int b11210;
+ public int b11211;
+ public int b11212;
+ public int b11213;
+ public int b11214;
+ public int b11215;
+ public int b11216;
+ public int b11217;
+ public int b11218;
+ public int b11219;
+ public int b11220;
+ public int b11221;
+ public int b11222;
+ public int b11223;
+ public int b11224;
+ public int b11225;
+ public int b11226;
+ public int b11227;
+ public int b11228;
+ public int b11229;
+ public int b11230;
+ public int b11231;
+ public int b11232;
+ public int b11233;
+ public int b11234;
+ public int b11235;
+ public int b11236;
+ public int b11237;
+ public int b11238;
+ public int b11239;
+ public int b11240;
+ public int b11241;
+ public int b11242;
+ public int b11243;
+ public int b11244;
+ public int b11245;
+ public int b11246;
+ public int b11247;
+ public int b11248;
+ public int b11249;
+ public int b11250;
+ public int b11251;
+ public int b11252;
+ public int b11253;
+ public int b11254;
+ public int b11255;
+ public int b11256;
+ public int b11257;
+ public int b11258;
+ public int b11259;
+ public int b11260;
+ public int b11261;
+ public int b11262;
+ public int b11263;
+ public int b11264;
+ public int b11265;
+ public int b11266;
+ public int b11267;
+ public int b11268;
+ public int b11269;
+ public int b11270;
+ public int b11271;
+ public int b11272;
+ public int b11273;
+ public int b11274;
+ public int b11275;
+ public int b11276;
+ public int b11277;
+ public int b11278;
+ public int b11279;
+ public int b11280;
+ public int b11281;
+ public int b11282;
+ public int b11283;
+ public int b11284;
+ public int b11285;
+ public int b11286;
+ public int b11287;
+ public int b11288;
+ public int b11289;
+ public int b11290;
+ public int b11291;
+ public int b11292;
+ public int b11293;
+ public int b11294;
+ public int b11295;
+ public int b11296;
+ public int b11297;
+ public int b11298;
+ public int b11299;
+ public int b11300;
+ public int b11301;
+ public int b11302;
+ public int b11303;
+ public int b11304;
+ public int b11305;
+ public int b11306;
+ public int b11307;
+ public int b11308;
+ public int b11309;
+ public int b11310;
+ public int b11311;
+ public int b11312;
+ public int b11313;
+ public int b11314;
+ public int b11315;
+ public int b11316;
+ public int b11317;
+ public int b11318;
+ public int b11319;
+ public int b11320;
+ public int b11321;
+ public int b11322;
+ public int b11323;
+ public int b11324;
+ public int b11325;
+ public int b11326;
+ public int b11327;
+ public int b11328;
+ public int b11329;
+ public int b11330;
+ public int b11331;
+ public int b11332;
+ public int b11333;
+ public int b11334;
+ public int b11335;
+ public int b11336;
+ public int b11337;
+ public int b11338;
+ public int b11339;
+ public int b11340;
+ public int b11341;
+ public int b11342;
+ public int b11343;
+ public int b11344;
+ public int b11345;
+ public int b11346;
+ public int b11347;
+ public int b11348;
+ public int b11349;
+ public int b11350;
+ public int b11351;
+ public int b11352;
+ public int b11353;
+ public int b11354;
+ public int b11355;
+ public int b11356;
+ public int b11357;
+ public int b11358;
+ public int b11359;
+ public int b11360;
+ public int b11361;
+ public int b11362;
+ public int b11363;
+ public int b11364;
+ public int b11365;
+ public int b11366;
+ public int b11367;
+ public int b11368;
+ public int b11369;
+ public int b11370;
+ public int b11371;
+ public int b11372;
+ public int b11373;
+ public int b11374;
+ public int b11375;
+ public int b11376;
+ public int b11377;
+ public int b11378;
+ public int b11379;
+ public int b11380;
+ public int b11381;
+ public int b11382;
+ public int b11383;
+ public int b11384;
+ public int b11385;
+ public int b11386;
+ public int b11387;
+ public int b11388;
+ public int b11389;
+ public int b11390;
+ public int b11391;
+ public int b11392;
+ public int b11393;
+ public int b11394;
+ public int b11395;
+ public int b11396;
+ public int b11397;
+ public int b11398;
+ public int b11399;
+ public int b11400;
+ public int b11401;
+ public int b11402;
+ public int b11403;
+ public int b11404;
+ public int b11405;
+ public int b11406;
+ public int b11407;
+ public int b11408;
+ public int b11409;
+ public int b11410;
+ public int b11411;
+ public int b11412;
+ public int b11413;
+ public int b11414;
+ public int b11415;
+ public int b11416;
+ public int b11417;
+ public int b11418;
+ public int b11419;
+ public int b11420;
+ public int b11421;
+ public int b11422;
+ public int b11423;
+ public int b11424;
+ public int b11425;
+ public int b11426;
+ public int b11427;
+ public int b11428;
+ public int b11429;
+ public int b11430;
+ public int b11431;
+ public int b11432;
+ public int b11433;
+ public int b11434;
+ public int b11435;
+ public int b11436;
+ public int b11437;
+ public int b11438;
+ public int b11439;
+ public int b11440;
+ public int b11441;
+ public int b11442;
+ public int b11443;
+ public int b11444;
+ public int b11445;
+ public int b11446;
+ public int b11447;
+ public int b11448;
+ public int b11449;
+ public int b11450;
+ public int b11451;
+ public int b11452;
+ public int b11453;
+ public int b11454;
+ public int b11455;
+ public int b11456;
+ public int b11457;
+ public int b11458;
+ public int b11459;
+ public int b11460;
+ public int b11461;
+ public int b11462;
+ public int b11463;
+ public int b11464;
+ public int b11465;
+ public int b11466;
+ public int b11467;
+ public int b11468;
+ public int b11469;
+ public int b11470;
+ public int b11471;
+ public int b11472;
+ public int b11473;
+ public int b11474;
+ public int b11475;
+ public int b11476;
+ public int b11477;
+ public int b11478;
+ public int b11479;
+ public int b11480;
+ public int b11481;
+ public int b11482;
+ public int b11483;
+ public int b11484;
+ public int b11485;
+ public int b11486;
+ public int b11487;
+ public int b11488;
+ public int b11489;
+ public int b11490;
+ public int b11491;
+ public int b11492;
+ public int b11493;
+ public int b11494;
+ public int b11495;
+ public int b11496;
+ public int b11497;
+ public int b11498;
+ public int b11499;
+ public int b11500;
+ public int b11501;
+ public int b11502;
+ public int b11503;
+ public int b11504;
+ public int b11505;
+ public int b11506;
+ public int b11507;
+ public int b11508;
+ public int b11509;
+ public int b11510;
+ public int b11511;
+ public int b11512;
+ public int b11513;
+ public int b11514;
+ public int b11515;
+ public int b11516;
+ public int b11517;
+ public int b11518;
+ public int b11519;
+ public int b11520;
+ public int b11521;
+ public int b11522;
+ public int b11523;
+ public int b11524;
+ public int b11525;
+ public int b11526;
+ public int b11527;
+ public int b11528;
+ public int b11529;
+ public int b11530;
+ public int b11531;
+ public int b11532;
+ public int b11533;
+ public int b11534;
+ public int b11535;
+ public int b11536;
+ public int b11537;
+ public int b11538;
+ public int b11539;
+ public int b11540;
+ public int b11541;
+ public int b11542;
+ public int b11543;
+ public int b11544;
+ public int b11545;
+ public int b11546;
+ public int b11547;
+ public int b11548;
+ public int b11549;
+ public int b11550;
+ public int b11551;
+ public int b11552;
+ public int b11553;
+ public int b11554;
+ public int b11555;
+ public int b11556;
+ public int b11557;
+ public int b11558;
+ public int b11559;
+ public int b11560;
+ public int b11561;
+ public int b11562;
+ public int b11563;
+ public int b11564;
+ public int b11565;
+ public int b11566;
+ public int b11567;
+ public int b11568;
+ public int b11569;
+ public int b11570;
+ public int b11571;
+ public int b11572;
+ public int b11573;
+ public int b11574;
+ public int b11575;
+ public int b11576;
+ public int b11577;
+ public int b11578;
+ public int b11579;
+ public int b11580;
+ public int b11581;
+ public int b11582;
+ public int b11583;
+ public int b11584;
+ public int b11585;
+ public int b11586;
+ public int b11587;
+ public int b11588;
+ public int b11589;
+ public int b11590;
+ public int b11591;
+ public int b11592;
+ public int b11593;
+ public int b11594;
+ public int b11595;
+ public int b11596;
+ public int b11597;
+ public int b11598;
+ public int b11599;
+ public int b11600;
+ public int b11601;
+ public int b11602;
+ public int b11603;
+ public int b11604;
+ public int b11605;
+ public int b11606;
+ public int b11607;
+ public int b11608;
+ public int b11609;
+ public int b11610;
+ public int b11611;
+ public int b11612;
+ public int b11613;
+ public int b11614;
+ public int b11615;
+ public int b11616;
+ public int b11617;
+ public int b11618;
+ public int b11619;
+ public int b11620;
+ public int b11621;
+ public int b11622;
+ public int b11623;
+ public int b11624;
+ public int b11625;
+ public int b11626;
+ public int b11627;
+ public int b11628;
+ public int b11629;
+ public int b11630;
+ public int b11631;
+ public int b11632;
+ public int b11633;
+ public int b11634;
+ public int b11635;
+ public int b11636;
+ public int b11637;
+ public int b11638;
+ public int b11639;
+ public int b11640;
+ public int b11641;
+ public int b11642;
+ public int b11643;
+ public int b11644;
+ public int b11645;
+ public int b11646;
+ public int b11647;
+ public int b11648;
+ public int b11649;
+ public int b11650;
+ public int b11651;
+ public int b11652;
+ public int b11653;
+ public int b11654;
+ public int b11655;
+ public int b11656;
+ public int b11657;
+ public int b11658;
+ public int b11659;
+ public int b11660;
+ public int b11661;
+ public int b11662;
+ public int b11663;
+ public int b11664;
+ public int b11665;
+ public int b11666;
+ public int b11667;
+ public int b11668;
+ public int b11669;
+ public int b11670;
+ public int b11671;
+ public int b11672;
+ public int b11673;
+ public int b11674;
+ public int b11675;
+ public int b11676;
+ public int b11677;
+ public int b11678;
+ public int b11679;
+ public int b11680;
+ public int b11681;
+ public int b11682;
+ public int b11683;
+ public int b11684;
+ public int b11685;
+ public int b11686;
+ public int b11687;
+ public int b11688;
+ public int b11689;
+ public int b11690;
+ public int b11691;
+ public int b11692;
+ public int b11693;
+ public int b11694;
+ public int b11695;
+ public int b11696;
+ public int b11697;
+ public int b11698;
+ public int b11699;
+ public int b11700;
+ public int b11701;
+ public int b11702;
+ public int b11703;
+ public int b11704;
+ public int b11705;
+ public int b11706;
+ public int b11707;
+ public int b11708;
+ public int b11709;
+ public int b11710;
+ public int b11711;
+ public int b11712;
+ public int b11713;
+ public int b11714;
+ public int b11715;
+ public int b11716;
+ public int b11717;
+ public int b11718;
+ public int b11719;
+ public int b11720;
+ public int b11721;
+ public int b11722;
+ public int b11723;
+ public int b11724;
+ public int b11725;
+ public int b11726;
+ public int b11727;
+ public int b11728;
+ public int b11729;
+ public int b11730;
+ public int b11731;
+ public int b11732;
+ public int b11733;
+ public int b11734;
+ public int b11735;
+ public int b11736;
+ public int b11737;
+ public int b11738;
+ public int b11739;
+ public int b11740;
+ public int b11741;
+ public int b11742;
+ public int b11743;
+ public int b11744;
+ public int b11745;
+ public int b11746;
+ public int b11747;
+ public int b11748;
+ public int b11749;
+ public int b11750;
+ public int b11751;
+ public int b11752;
+ public int b11753;
+ public int b11754;
+ public int b11755;
+ public int b11756;
+ public int b11757;
+ public int b11758;
+ public int b11759;
+ public int b11760;
+ public int b11761;
+ public int b11762;
+ public int b11763;
+ public int b11764;
+ public int b11765;
+ public int b11766;
+ public int b11767;
+ public int b11768;
+ public int b11769;
+ public int b11770;
+ public int b11771;
+ public int b11772;
+ public int b11773;
+ public int b11774;
+ public int b11775;
+ public int b11776;
+ public int b11777;
+ public int b11778;
+ public int b11779;
+ public int b11780;
+ public int b11781;
+ public int b11782;
+ public int b11783;
+ public int b11784;
+ public int b11785;
+ public int b11786;
+ public int b11787;
+ public int b11788;
+ public int b11789;
+ public int b11790;
+ public int b11791;
+ public int b11792;
+ public int b11793;
+ public int b11794;
+ public int b11795;
+ public int b11796;
+ public int b11797;
+ public int b11798;
+ public int b11799;
+ public int b11800;
+ public int b11801;
+ public int b11802;
+ public int b11803;
+ public int b11804;
+ public int b11805;
+ public int b11806;
+ public int b11807;
+ public int b11808;
+ public int b11809;
+ public int b11810;
+ public int b11811;
+ public int b11812;
+ public int b11813;
+ public int b11814;
+ public int b11815;
+ public int b11816;
+ public int b11817;
+ public int b11818;
+ public int b11819;
+ public int b11820;
+ public int b11821;
+ public int b11822;
+ public int b11823;
+ public int b11824;
+ public int b11825;
+ public int b11826;
+ public int b11827;
+ public int b11828;
+ public int b11829;
+ public int b11830;
+ public int b11831;
+ public int b11832;
+ public int b11833;
+ public int b11834;
+ public int b11835;
+ public int b11836;
+ public int b11837;
+ public int b11838;
+ public int b11839;
+ public int b11840;
+ public int b11841;
+ public int b11842;
+ public int b11843;
+ public int b11844;
+ public int b11845;
+ public int b11846;
+ public int b11847;
+ public int b11848;
+ public int b11849;
+ public int b11850;
+ public int b11851;
+ public int b11852;
+ public int b11853;
+ public int b11854;
+ public int b11855;
+ public int b11856;
+ public int b11857;
+ public int b11858;
+ public int b11859;
+ public int b11860;
+ public int b11861;
+ public int b11862;
+ public int b11863;
+ public int b11864;
+ public int b11865;
+ public int b11866;
+ public int b11867;
+ public int b11868;
+ public int b11869;
+ public int b11870;
+ public int b11871;
+ public int b11872;
+ public int b11873;
+ public int b11874;
+ public int b11875;
+ public int b11876;
+ public int b11877;
+ public int b11878;
+ public int b11879;
+ public int b11880;
+ public int b11881;
+ public int b11882;
+ public int b11883;
+ public int b11884;
+ public int b11885;
+ public int b11886;
+ public int b11887;
+ public int b11888;
+ public int b11889;
+ public int b11890;
+ public int b11891;
+ public int b11892;
+ public int b11893;
+ public int b11894;
+ public int b11895;
+ public int b11896;
+ public int b11897;
+ public int b11898;
+ public int b11899;
+ public int b11900;
+ public int b11901;
+ public int b11902;
+ public int b11903;
+ public int b11904;
+ public int b11905;
+ public int b11906;
+ public int b11907;
+ public int b11908;
+ public int b11909;
+ public int b11910;
+ public int b11911;
+ public int b11912;
+ public int b11913;
+ public int b11914;
+ public int b11915;
+ public int b11916;
+ public int b11917;
+ public int b11918;
+ public int b11919;
+ public int b11920;
+ public int b11921;
+ public int b11922;
+ public int b11923;
+ public int b11924;
+ public int b11925;
+ public int b11926;
+ public int b11927;
+ public int b11928;
+ public int b11929;
+ public int b11930;
+ public int b11931;
+ public int b11932;
+ public int b11933;
+ public int b11934;
+ public int b11935;
+ public int b11936;
+ public int b11937;
+ public int b11938;
+ public int b11939;
+ public int b11940;
+ public int b11941;
+ public int b11942;
+ public int b11943;
+ public int b11944;
+ public int b11945;
+ public int b11946;
+ public int b11947;
+ public int b11948;
+ public int b11949;
+ public int b11950;
+ public int b11951;
+ public int b11952;
+ public int b11953;
+ public int b11954;
+ public int b11955;
+ public int b11956;
+ public int b11957;
+ public int b11958;
+ public int b11959;
+ public int b11960;
+ public int b11961;
+ public int b11962;
+ public int b11963;
+ public int b11964;
+ public int b11965;
+ public int b11966;
+ public int b11967;
+ public int b11968;
+ public int b11969;
+ public int b11970;
+ public int b11971;
+ public int b11972;
+ public int b11973;
+ public int b11974;
+ public int b11975;
+ public int b11976;
+ public int b11977;
+ public int b11978;
+ public int b11979;
+ public int b11980;
+ public int b11981;
+ public int b11982;
+ public int b11983;
+ public int b11984;
+ public int b11985;
+ public int b11986;
+ public int b11987;
+ public int b11988;
+ public int b11989;
+ public int b11990;
+ public int b11991;
+ public int b11992;
+ public int b11993;
+ public int b11994;
+ public int b11995;
+ public int b11996;
+ public int b11997;
+ public int b11998;
+ public int b11999;
+ public int b12000;
+ public int b12001;
+ public int b12002;
+ public int b12003;
+ public int b12004;
+ public int b12005;
+ public int b12006;
+ public int b12007;
+ public int b12008;
+ public int b12009;
+ public int b12010;
+ public int b12011;
+ public int b12012;
+ public int b12013;
+ public int b12014;
+ public int b12015;
+ public int b12016;
+ public int b12017;
+ public int b12018;
+ public int b12019;
+ public int b12020;
+ public int b12021;
+ public int b12022;
+ public int b12023;
+ public int b12024;
+ public int b12025;
+ public int b12026;
+ public int b12027;
+ public int b12028;
+ public int b12029;
+ public int b12030;
+ public int b12031;
+ public int b12032;
+ public int b12033;
+ public int b12034;
+ public int b12035;
+ public int b12036;
+ public int b12037;
+ public int b12038;
+ public int b12039;
+ public int b12040;
+ public int b12041;
+ public int b12042;
+ public int b12043;
+ public int b12044;
+ public int b12045;
+ public int b12046;
+ public int b12047;
+ public int b12048;
+ public int b12049;
+ public int b12050;
+ public int b12051;
+ public int b12052;
+ public int b12053;
+ public int b12054;
+ public int b12055;
+ public int b12056;
+ public int b12057;
+ public int b12058;
+ public int b12059;
+ public int b12060;
+ public int b12061;
+ public int b12062;
+ public int b12063;
+ public int b12064;
+ public int b12065;
+ public int b12066;
+ public int b12067;
+ public int b12068;
+ public int b12069;
+ public int b12070;
+ public int b12071;
+ public int b12072;
+ public int b12073;
+ public int b12074;
+ public int b12075;
+ public int b12076;
+ public int b12077;
+ public int b12078;
+ public int b12079;
+ public int b12080;
+ public int b12081;
+ public int b12082;
+ public int b12083;
+ public int b12084;
+ public int b12085;
+ public int b12086;
+ public int b12087;
+ public int b12088;
+ public int b12089;
+ public int b12090;
+ public int b12091;
+ public int b12092;
+ public int b12093;
+ public int b12094;
+ public int b12095;
+ public int b12096;
+ public int b12097;
+ public int b12098;
+ public int b12099;
+ public int b12100;
+ public int b12101;
+ public int b12102;
+ public int b12103;
+ public int b12104;
+ public int b12105;
+ public int b12106;
+ public int b12107;
+ public int b12108;
+ public int b12109;
+ public int b12110;
+ public int b12111;
+ public int b12112;
+ public int b12113;
+ public int b12114;
+ public int b12115;
+ public int b12116;
+ public int b12117;
+ public int b12118;
+ public int b12119;
+ public int b12120;
+ public int b12121;
+ public int b12122;
+ public int b12123;
+ public int b12124;
+ public int b12125;
+ public int b12126;
+ public int b12127;
+ public int b12128;
+ public int b12129;
+ public int b12130;
+ public int b12131;
+ public int b12132;
+ public int b12133;
+ public int b12134;
+ public int b12135;
+ public int b12136;
+ public int b12137;
+ public int b12138;
+ public int b12139;
+ public int b12140;
+ public int b12141;
+ public int b12142;
+ public int b12143;
+ public int b12144;
+ public int b12145;
+ public int b12146;
+ public int b12147;
+ public int b12148;
+ public int b12149;
+ public int b12150;
+ public int b12151;
+ public int b12152;
+ public int b12153;
+ public int b12154;
+ public int b12155;
+ public int b12156;
+ public int b12157;
+ public int b12158;
+ public int b12159;
+ public int b12160;
+ public int b12161;
+ public int b12162;
+ public int b12163;
+ public int b12164;
+ public int b12165;
+ public int b12166;
+ public int b12167;
+ public int b12168;
+ public int b12169;
+ public int b12170;
+ public int b12171;
+ public int b12172;
+ public int b12173;
+ public int b12174;
+ public int b12175;
+ public int b12176;
+ public int b12177;
+ public int b12178;
+ public int b12179;
+ public int b12180;
+ public int b12181;
+ public int b12182;
+ public int b12183;
+ public int b12184;
+ public int b12185;
+ public int b12186;
+ public int b12187;
+ public int b12188;
+ public int b12189;
+ public int b12190;
+ public int b12191;
+ public int b12192;
+ public int b12193;
+ public int b12194;
+ public int b12195;
+ public int b12196;
+ public int b12197;
+ public int b12198;
+ public int b12199;
+ public int b12200;
+ public int b12201;
+ public int b12202;
+ public int b12203;
+ public int b12204;
+ public int b12205;
+ public int b12206;
+ public int b12207;
+ public int b12208;
+ public int b12209;
+ public int b12210;
+ public int b12211;
+ public int b12212;
+ public int b12213;
+ public int b12214;
+ public int b12215;
+ public int b12216;
+ public int b12217;
+ public int b12218;
+ public int b12219;
+ public int b12220;
+ public int b12221;
+ public int b12222;
+ public int b12223;
+ public int b12224;
+ public int b12225;
+ public int b12226;
+ public int b12227;
+ public int b12228;
+ public int b12229;
+ public int b12230;
+ public int b12231;
+ public int b12232;
+ public int b12233;
+ public int b12234;
+ public int b12235;
+ public int b12236;
+ public int b12237;
+ public int b12238;
+ public int b12239;
+ public int b12240;
+ public int b12241;
+ public int b12242;
+ public int b12243;
+ public int b12244;
+ public int b12245;
+ public int b12246;
+ public int b12247;
+ public int b12248;
+ public int b12249;
+ public int b12250;
+ public int b12251;
+ public int b12252;
+ public int b12253;
+ public int b12254;
+ public int b12255;
+ public int b12256;
+ public int b12257;
+ public int b12258;
+ public int b12259;
+ public int b12260;
+ public int b12261;
+ public int b12262;
+ public int b12263;
+ public int b12264;
+ public int b12265;
+ public int b12266;
+ public int b12267;
+ public int b12268;
+ public int b12269;
+ public int b12270;
+ public int b12271;
+ public int b12272;
+ public int b12273;
+ public int b12274;
+ public int b12275;
+ public int b12276;
+ public int b12277;
+ public int b12278;
+ public int b12279;
+ public int b12280;
+ public int b12281;
+ public int b12282;
+ public int b12283;
+ public int b12284;
+ public int b12285;
+ public int b12286;
+ public int b12287;
+ public int b12288;
+ public int b12289;
+ public int b12290;
+ public int b12291;
+ public int b12292;
+ public int b12293;
+ public int b12294;
+ public int b12295;
+ public int b12296;
+ public int b12297;
+ public int b12298;
+ public int b12299;
+ public int b12300;
+ public int b12301;
+ public int b12302;
+ public int b12303;
+ public int b12304;
+ public int b12305;
+ public int b12306;
+ public int b12307;
+ public int b12308;
+ public int b12309;
+ public int b12310;
+ public int b12311;
+ public int b12312;
+ public int b12313;
+ public int b12314;
+ public int b12315;
+ public int b12316;
+ public int b12317;
+ public int b12318;
+ public int b12319;
+ public int b12320;
+ public int b12321;
+ public int b12322;
+ public int b12323;
+ public int b12324;
+ public int b12325;
+ public int b12326;
+ public int b12327;
+ public int b12328;
+ public int b12329;
+ public int b12330;
+ public int b12331;
+ public int b12332;
+ public int b12333;
+ public int b12334;
+ public int b12335;
+ public int b12336;
+ public int b12337;
+ public int b12338;
+ public int b12339;
+ public int b12340;
+ public int b12341;
+ public int b12342;
+ public int b12343;
+ public int b12344;
+ public int b12345;
+ public int b12346;
+ public int b12347;
+ public int b12348;
+ public int b12349;
+ public int b12350;
+ public int b12351;
+ public int b12352;
+ public int b12353;
+ public int b12354;
+ public int b12355;
+ public int b12356;
+ public int b12357;
+ public int b12358;
+ public int b12359;
+ public int b12360;
+ public int b12361;
+ public int b12362;
+ public int b12363;
+ public int b12364;
+ public int b12365;
+ public int b12366;
+ public int b12367;
+ public int b12368;
+ public int b12369;
+ public int b12370;
+ public int b12371;
+ public int b12372;
+ public int b12373;
+ public int b12374;
+ public int b12375;
+ public int b12376;
+ public int b12377;
+ public int b12378;
+ public int b12379;
+ public int b12380;
+ public int b12381;
+ public int b12382;
+ public int b12383;
+ public int b12384;
+ public int b12385;
+ public int b12386;
+ public int b12387;
+ public int b12388;
+ public int b12389;
+ public int b12390;
+ public int b12391;
+ public int b12392;
+ public int b12393;
+ public int b12394;
+ public int b12395;
+ public int b12396;
+ public int b12397;
+ public int b12398;
+ public int b12399;
+ public int b12400;
+ public int b12401;
+ public int b12402;
+ public int b12403;
+ public int b12404;
+ public int b12405;
+ public int b12406;
+ public int b12407;
+ public int b12408;
+ public int b12409;
+ public int b12410;
+ public int b12411;
+ public int b12412;
+ public int b12413;
+ public int b12414;
+ public int b12415;
+ public int b12416;
+ public int b12417;
+ public int b12418;
+ public int b12419;
+ public int b12420;
+ public int b12421;
+ public int b12422;
+ public int b12423;
+ public int b12424;
+ public int b12425;
+ public int b12426;
+ public int b12427;
+ public int b12428;
+ public int b12429;
+ public int b12430;
+ public int b12431;
+ public int b12432;
+ public int b12433;
+ public int b12434;
+ public int b12435;
+ public int b12436;
+ public int b12437;
+ public int b12438;
+ public int b12439;
+ public int b12440;
+ public int b12441;
+ public int b12442;
+ public int b12443;
+ public int b12444;
+ public int b12445;
+ public int b12446;
+ public int b12447;
+ public int b12448;
+ public int b12449;
+ public int b12450;
+ public int b12451;
+ public int b12452;
+ public int b12453;
+ public int b12454;
+ public int b12455;
+ public int b12456;
+ public int b12457;
+ public int b12458;
+ public int b12459;
+ public int b12460;
+ public int b12461;
+ public int b12462;
+ public int b12463;
+ public int b12464;
+ public int b12465;
+ public int b12466;
+ public int b12467;
+ public int b12468;
+ public int b12469;
+ public int b12470;
+ public int b12471;
+ public int b12472;
+ public int b12473;
+ public int b12474;
+ public int b12475;
+ public int b12476;
+ public int b12477;
+ public int b12478;
+ public int b12479;
+ public int b12480;
+ public int b12481;
+ public int b12482;
+ public int b12483;
+ public int b12484;
+ public int b12485;
+ public int b12486;
+ public int b12487;
+ public int b12488;
+ public int b12489;
+ public int b12490;
+ public int b12491;
+ public int b12492;
+ public int b12493;
+ public int b12494;
+ public int b12495;
+ public int b12496;
+ public int b12497;
+ public int b12498;
+ public int b12499;
+ public int b12500;
+ public int b12501;
+ public int b12502;
+ public int b12503;
+ public int b12504;
+ public int b12505;
+ public int b12506;
+ public int b12507;
+ public int b12508;
+ public int b12509;
+ public int b12510;
+ public int b12511;
+ public int b12512;
+ public int b12513;
+ public int b12514;
+ public int b12515;
+ public int b12516;
+ public int b12517;
+ public int b12518;
+ public int b12519;
+ public int b12520;
+ public int b12521;
+ public int b12522;
+ public int b12523;
+ public int b12524;
+ public int b12525;
+ public int b12526;
+ public int b12527;
+ public int b12528;
+ public int b12529;
+ public int b12530;
+ public int b12531;
+ public int b12532;
+ public int b12533;
+ public int b12534;
+ public int b12535;
+ public int b12536;
+ public int b12537;
+ public int b12538;
+ public int b12539;
+ public int b12540;
+ public int b12541;
+ public int b12542;
+ public int b12543;
+ public int b12544;
+ public int b12545;
+ public int b12546;
+ public int b12547;
+ public int b12548;
+ public int b12549;
+ public int b12550;
+ public int b12551;
+ public int b12552;
+ public int b12553;
+ public int b12554;
+ public int b12555;
+ public int b12556;
+ public int b12557;
+ public int b12558;
+ public int b12559;
+ public int b12560;
+ public int b12561;
+ public int b12562;
+ public int b12563;
+ public int b12564;
+ public int b12565;
+ public int b12566;
+ public int b12567;
+ public int b12568;
+ public int b12569;
+ public int b12570;
+ public int b12571;
+ public int b12572;
+ public int b12573;
+ public int b12574;
+ public int b12575;
+ public int b12576;
+ public int b12577;
+ public int b12578;
+ public int b12579;
+ public int b12580;
+ public int b12581;
+ public int b12582;
+ public int b12583;
+ public int b12584;
+ public int b12585;
+ public int b12586;
+ public int b12587;
+ public int b12588;
+ public int b12589;
+ public int b12590;
+ public int b12591;
+ public int b12592;
+ public int b12593;
+ public int b12594;
+ public int b12595;
+ public int b12596;
+ public int b12597;
+ public int b12598;
+ public int b12599;
+ public int b12600;
+ public int b12601;
+ public int b12602;
+ public int b12603;
+ public int b12604;
+ public int b12605;
+ public int b12606;
+ public int b12607;
+ public int b12608;
+ public int b12609;
+ public int b12610;
+ public int b12611;
+ public int b12612;
+ public int b12613;
+ public int b12614;
+ public int b12615;
+ public int b12616;
+ public int b12617;
+ public int b12618;
+ public int b12619;
+ public int b12620;
+ public int b12621;
+ public int b12622;
+ public int b12623;
+ public int b12624;
+ public int b12625;
+ public int b12626;
+ public int b12627;
+ public int b12628;
+ public int b12629;
+ public int b12630;
+ public int b12631;
+ public int b12632;
+ public int b12633;
+ public int b12634;
+ public int b12635;
+ public int b12636;
+ public int b12637;
+ public int b12638;
+ public int b12639;
+ public int b12640;
+ public int b12641;
+ public int b12642;
+ public int b12643;
+ public int b12644;
+ public int b12645;
+ public int b12646;
+ public int b12647;
+ public int b12648;
+ public int b12649;
+ public int b12650;
+ public int b12651;
+ public int b12652;
+ public int b12653;
+ public int b12654;
+ public int b12655;
+ public int b12656;
+ public int b12657;
+ public int b12658;
+ public int b12659;
+ public int b12660;
+ public int b12661;
+ public int b12662;
+ public int b12663;
+ public int b12664;
+ public int b12665;
+ public int b12666;
+ public int b12667;
+ public int b12668;
+ public int b12669;
+ public int b12670;
+ public int b12671;
+ public int b12672;
+ public int b12673;
+ public int b12674;
+ public int b12675;
+ public int b12676;
+ public int b12677;
+ public int b12678;
+ public int b12679;
+ public int b12680;
+ public int b12681;
+ public int b12682;
+ public int b12683;
+ public int b12684;
+ public int b12685;
+ public int b12686;
+ public int b12687;
+ public int b12688;
+ public int b12689;
+ public int b12690;
+ public int b12691;
+ public int b12692;
+ public int b12693;
+ public int b12694;
+ public int b12695;
+ public int b12696;
+ public int b12697;
+ public int b12698;
+ public int b12699;
+ public int b12700;
+ public int b12701;
+ public int b12702;
+ public int b12703;
+ public int b12704;
+ public int b12705;
+ public int b12706;
+ public int b12707;
+ public int b12708;
+ public int b12709;
+ public int b12710;
+ public int b12711;
+ public int b12712;
+ public int b12713;
+ public int b12714;
+ public int b12715;
+ public int b12716;
+ public int b12717;
+ public int b12718;
+ public int b12719;
+ public int b12720;
+ public int b12721;
+ public int b12722;
+ public int b12723;
+ public int b12724;
+ public int b12725;
+ public int b12726;
+ public int b12727;
+ public int b12728;
+ public int b12729;
+ public int b12730;
+ public int b12731;
+ public int b12732;
+ public int b12733;
+ public int b12734;
+ public int b12735;
+ public int b12736;
+ public int b12737;
+ public int b12738;
+ public int b12739;
+ public int b12740;
+ public int b12741;
+ public int b12742;
+ public int b12743;
+ public int b12744;
+ public int b12745;
+ public int b12746;
+ public int b12747;
+ public int b12748;
+ public int b12749;
+ public int b12750;
+ public int b12751;
+ public int b12752;
+ public int b12753;
+ public int b12754;
+ public int b12755;
+ public int b12756;
+ public int b12757;
+ public int b12758;
+ public int b12759;
+ public int b12760;
+ public int b12761;
+ public int b12762;
+ public int b12763;
+ public int b12764;
+ public int b12765;
+ public int b12766;
+ public int b12767;
+ public int b12768;
+ public int b12769;
+ public int b12770;
+ public int b12771;
+ public int b12772;
+ public int b12773;
+ public int b12774;
+ public int b12775;
+ public int b12776;
+ public int b12777;
+ public int b12778;
+ public int b12779;
+ public int b12780;
+ public int b12781;
+ public int b12782;
+ public int b12783;
+ public int b12784;
+ public int b12785;
+ public int b12786;
+ public int b12787;
+ public int b12788;
+ public int b12789;
+ public int b12790;
+ public int b12791;
+ public int b12792;
+ public int b12793;
+ public int b12794;
+ public int b12795;
+ public int b12796;
+ public int b12797;
+ public int b12798;
+ public int b12799;
+ public int b12800;
+ public int b12801;
+ public int b12802;
+ public int b12803;
+ public int b12804;
+ public int b12805;
+ public int b12806;
+ public int b12807;
+ public int b12808;
+ public int b12809;
+ public int b12810;
+ public int b12811;
+ public int b12812;
+ public int b12813;
+ public int b12814;
+ public int b12815;
+ public int b12816;
+ public int b12817;
+ public int b12818;
+ public int b12819;
+ public int b12820;
+ public int b12821;
+ public int b12822;
+ public int b12823;
+ public int b12824;
+ public int b12825;
+ public int b12826;
+ public int b12827;
+ public int b12828;
+ public int b12829;
+ public int b12830;
+ public int b12831;
+ public int b12832;
+ public int b12833;
+ public int b12834;
+ public int b12835;
+ public int b12836;
+ public int b12837;
+ public int b12838;
+ public int b12839;
+ public int b12840;
+ public int b12841;
+ public int b12842;
+ public int b12843;
+ public int b12844;
+ public int b12845;
+ public int b12846;
+ public int b12847;
+ public int b12848;
+ public int b12849;
+ public int b12850;
+ public int b12851;
+ public int b12852;
+ public int b12853;
+ public int b12854;
+ public int b12855;
+ public int b12856;
+ public int b12857;
+ public int b12858;
+ public int b12859;
+ public int b12860;
+ public int b12861;
+ public int b12862;
+ public int b12863;
+ public int b12864;
+ public int b12865;
+ public int b12866;
+ public int b12867;
+ public int b12868;
+ public int b12869;
+ public int b12870;
+ public int b12871;
+ public int b12872;
+ public int b12873;
+ public int b12874;
+ public int b12875;
+ public int b12876;
+ public int b12877;
+ public int b12878;
+ public int b12879;
+ public int b12880;
+ public int b12881;
+ public int b12882;
+ public int b12883;
+ public int b12884;
+ public int b12885;
+ public int b12886;
+ public int b12887;
+ public int b12888;
+ public int b12889;
+ public int b12890;
+ public int b12891;
+ public int b12892;
+ public int b12893;
+ public int b12894;
+ public int b12895;
+ public int b12896;
+ public int b12897;
+ public int b12898;
+ public int b12899;
+ public int b12900;
+ public int b12901;
+ public int b12902;
+ public int b12903;
+ public int b12904;
+ public int b12905;
+ public int b12906;
+ public int b12907;
+ public int b12908;
+ public int b12909;
+ public int b12910;
+ public int b12911;
+ public int b12912;
+ public int b12913;
+ public int b12914;
+ public int b12915;
+ public int b12916;
+ public int b12917;
+ public int b12918;
+ public int b12919;
+ public int b12920;
+ public int b12921;
+ public int b12922;
+ public int b12923;
+ public int b12924;
+ public int b12925;
+ public int b12926;
+ public int b12927;
+ public int b12928;
+ public int b12929;
+ public int b12930;
+ public int b12931;
+ public int b12932;
+ public int b12933;
+ public int b12934;
+ public int b12935;
+ public int b12936;
+ public int b12937;
+ public int b12938;
+ public int b12939;
+ public int b12940;
+ public int b12941;
+ public int b12942;
+ public int b12943;
+ public int b12944;
+ public int b12945;
+ public int b12946;
+ public int b12947;
+ public int b12948;
+ public int b12949;
+ public int b12950;
+ public int b12951;
+ public int b12952;
+ public int b12953;
+ public int b12954;
+ public int b12955;
+ public int b12956;
+ public int b12957;
+ public int b12958;
+ public int b12959;
+ public int b12960;
+ public int b12961;
+ public int b12962;
+ public int b12963;
+ public int b12964;
+ public int b12965;
+ public int b12966;
+ public int b12967;
+ public int b12968;
+ public int b12969;
+ public int b12970;
+ public int b12971;
+ public int b12972;
+ public int b12973;
+ public int b12974;
+ public int b12975;
+ public int b12976;
+ public int b12977;
+ public int b12978;
+ public int b12979;
+ public int b12980;
+ public int b12981;
+ public int b12982;
+ public int b12983;
+ public int b12984;
+ public int b12985;
+ public int b12986;
+ public int b12987;
+ public int b12988;
+ public int b12989;
+ public int b12990;
+ public int b12991;
+ public int b12992;
+ public int b12993;
+ public int b12994;
+ public int b12995;
+ public int b12996;
+ public int b12997;
+ public int b12998;
+ public int b12999;
+ public int b13000;
+ public int b13001;
+ public int b13002;
+ public int b13003;
+ public int b13004;
+ public int b13005;
+ public int b13006;
+ public int b13007;
+ public int b13008;
+ public int b13009;
+ public int b13010;
+ public int b13011;
+ public int b13012;
+ public int b13013;
+ public int b13014;
+ public int b13015;
+ public int b13016;
+ public int b13017;
+ public int b13018;
+ public int b13019;
+ public int b13020;
+ public int b13021;
+ public int b13022;
+ public int b13023;
+ public int b13024;
+ public int b13025;
+ public int b13026;
+ public int b13027;
+ public int b13028;
+ public int b13029;
+ public int b13030;
+ public int b13031;
+ public int b13032;
+ public int b13033;
+ public int b13034;
+ public int b13035;
+ public int b13036;
+ public int b13037;
+ public int b13038;
+ public int b13039;
+ public int b13040;
+ public int b13041;
+ public int b13042;
+ public int b13043;
+ public int b13044;
+ public int b13045;
+ public int b13046;
+ public int b13047;
+ public int b13048;
+ public int b13049;
+ public int b13050;
+ public int b13051;
+ public int b13052;
+ public int b13053;
+ public int b13054;
+ public int b13055;
+ public int b13056;
+ public int b13057;
+ public int b13058;
+ public int b13059;
+ public int b13060;
+ public int b13061;
+ public int b13062;
+ public int b13063;
+ public int b13064;
+ public int b13065;
+ public int b13066;
+ public int b13067;
+ public int b13068;
+ public int b13069;
+ public int b13070;
+ public int b13071;
+ public int b13072;
+ public int b13073;
+ public int b13074;
+ public int b13075;
+ public int b13076;
+ public int b13077;
+ public int b13078;
+ public int b13079;
+ public int b13080;
+ public int b13081;
+ public int b13082;
+ public int b13083;
+ public int b13084;
+ public int b13085;
+ public int b13086;
+ public int b13087;
+ public int b13088;
+ public int b13089;
+ public int b13090;
+ public int b13091;
+ public int b13092;
+ public int b13093;
+ public int b13094;
+ public int b13095;
+ public int b13096;
+ public int b13097;
+ public int b13098;
+ public int b13099;
+ public int b13100;
+ public int b13101;
+ public int b13102;
+ public int b13103;
+ public int b13104;
+ public int b13105;
+ public int b13106;
+ public int b13107;
+ public int b13108;
+ public int b13109;
+ public int b13110;
+ public int b13111;
+ public int b13112;
+ public int b13113;
+ public int b13114;
+ public int b13115;
+ public int b13116;
+ public int b13117;
+ public int b13118;
+ public int b13119;
+ public int b13120;
+ public int b13121;
+ public int b13122;
+ public int b13123;
+ public int b13124;
+ public int b13125;
+ public int b13126;
+ public int b13127;
+ public int b13128;
+ public int b13129;
+ public int b13130;
+ public int b13131;
+ public int b13132;
+ public int b13133;
+ public int b13134;
+ public int b13135;
+ public int b13136;
+ public int b13137;
+ public int b13138;
+ public int b13139;
+ public int b13140;
+ public int b13141;
+ public int b13142;
+ public int b13143;
+ public int b13144;
+ public int b13145;
+ public int b13146;
+ public int b13147;
+ public int b13148;
+ public int b13149;
+ public int b13150;
+ public int b13151;
+ public int b13152;
+ public int b13153;
+ public int b13154;
+ public int b13155;
+ public int b13156;
+ public int b13157;
+ public int b13158;
+ public int b13159;
+ public int b13160;
+ public int b13161;
+ public int b13162;
+ public int b13163;
+ public int b13164;
+ public int b13165;
+ public int b13166;
+ public int b13167;
+ public int b13168;
+ public int b13169;
+ public int b13170;
+ public int b13171;
+ public int b13172;
+ public int b13173;
+ public int b13174;
+ public int b13175;
+ public int b13176;
+ public int b13177;
+ public int b13178;
+ public int b13179;
+ public int b13180;
+ public int b13181;
+ public int b13182;
+ public int b13183;
+ public int b13184;
+ public int b13185;
+ public int b13186;
+ public int b13187;
+ public int b13188;
+ public int b13189;
+ public int b13190;
+ public int b13191;
+ public int b13192;
+ public int b13193;
+ public int b13194;
+ public int b13195;
+ public int b13196;
+ public int b13197;
+ public int b13198;
+ public int b13199;
+ public int b13200;
+ public int b13201;
+ public int b13202;
+ public int b13203;
+ public int b13204;
+ public int b13205;
+ public int b13206;
+ public int b13207;
+ public int b13208;
+ public int b13209;
+ public int b13210;
+ public int b13211;
+ public int b13212;
+ public int b13213;
+ public int b13214;
+ public int b13215;
+ public int b13216;
+ public int b13217;
+ public int b13218;
+ public int b13219;
+ public int b13220;
+ public int b13221;
+ public int b13222;
+ public int b13223;
+ public int b13224;
+ public int b13225;
+ public int b13226;
+ public int b13227;
+ public int b13228;
+ public int b13229;
+ public int b13230;
+ public int b13231;
+ public int b13232;
+ public int b13233;
+ public int b13234;
+ public int b13235;
+ public int b13236;
+ public int b13237;
+ public int b13238;
+ public int b13239;
+ public int b13240;
+ public int b13241;
+ public int b13242;
+ public int b13243;
+ public int b13244;
+ public int b13245;
+ public int b13246;
+ public int b13247;
+ public int b13248;
+ public int b13249;
+ public int b13250;
+ public int b13251;
+ public int b13252;
+ public int b13253;
+ public int b13254;
+ public int b13255;
+ public int b13256;
+ public int b13257;
+ public int b13258;
+ public int b13259;
+ public int b13260;
+ public int b13261;
+ public int b13262;
+ public int b13263;
+ public int b13264;
+ public int b13265;
+ public int b13266;
+ public int b13267;
+ public int b13268;
+ public int b13269;
+ public int b13270;
+ public int b13271;
+ public int b13272;
+ public int b13273;
+ public int b13274;
+ public int b13275;
+ public int b13276;
+ public int b13277;
+ public int b13278;
+ public int b13279;
+ public int b13280;
+ public int b13281;
+ public int b13282;
+ public int b13283;
+ public int b13284;
+ public int b13285;
+ public int b13286;
+ public int b13287;
+ public int b13288;
+ public int b13289;
+ public int b13290;
+ public int b13291;
+ public int b13292;
+ public int b13293;
+ public int b13294;
+ public int b13295;
+ public int b13296;
+ public int b13297;
+ public int b13298;
+ public int b13299;
+ public int b13300;
+ public int b13301;
+ public int b13302;
+ public int b13303;
+ public int b13304;
+ public int b13305;
+ public int b13306;
+ public int b13307;
+ public int b13308;
+ public int b13309;
+ public int b13310;
+ public int b13311;
+ public int b13312;
+ public int b13313;
+ public int b13314;
+ public int b13315;
+ public int b13316;
+ public int b13317;
+ public int b13318;
+ public int b13319;
+ public int b13320;
+ public int b13321;
+ public int b13322;
+ public int b13323;
+ public int b13324;
+ public int b13325;
+ public int b13326;
+ public int b13327;
+ public int b13328;
+ public int b13329;
+ public int b13330;
+ public int b13331;
+ public int b13332;
+ public int b13333;
+ public int b13334;
+ public int b13335;
+ public int b13336;
+ public int b13337;
+ public int b13338;
+ public int b13339;
+ public int b13340;
+ public int b13341;
+ public int b13342;
+ public int b13343;
+ public int b13344;
+ public int b13345;
+ public int b13346;
+ public int b13347;
+ public int b13348;
+ public int b13349;
+ public int b13350;
+ public int b13351;
+ public int b13352;
+ public int b13353;
+ public int b13354;
+ public int b13355;
+ public int b13356;
+ public int b13357;
+ public int b13358;
+ public int b13359;
+ public int b13360;
+ public int b13361;
+ public int b13362;
+ public int b13363;
+ public int b13364;
+ public int b13365;
+ public int b13366;
+ public int b13367;
+ public int b13368;
+ public int b13369;
+ public int b13370;
+ public int b13371;
+ public int b13372;
+ public int b13373;
+ public int b13374;
+ public int b13375;
+ public int b13376;
+ public int b13377;
+ public int b13378;
+ public int b13379;
+ public int b13380;
+ public int b13381;
+ public int b13382;
+ public int b13383;
+ public int b13384;
+ public int b13385;
+ public int b13386;
+ public int b13387;
+ public int b13388;
+ public int b13389;
+ public int b13390;
+ public int b13391;
+ public int b13392;
+ public int b13393;
+ public int b13394;
+ public int b13395;
+ public int b13396;
+ public int b13397;
+ public int b13398;
+ public int b13399;
+ public int b13400;
+ public int b13401;
+ public int b13402;
+ public int b13403;
+ public int b13404;
+ public int b13405;
+ public int b13406;
+ public int b13407;
+ public int b13408;
+ public int b13409;
+ public int b13410;
+ public int b13411;
+ public int b13412;
+ public int b13413;
+ public int b13414;
+ public int b13415;
+ public int b13416;
+ public int b13417;
+ public int b13418;
+ public int b13419;
+ public int b13420;
+ public int b13421;
+ public int b13422;
+ public int b13423;
+ public int b13424;
+ public int b13425;
+ public int b13426;
+ public int b13427;
+ public int b13428;
+ public int b13429;
+ public int b13430;
+ public int b13431;
+ public int b13432;
+ public int b13433;
+ public int b13434;
+ public int b13435;
+ public int b13436;
+ public int b13437;
+ public int b13438;
+ public int b13439;
+ public int b13440;
+ public int b13441;
+ public int b13442;
+ public int b13443;
+ public int b13444;
+ public int b13445;
+ public int b13446;
+ public int b13447;
+ public int b13448;
+ public int b13449;
+ public int b13450;
+ public int b13451;
+ public int b13452;
+ public int b13453;
+ public int b13454;
+ public int b13455;
+ public int b13456;
+ public int b13457;
+ public int b13458;
+ public int b13459;
+ public int b13460;
+ public int b13461;
+ public int b13462;
+ public int b13463;
+ public int b13464;
+ public int b13465;
+ public int b13466;
+ public int b13467;
+ public int b13468;
+ public int b13469;
+ public int b13470;
+ public int b13471;
+ public int b13472;
+ public int b13473;
+ public int b13474;
+ public int b13475;
+ public int b13476;
+ public int b13477;
+ public int b13478;
+ public int b13479;
+ public int b13480;
+ public int b13481;
+ public int b13482;
+ public int b13483;
+ public int b13484;
+ public int b13485;
+ public int b13486;
+ public int b13487;
+ public int b13488;
+ public int b13489;
+ public int b13490;
+ public int b13491;
+ public int b13492;
+ public int b13493;
+ public int b13494;
+ public int b13495;
+ public int b13496;
+ public int b13497;
+ public int b13498;
+ public int b13499;
+ public int b13500;
+ public int b13501;
+ public int b13502;
+ public int b13503;
+ public int b13504;
+ public int b13505;
+ public int b13506;
+ public int b13507;
+ public int b13508;
+ public int b13509;
+ public int b13510;
+ public int b13511;
+ public int b13512;
+ public int b13513;
+ public int b13514;
+ public int b13515;
+ public int b13516;
+ public int b13517;
+ public int b13518;
+ public int b13519;
+ public int b13520;
+ public int b13521;
+ public int b13522;
+ public int b13523;
+ public int b13524;
+ public int b13525;
+ public int b13526;
+ public int b13527;
+ public int b13528;
+ public int b13529;
+ public int b13530;
+ public int b13531;
+ public int b13532;
+ public int b13533;
+ public int b13534;
+ public int b13535;
+ public int b13536;
+ public int b13537;
+ public int b13538;
+ public int b13539;
+ public int b13540;
+ public int b13541;
+ public int b13542;
+ public int b13543;
+ public int b13544;
+ public int b13545;
+ public int b13546;
+ public int b13547;
+ public int b13548;
+ public int b13549;
+ public int b13550;
+ public int b13551;
+ public int b13552;
+ public int b13553;
+ public int b13554;
+ public int b13555;
+ public int b13556;
+ public int b13557;
+ public int b13558;
+ public int b13559;
+ public int b13560;
+ public int b13561;
+ public int b13562;
+ public int b13563;
+ public int b13564;
+ public int b13565;
+ public int b13566;
+ public int b13567;
+ public int b13568;
+ public int b13569;
+ public int b13570;
+ public int b13571;
+ public int b13572;
+ public int b13573;
+ public int b13574;
+ public int b13575;
+ public int b13576;
+ public int b13577;
+ public int b13578;
+ public int b13579;
+ public int b13580;
+ public int b13581;
+ public int b13582;
+ public int b13583;
+ public int b13584;
+ public int b13585;
+ public int b13586;
+ public int b13587;
+ public int b13588;
+ public int b13589;
+ public int b13590;
+ public int b13591;
+ public int b13592;
+ public int b13593;
+ public int b13594;
+ public int b13595;
+ public int b13596;
+ public int b13597;
+ public int b13598;
+ public int b13599;
+ public int b13600;
+ public int b13601;
+ public int b13602;
+ public int b13603;
+ public int b13604;
+ public int b13605;
+ public int b13606;
+ public int b13607;
+ public int b13608;
+ public int b13609;
+ public int b13610;
+ public int b13611;
+ public int b13612;
+ public int b13613;
+ public int b13614;
+ public int b13615;
+ public int b13616;
+ public int b13617;
+ public int b13618;
+ public int b13619;
+ public int b13620;
+ public int b13621;
+ public int b13622;
+ public int b13623;
+ public int b13624;
+ public int b13625;
+ public int b13626;
+ public int b13627;
+ public int b13628;
+ public int b13629;
+ public int b13630;
+ public int b13631;
+ public int b13632;
+ public int b13633;
+ public int b13634;
+ public int b13635;
+ public int b13636;
+ public int b13637;
+ public int b13638;
+ public int b13639;
+ public int b13640;
+ public int b13641;
+ public int b13642;
+ public int b13643;
+ public int b13644;
+ public int b13645;
+ public int b13646;
+ public int b13647;
+ public int b13648;
+ public int b13649;
+ public int b13650;
+ public int b13651;
+ public int b13652;
+ public int b13653;
+ public int b13654;
+ public int b13655;
+ public int b13656;
+ public int b13657;
+ public int b13658;
+ public int b13659;
+ public int b13660;
+ public int b13661;
+ public int b13662;
+ public int b13663;
+ public int b13664;
+ public int b13665;
+ public int b13666;
+ public int b13667;
+ public int b13668;
+ public int b13669;
+ public int b13670;
+ public int b13671;
+ public int b13672;
+ public int b13673;
+ public int b13674;
+ public int b13675;
+ public int b13676;
+ public int b13677;
+ public int b13678;
+ public int b13679;
+ public int b13680;
+ public int b13681;
+ public int b13682;
+ public int b13683;
+ public int b13684;
+ public int b13685;
+ public int b13686;
+ public int b13687;
+ public int b13688;
+ public int b13689;
+ public int b13690;
+ public int b13691;
+ public int b13692;
+ public int b13693;
+ public int b13694;
+ public int b13695;
+ public int b13696;
+ public int b13697;
+ public int b13698;
+ public int b13699;
+ public int b13700;
+ public int b13701;
+ public int b13702;
+ public int b13703;
+ public int b13704;
+ public int b13705;
+ public int b13706;
+ public int b13707;
+ public int b13708;
+ public int b13709;
+ public int b13710;
+ public int b13711;
+ public int b13712;
+ public int b13713;
+ public int b13714;
+ public int b13715;
+ public int b13716;
+ public int b13717;
+ public int b13718;
+ public int b13719;
+ public int b13720;
+ public int b13721;
+ public int b13722;
+ public int b13723;
+ public int b13724;
+ public int b13725;
+ public int b13726;
+ public int b13727;
+ public int b13728;
+ public int b13729;
+ public int b13730;
+ public int b13731;
+ public int b13732;
+ public int b13733;
+ public int b13734;
+ public int b13735;
+ public int b13736;
+ public int b13737;
+ public int b13738;
+ public int b13739;
+ public int b13740;
+ public int b13741;
+ public int b13742;
+ public int b13743;
+ public int b13744;
+ public int b13745;
+ public int b13746;
+ public int b13747;
+ public int b13748;
+ public int b13749;
+ public int b13750;
+ public int b13751;
+ public int b13752;
+ public int b13753;
+ public int b13754;
+ public int b13755;
+ public int b13756;
+ public int b13757;
+ public int b13758;
+ public int b13759;
+ public int b13760;
+ public int b13761;
+ public int b13762;
+ public int b13763;
+ public int b13764;
+ public int b13765;
+ public int b13766;
+ public int b13767;
+ public int b13768;
+ public int b13769;
+ public int b13770;
+ public int b13771;
+ public int b13772;
+ public int b13773;
+ public int b13774;
+ public int b13775;
+ public int b13776;
+ public int b13777;
+ public int b13778;
+ public int b13779;
+ public int b13780;
+ public int b13781;
+ public int b13782;
+ public int b13783;
+ public int b13784;
+ public int b13785;
+ public int b13786;
+ public int b13787;
+ public int b13788;
+ public int b13789;
+ public int b13790;
+ public int b13791;
+ public int b13792;
+ public int b13793;
+ public int b13794;
+ public int b13795;
+ public int b13796;
+ public int b13797;
+ public int b13798;
+ public int b13799;
+ public int b13800;
+ public int b13801;
+ public int b13802;
+ public int b13803;
+ public int b13804;
+ public int b13805;
+ public int b13806;
+ public int b13807;
+ public int b13808;
+ public int b13809;
+ public int b13810;
+ public int b13811;
+ public int b13812;
+ public int b13813;
+ public int b13814;
+ public int b13815;
+ public int b13816;
+ public int b13817;
+ public int b13818;
+ public int b13819;
+ public int b13820;
+ public int b13821;
+ public int b13822;
+ public int b13823;
+ public int b13824;
+ public int b13825;
+ public int b13826;
+ public int b13827;
+ public int b13828;
+ public int b13829;
+ public int b13830;
+ public int b13831;
+ public int b13832;
+ public int b13833;
+ public int b13834;
+ public int b13835;
+ public int b13836;
+ public int b13837;
+ public int b13838;
+ public int b13839;
+ public int b13840;
+ public int b13841;
+ public int b13842;
+ public int b13843;
+ public int b13844;
+ public int b13845;
+ public int b13846;
+ public int b13847;
+ public int b13848;
+ public int b13849;
+ public int b13850;
+ public int b13851;
+ public int b13852;
+ public int b13853;
+ public int b13854;
+ public int b13855;
+ public int b13856;
+ public int b13857;
+ public int b13858;
+ public int b13859;
+ public int b13860;
+ public int b13861;
+ public int b13862;
+ public int b13863;
+ public int b13864;
+ public int b13865;
+ public int b13866;
+ public int b13867;
+ public int b13868;
+ public int b13869;
+ public int b13870;
+ public int b13871;
+ public int b13872;
+ public int b13873;
+ public int b13874;
+ public int b13875;
+ public int b13876;
+ public int b13877;
+ public int b13878;
+ public int b13879;
+ public int b13880;
+ public int b13881;
+ public int b13882;
+ public int b13883;
+ public int b13884;
+ public int b13885;
+ public int b13886;
+ public int b13887;
+ public int b13888;
+ public int b13889;
+ public int b13890;
+ public int b13891;
+ public int b13892;
+ public int b13893;
+ public int b13894;
+ public int b13895;
+ public int b13896;
+ public int b13897;
+ public int b13898;
+ public int b13899;
+ public int b13900;
+ public int b13901;
+ public int b13902;
+ public int b13903;
+ public int b13904;
+ public int b13905;
+ public int b13906;
+ public int b13907;
+ public int b13908;
+ public int b13909;
+ public int b13910;
+ public int b13911;
+ public int b13912;
+ public int b13913;
+ public int b13914;
+ public int b13915;
+ public int b13916;
+ public int b13917;
+ public int b13918;
+ public int b13919;
+ public int b13920;
+ public int b13921;
+ public int b13922;
+ public int b13923;
+ public int b13924;
+ public int b13925;
+ public int b13926;
+ public int b13927;
+ public int b13928;
+ public int b13929;
+ public int b13930;
+ public int b13931;
+ public int b13932;
+ public int b13933;
+ public int b13934;
+ public int b13935;
+ public int b13936;
+ public int b13937;
+ public int b13938;
+ public int b13939;
+ public int b13940;
+ public int b13941;
+ public int b13942;
+ public int b13943;
+ public int b13944;
+ public int b13945;
+ public int b13946;
+ public int b13947;
+ public int b13948;
+ public int b13949;
+ public int b13950;
+ public int b13951;
+ public int b13952;
+ public int b13953;
+ public int b13954;
+ public int b13955;
+ public int b13956;
+ public int b13957;
+ public int b13958;
+ public int b13959;
+ public int b13960;
+ public int b13961;
+ public int b13962;
+ public int b13963;
+ public int b13964;
+ public int b13965;
+ public int b13966;
+ public int b13967;
+ public int b13968;
+ public int b13969;
+ public int b13970;
+ public int b13971;
+ public int b13972;
+ public int b13973;
+ public int b13974;
+ public int b13975;
+ public int b13976;
+ public int b13977;
+ public int b13978;
+ public int b13979;
+ public int b13980;
+ public int b13981;
+ public int b13982;
+ public int b13983;
+ public int b13984;
+ public int b13985;
+ public int b13986;
+ public int b13987;
+ public int b13988;
+ public int b13989;
+ public int b13990;
+ public int b13991;
+ public int b13992;
+ public int b13993;
+ public int b13994;
+ public int b13995;
+ public int b13996;
+ public int b13997;
+ public int b13998;
+ public int b13999;
+ public int b14000;
+ public int b14001;
+ public int b14002;
+ public int b14003;
+ public int b14004;
+ public int b14005;
+ public int b14006;
+ public int b14007;
+ public int b14008;
+ public int b14009;
+ public int b14010;
+ public int b14011;
+ public int b14012;
+ public int b14013;
+ public int b14014;
+ public int b14015;
+ public int b14016;
+ public int b14017;
+ public int b14018;
+ public int b14019;
+ public int b14020;
+ public int b14021;
+ public int b14022;
+ public int b14023;
+ public int b14024;
+ public int b14025;
+ public int b14026;
+ public int b14027;
+ public int b14028;
+ public int b14029;
+ public int b14030;
+ public int b14031;
+ public int b14032;
+ public int b14033;
+ public int b14034;
+ public int b14035;
+ public int b14036;
+ public int b14037;
+ public int b14038;
+ public int b14039;
+ public int b14040;
+ public int b14041;
+ public int b14042;
+ public int b14043;
+ public int b14044;
+ public int b14045;
+ public int b14046;
+ public int b14047;
+ public int b14048;
+ public int b14049;
+ public int b14050;
+ public int b14051;
+ public int b14052;
+ public int b14053;
+ public int b14054;
+ public int b14055;
+ public int b14056;
+ public int b14057;
+ public int b14058;
+ public int b14059;
+ public int b14060;
+ public int b14061;
+ public int b14062;
+ public int b14063;
+ public int b14064;
+ public int b14065;
+ public int b14066;
+ public int b14067;
+ public int b14068;
+ public int b14069;
+ public int b14070;
+ public int b14071;
+ public int b14072;
+ public int b14073;
+ public int b14074;
+ public int b14075;
+ public int b14076;
+ public int b14077;
+ public int b14078;
+ public int b14079;
+ public int b14080;
+ public int b14081;
+ public int b14082;
+ public int b14083;
+ public int b14084;
+ public int b14085;
+ public int b14086;
+ public int b14087;
+ public int b14088;
+ public int b14089;
+ public int b14090;
+ public int b14091;
+ public int b14092;
+ public int b14093;
+ public int b14094;
+ public int b14095;
+ public int b14096;
+ public int b14097;
+ public int b14098;
+ public int b14099;
+ public int b14100;
+ public int b14101;
+ public int b14102;
+ public int b14103;
+ public int b14104;
+ public int b14105;
+ public int b14106;
+ public int b14107;
+ public int b14108;
+ public int b14109;
+ public int b14110;
+ public int b14111;
+ public int b14112;
+ public int b14113;
+ public int b14114;
+ public int b14115;
+ public int b14116;
+ public int b14117;
+ public int b14118;
+ public int b14119;
+ public int b14120;
+ public int b14121;
+ public int b14122;
+ public int b14123;
+ public int b14124;
+ public int b14125;
+ public int b14126;
+ public int b14127;
+ public int b14128;
+ public int b14129;
+ public int b14130;
+ public int b14131;
+ public int b14132;
+ public int b14133;
+ public int b14134;
+ public int b14135;
+ public int b14136;
+ public int b14137;
+ public int b14138;
+ public int b14139;
+ public int b14140;
+ public int b14141;
+ public int b14142;
+ public int b14143;
+ public int b14144;
+ public int b14145;
+ public int b14146;
+ public int b14147;
+ public int b14148;
+ public int b14149;
+ public int b14150;
+ public int b14151;
+ public int b14152;
+ public int b14153;
+ public int b14154;
+ public int b14155;
+ public int b14156;
+ public int b14157;
+ public int b14158;
+ public int b14159;
+ public int b14160;
+ public int b14161;
+ public int b14162;
+ public int b14163;
+ public int b14164;
+ public int b14165;
+ public int b14166;
+ public int b14167;
+ public int b14168;
+ public int b14169;
+ public int b14170;
+ public int b14171;
+ public int b14172;
+ public int b14173;
+ public int b14174;
+ public int b14175;
+ public int b14176;
+ public int b14177;
+ public int b14178;
+ public int b14179;
+ public int b14180;
+ public int b14181;
+ public int b14182;
+ public int b14183;
+ public int b14184;
+ public int b14185;
+ public int b14186;
+ public int b14187;
+ public int b14188;
+ public int b14189;
+ public int b14190;
+ public int b14191;
+ public int b14192;
+ public int b14193;
+ public int b14194;
+ public int b14195;
+ public int b14196;
+ public int b14197;
+ public int b14198;
+ public int b14199;
+ public int b14200;
+ public int b14201;
+ public int b14202;
+ public int b14203;
+ public int b14204;
+ public int b14205;
+ public int b14206;
+ public int b14207;
+ public int b14208;
+ public int b14209;
+ public int b14210;
+ public int b14211;
+ public int b14212;
+ public int b14213;
+ public int b14214;
+ public int b14215;
+ public int b14216;
+ public int b14217;
+ public int b14218;
+ public int b14219;
+ public int b14220;
+ public int b14221;
+ public int b14222;
+ public int b14223;
+ public int b14224;
+ public int b14225;
+ public int b14226;
+ public int b14227;
+ public int b14228;
+ public int b14229;
+ public int b14230;
+ public int b14231;
+ public int b14232;
+ public int b14233;
+ public int b14234;
+ public int b14235;
+ public int b14236;
+ public int b14237;
+ public int b14238;
+ public int b14239;
+ public int b14240;
+ public int b14241;
+ public int b14242;
+ public int b14243;
+ public int b14244;
+ public int b14245;
+ public int b14246;
+ public int b14247;
+ public int b14248;
+ public int b14249;
+ public int b14250;
+ public int b14251;
+ public int b14252;
+ public int b14253;
+ public int b14254;
+ public int b14255;
+ public int b14256;
+ public int b14257;
+ public int b14258;
+ public int b14259;
+ public int b14260;
+ public int b14261;
+ public int b14262;
+ public int b14263;
+ public int b14264;
+ public int b14265;
+ public int b14266;
+ public int b14267;
+ public int b14268;
+ public int b14269;
+ public int b14270;
+ public int b14271;
+ public int b14272;
+ public int b14273;
+ public int b14274;
+ public int b14275;
+ public int b14276;
+ public int b14277;
+ public int b14278;
+ public int b14279;
+ public int b14280;
+ public int b14281;
+ public int b14282;
+ public int b14283;
+ public int b14284;
+ public int b14285;
+ public int b14286;
+ public int b14287;
+ public int b14288;
+ public int b14289;
+ public int b14290;
+ public int b14291;
+ public int b14292;
+ public int b14293;
+ public int b14294;
+ public int b14295;
+ public int b14296;
+ public int b14297;
+ public int b14298;
+ public int b14299;
+ public int b14300;
+ public int b14301;
+ public int b14302;
+ public int b14303;
+ public int b14304;
+ public int b14305;
+ public int b14306;
+ public int b14307;
+ public int b14308;
+ public int b14309;
+ public int b14310;
+ public int b14311;
+ public int b14312;
+ public int b14313;
+ public int b14314;
+ public int b14315;
+ public int b14316;
+ public int b14317;
+ public int b14318;
+ public int b14319;
+ public int b14320;
+ public int b14321;
+ public int b14322;
+ public int b14323;
+ public int b14324;
+ public int b14325;
+ public int b14326;
+ public int b14327;
+ public int b14328;
+ public int b14329;
+ public int b14330;
+ public int b14331;
+ public int b14332;
+ public int b14333;
+ public int b14334;
+ public int b14335;
+ public int b14336;
+ public int b14337;
+ public int b14338;
+ public int b14339;
+ public int b14340;
+ public int b14341;
+ public int b14342;
+ public int b14343;
+ public int b14344;
+ public int b14345;
+ public int b14346;
+ public int b14347;
+ public int b14348;
+ public int b14349;
+ public int b14350;
+ public int b14351;
+ public int b14352;
+ public int b14353;
+ public int b14354;
+ public int b14355;
+ public int b14356;
+ public int b14357;
+ public int b14358;
+ public int b14359;
+ public int b14360;
+ public int b14361;
+ public int b14362;
+ public int b14363;
+ public int b14364;
+ public int b14365;
+ public int b14366;
+ public int b14367;
+ public int b14368;
+ public int b14369;
+ public int b14370;
+ public int b14371;
+ public int b14372;
+ public int b14373;
+ public int b14374;
+ public int b14375;
+ public int b14376;
+ public int b14377;
+ public int b14378;
+ public int b14379;
+ public int b14380;
+ public int b14381;
+ public int b14382;
+ public int b14383;
+ public int b14384;
+ public int b14385;
+ public int b14386;
+ public int b14387;
+ public int b14388;
+ public int b14389;
+ public int b14390;
+ public int b14391;
+ public int b14392;
+ public int b14393;
+ public int b14394;
+ public int b14395;
+ public int b14396;
+ public int b14397;
+ public int b14398;
+ public int b14399;
+ public int b14400;
+ public int b14401;
+ public int b14402;
+ public int b14403;
+ public int b14404;
+ public int b14405;
+ public int b14406;
+ public int b14407;
+ public int b14408;
+ public int b14409;
+ public int b14410;
+ public int b14411;
+ public int b14412;
+ public int b14413;
+ public int b14414;
+ public int b14415;
+ public int b14416;
+ public int b14417;
+ public int b14418;
+ public int b14419;
+ public int b14420;
+ public int b14421;
+ public int b14422;
+ public int b14423;
+ public int b14424;
+ public int b14425;
+ public int b14426;
+ public int b14427;
+ public int b14428;
+ public int b14429;
+ public int b14430;
+ public int b14431;
+ public int b14432;
+ public int b14433;
+ public int b14434;
+ public int b14435;
+ public int b14436;
+ public int b14437;
+ public int b14438;
+ public int b14439;
+ public int b14440;
+ public int b14441;
+ public int b14442;
+ public int b14443;
+ public int b14444;
+ public int b14445;
+ public int b14446;
+ public int b14447;
+ public int b14448;
+ public int b14449;
+ public int b14450;
+ public int b14451;
+ public int b14452;
+ public int b14453;
+ public int b14454;
+ public int b14455;
+ public int b14456;
+ public int b14457;
+ public int b14458;
+ public int b14459;
+ public int b14460;
+ public int b14461;
+ public int b14462;
+ public int b14463;
+ public int b14464;
+ public int b14465;
+ public int b14466;
+ public int b14467;
+ public int b14468;
+ public int b14469;
+ public int b14470;
+ public int b14471;
+ public int b14472;
+ public int b14473;
+ public int b14474;
+ public int b14475;
+ public int b14476;
+ public int b14477;
+ public int b14478;
+ public int b14479;
+ public int b14480;
+ public int b14481;
+ public int b14482;
+ public int b14483;
+ public int b14484;
+ public int b14485;
+ public int b14486;
+ public int b14487;
+ public int b14488;
+ public int b14489;
+ public int b14490;
+ public int b14491;
+ public int b14492;
+ public int b14493;
+ public int b14494;
+ public int b14495;
+ public int b14496;
+ public int b14497;
+ public int b14498;
+ public int b14499;
+ public int b14500;
+ public int b14501;
+ public int b14502;
+ public int b14503;
+ public int b14504;
+ public int b14505;
+ public int b14506;
+ public int b14507;
+ public int b14508;
+ public int b14509;
+ public int b14510;
+ public int b14511;
+ public int b14512;
+ public int b14513;
+ public int b14514;
+ public int b14515;
+ public int b14516;
+ public int b14517;
+ public int b14518;
+ public int b14519;
+ public int b14520;
+ public int b14521;
+ public int b14522;
+ public int b14523;
+ public int b14524;
+ public int b14525;
+ public int b14526;
+ public int b14527;
+ public int b14528;
+ public int b14529;
+ public int b14530;
+ public int b14531;
+ public int b14532;
+ public int b14533;
+ public int b14534;
+ public int b14535;
+ public int b14536;
+ public int b14537;
+ public int b14538;
+ public int b14539;
+ public int b14540;
+ public int b14541;
+ public int b14542;
+ public int b14543;
+ public int b14544;
+ public int b14545;
+ public int b14546;
+ public int b14547;
+ public int b14548;
+ public int b14549;
+ public int b14550;
+ public int b14551;
+ public int b14552;
+ public int b14553;
+ public int b14554;
+ public int b14555;
+ public int b14556;
+ public int b14557;
+ public int b14558;
+ public int b14559;
+ public int b14560;
+ public int b14561;
+ public int b14562;
+ public int b14563;
+ public int b14564;
+ public int b14565;
+ public int b14566;
+ public int b14567;
+ public int b14568;
+ public int b14569;
+ public int b14570;
+ public int b14571;
+ public int b14572;
+ public int b14573;
+ public int b14574;
+ public int b14575;
+ public int b14576;
+ public int b14577;
+ public int b14578;
+ public int b14579;
+ public int b14580;
+ public int b14581;
+ public int b14582;
+ public int b14583;
+ public int b14584;
+ public int b14585;
+ public int b14586;
+ public int b14587;
+ public int b14588;
+ public int b14589;
+ public int b14590;
+ public int b14591;
+ public int b14592;
+ public int b14593;
+ public int b14594;
+ public int b14595;
+ public int b14596;
+ public int b14597;
+ public int b14598;
+ public int b14599;
+ public int b14600;
+ public int b14601;
+ public int b14602;
+ public int b14603;
+ public int b14604;
+ public int b14605;
+ public int b14606;
+ public int b14607;
+ public int b14608;
+ public int b14609;
+ public int b14610;
+ public int b14611;
+ public int b14612;
+ public int b14613;
+ public int b14614;
+ public int b14615;
+ public int b14616;
+ public int b14617;
+ public int b14618;
+ public int b14619;
+ public int b14620;
+ public int b14621;
+ public int b14622;
+ public int b14623;
+ public int b14624;
+ public int b14625;
+ public int b14626;
+ public int b14627;
+ public int b14628;
+ public int b14629;
+ public int b14630;
+ public int b14631;
+ public int b14632;
+ public int b14633;
+ public int b14634;
+ public int b14635;
+ public int b14636;
+ public int b14637;
+ public int b14638;
+ public int b14639;
+ public int b14640;
+ public int b14641;
+ public int b14642;
+ public int b14643;
+ public int b14644;
+ public int b14645;
+ public int b14646;
+ public int b14647;
+ public int b14648;
+ public int b14649;
+ public int b14650;
+ public int b14651;
+ public int b14652;
+ public int b14653;
+ public int b14654;
+ public int b14655;
+ public int b14656;
+ public int b14657;
+ public int b14658;
+ public int b14659;
+ public int b14660;
+ public int b14661;
+ public int b14662;
+ public int b14663;
+ public int b14664;
+ public int b14665;
+ public int b14666;
+ public int b14667;
+ public int b14668;
+ public int b14669;
+ public int b14670;
+ public int b14671;
+ public int b14672;
+ public int b14673;
+ public int b14674;
+ public int b14675;
+ public int b14676;
+ public int b14677;
+ public int b14678;
+ public int b14679;
+ public int b14680;
+ public int b14681;
+ public int b14682;
+ public int b14683;
+ public int b14684;
+ public int b14685;
+ public int b14686;
+ public int b14687;
+ public int b14688;
+ public int b14689;
+ public int b14690;
+ public int b14691;
+ public int b14692;
+ public int b14693;
+ public int b14694;
+ public int b14695;
+ public int b14696;
+ public int b14697;
+ public int b14698;
+ public int b14699;
+ public int b14700;
+ public int b14701;
+ public int b14702;
+ public int b14703;
+ public int b14704;
+ public int b14705;
+ public int b14706;
+ public int b14707;
+ public int b14708;
+ public int b14709;
+ public int b14710;
+ public int b14711;
+ public int b14712;
+ public int b14713;
+ public int b14714;
+ public int b14715;
+ public int b14716;
+ public int b14717;
+ public int b14718;
+ public int b14719;
+ public int b14720;
+ public int b14721;
+ public int b14722;
+ public int b14723;
+ public int b14724;
+ public int b14725;
+ public int b14726;
+ public int b14727;
+ public int b14728;
+ public int b14729;
+ public int b14730;
+ public int b14731;
+ public int b14732;
+ public int b14733;
+ public int b14734;
+ public int b14735;
+ public int b14736;
+ public int b14737;
+ public int b14738;
+ public int b14739;
+ public int b14740;
+ public int b14741;
+ public int b14742;
+ public int b14743;
+ public int b14744;
+ public int b14745;
+ public int b14746;
+ public int b14747;
+ public int b14748;
+ public int b14749;
+ public int b14750;
+ public int b14751;
+ public int b14752;
+ public int b14753;
+ public int b14754;
+ public int b14755;
+ public int b14756;
+ public int b14757;
+ public int b14758;
+ public int b14759;
+ public int b14760;
+ public int b14761;
+ public int b14762;
+ public int b14763;
+ public int b14764;
+ public int b14765;
+ public int b14766;
+ public int b14767;
+ public int b14768;
+ public int b14769;
+ public int b14770;
+ public int b14771;
+ public int b14772;
+ public int b14773;
+ public int b14774;
+ public int b14775;
+ public int b14776;
+ public int b14777;
+ public int b14778;
+ public int b14779;
+ public int b14780;
+ public int b14781;
+ public int b14782;
+ public int b14783;
+ public int b14784;
+ public int b14785;
+ public int b14786;
+ public int b14787;
+ public int b14788;
+ public int b14789;
+ public int b14790;
+ public int b14791;
+ public int b14792;
+ public int b14793;
+ public int b14794;
+ public int b14795;
+ public int b14796;
+ public int b14797;
+ public int b14798;
+ public int b14799;
+ public int b14800;
+ public int b14801;
+ public int b14802;
+ public int b14803;
+ public int b14804;
+ public int b14805;
+ public int b14806;
+ public int b14807;
+ public int b14808;
+ public int b14809;
+ public int b14810;
+ public int b14811;
+ public int b14812;
+ public int b14813;
+ public int b14814;
+ public int b14815;
+ public int b14816;
+ public int b14817;
+ public int b14818;
+ public int b14819;
+ public int b14820;
+ public int b14821;
+ public int b14822;
+ public int b14823;
+ public int b14824;
+ public int b14825;
+ public int b14826;
+ public int b14827;
+ public int b14828;
+ public int b14829;
+ public int b14830;
+ public int b14831;
+ public int b14832;
+ public int b14833;
+ public int b14834;
+ public int b14835;
+ public int b14836;
+ public int b14837;
+ public int b14838;
+ public int b14839;
+ public int b14840;
+ public int b14841;
+ public int b14842;
+ public int b14843;
+ public int b14844;
+ public int b14845;
+ public int b14846;
+ public int b14847;
+ public int b14848;
+ public int b14849;
+ public int b14850;
+ public int b14851;
+ public int b14852;
+ public int b14853;
+ public int b14854;
+ public int b14855;
+ public int b14856;
+ public int b14857;
+ public int b14858;
+ public int b14859;
+ public int b14860;
+ public int b14861;
+ public int b14862;
+ public int b14863;
+ public int b14864;
+ public int b14865;
+ public int b14866;
+ public int b14867;
+ public int b14868;
+ public int b14869;
+ public int b14870;
+ public int b14871;
+ public int b14872;
+ public int b14873;
+ public int b14874;
+ public int b14875;
+ public int b14876;
+ public int b14877;
+ public int b14878;
+ public int b14879;
+ public int b14880;
+ public int b14881;
+ public int b14882;
+ public int b14883;
+ public int b14884;
+ public int b14885;
+ public int b14886;
+ public int b14887;
+ public int b14888;
+ public int b14889;
+ public int b14890;
+ public int b14891;
+ public int b14892;
+ public int b14893;
+ public int b14894;
+ public int b14895;
+ public int b14896;
+ public int b14897;
+ public int b14898;
+ public int b14899;
+ public int b14900;
+ public int b14901;
+ public int b14902;
+ public int b14903;
+ public int b14904;
+ public int b14905;
+ public int b14906;
+ public int b14907;
+ public int b14908;
+ public int b14909;
+ public int b14910;
+ public int b14911;
+ public int b14912;
+ public int b14913;
+ public int b14914;
+ public int b14915;
+ public int b14916;
+ public int b14917;
+ public int b14918;
+ public int b14919;
+ public int b14920;
+ public int b14921;
+ public int b14922;
+ public int b14923;
+ public int b14924;
+ public int b14925;
+ public int b14926;
+ public int b14927;
+ public int b14928;
+ public int b14929;
+ public int b14930;
+ public int b14931;
+ public int b14932;
+ public int b14933;
+ public int b14934;
+ public int b14935;
+ public int b14936;
+ public int b14937;
+ public int b14938;
+ public int b14939;
+ public int b14940;
+ public int b14941;
+ public int b14942;
+ public int b14943;
+ public int b14944;
+ public int b14945;
+ public int b14946;
+ public int b14947;
+ public int b14948;
+ public int b14949;
+ public int b14950;
+ public int b14951;
+ public int b14952;
+ public int b14953;
+ public int b14954;
+ public int b14955;
+ public int b14956;
+ public int b14957;
+ public int b14958;
+ public int b14959;
+ public int b14960;
+ public int b14961;
+ public int b14962;
+ public int b14963;
+ public int b14964;
+ public int b14965;
+ public int b14966;
+ public int b14967;
+ public int b14968;
+ public int b14969;
+ public int b14970;
+ public int b14971;
+ public int b14972;
+ public int b14973;
+ public int b14974;
+ public int b14975;
+ public int b14976;
+ public int b14977;
+ public int b14978;
+ public int b14979;
+ public int b14980;
+ public int b14981;
+ public int b14982;
+ public int b14983;
+ public int b14984;
+ public int b14985;
+ public int b14986;
+ public int b14987;
+ public int b14988;
+ public int b14989;
+ public int b14990;
+ public int b14991;
+ public int b14992;
+ public int b14993;
+ public int b14994;
+ public int b14995;
+ public int b14996;
+ public int b14997;
+ public int b14998;
+ public int b14999;
+ public int b15000;
+ public int b15001;
+ public int b15002;
+ public int b15003;
+ public int b15004;
+ public int b15005;
+ public int b15006;
+ public int b15007;
+ public int b15008;
+ public int b15009;
+ public int b15010;
+ public int b15011;
+ public int b15012;
+ public int b15013;
+ public int b15014;
+ public int b15015;
+ public int b15016;
+ public int b15017;
+ public int b15018;
+ public int b15019;
+ public int b15020;
+ public int b15021;
+ public int b15022;
+ public int b15023;
+ public int b15024;
+ public int b15025;
+ public int b15026;
+ public int b15027;
+ public int b15028;
+ public int b15029;
+ public int b15030;
+ public int b15031;
+ public int b15032;
+ public int b15033;
+ public int b15034;
+ public int b15035;
+ public int b15036;
+ public int b15037;
+ public int b15038;
+ public int b15039;
+ public int b15040;
+ public int b15041;
+ public int b15042;
+ public int b15043;
+ public int b15044;
+ public int b15045;
+ public int b15046;
+ public int b15047;
+ public int b15048;
+ public int b15049;
+ public int b15050;
+ public int b15051;
+ public int b15052;
+ public int b15053;
+ public int b15054;
+ public int b15055;
+ public int b15056;
+ public int b15057;
+ public int b15058;
+ public int b15059;
+ public int b15060;
+ public int b15061;
+ public int b15062;
+ public int b15063;
+ public int b15064;
+ public int b15065;
+ public int b15066;
+ public int b15067;
+ public int b15068;
+ public int b15069;
+ public int b15070;
+ public int b15071;
+ public int b15072;
+ public int b15073;
+ public int b15074;
+ public int b15075;
+ public int b15076;
+ public int b15077;
+ public int b15078;
+ public int b15079;
+ public int b15080;
+ public int b15081;
+ public int b15082;
+ public int b15083;
+ public int b15084;
+ public int b15085;
+ public int b15086;
+ public int b15087;
+ public int b15088;
+ public int b15089;
+ public int b15090;
+ public int b15091;
+ public int b15092;
+ public int b15093;
+ public int b15094;
+ public int b15095;
+ public int b15096;
+ public int b15097;
+ public int b15098;
+ public int b15099;
+ public int b15100;
+ public int b15101;
+ public int b15102;
+ public int b15103;
+ public int b15104;
+ public int b15105;
+ public int b15106;
+ public int b15107;
+ public int b15108;
+ public int b15109;
+ public int b15110;
+ public int b15111;
+ public int b15112;
+ public int b15113;
+ public int b15114;
+ public int b15115;
+ public int b15116;
+ public int b15117;
+ public int b15118;
+ public int b15119;
+ public int b15120;
+ public int b15121;
+ public int b15122;
+ public int b15123;
+ public int b15124;
+ public int b15125;
+ public int b15126;
+ public int b15127;
+ public int b15128;
+ public int b15129;
+ public int b15130;
+ public int b15131;
+ public int b15132;
+ public int b15133;
+ public int b15134;
+ public int b15135;
+ public int b15136;
+ public int b15137;
+ public int b15138;
+ public int b15139;
+ public int b15140;
+ public int b15141;
+ public int b15142;
+ public int b15143;
+ public int b15144;
+ public int b15145;
+ public int b15146;
+ public int b15147;
+ public int b15148;
+ public int b15149;
+ public int b15150;
+ public int b15151;
+ public int b15152;
+ public int b15153;
+ public int b15154;
+ public int b15155;
+ public int b15156;
+ public int b15157;
+ public int b15158;
+ public int b15159;
+ public int b15160;
+ public int b15161;
+ public int b15162;
+ public int b15163;
+ public int b15164;
+ public int b15165;
+ public int b15166;
+ public int b15167;
+ public int b15168;
+ public int b15169;
+ public int b15170;
+ public int b15171;
+ public int b15172;
+ public int b15173;
+ public int b15174;
+ public int b15175;
+ public int b15176;
+ public int b15177;
+ public int b15178;
+ public int b15179;
+ public int b15180;
+ public int b15181;
+ public int b15182;
+ public int b15183;
+ public int b15184;
+ public int b15185;
+ public int b15186;
+ public int b15187;
+ public int b15188;
+ public int b15189;
+ public int b15190;
+ public int b15191;
+ public int b15192;
+ public int b15193;
+ public int b15194;
+ public int b15195;
+ public int b15196;
+ public int b15197;
+ public int b15198;
+ public int b15199;
+ public int b15200;
+ public int b15201;
+ public int b15202;
+ public int b15203;
+ public int b15204;
+ public int b15205;
+ public int b15206;
+ public int b15207;
+ public int b15208;
+ public int b15209;
+ public int b15210;
+ public int b15211;
+ public int b15212;
+ public int b15213;
+ public int b15214;
+ public int b15215;
+ public int b15216;
+ public int b15217;
+ public int b15218;
+ public int b15219;
+ public int b15220;
+ public int b15221;
+ public int b15222;
+ public int b15223;
+ public int b15224;
+ public int b15225;
+ public int b15226;
+ public int b15227;
+ public int b15228;
+ public int b15229;
+ public int b15230;
+ public int b15231;
+ public int b15232;
+ public int b15233;
+ public int b15234;
+ public int b15235;
+ public int b15236;
+ public int b15237;
+ public int b15238;
+ public int b15239;
+ public int b15240;
+ public int b15241;
+ public int b15242;
+ public int b15243;
+ public int b15244;
+ public int b15245;
+ public int b15246;
+ public int b15247;
+ public int b15248;
+ public int b15249;
+ public int b15250;
+ public int b15251;
+ public int b15252;
+ public int b15253;
+ public int b15254;
+ public int b15255;
+ public int b15256;
+ public int b15257;
+ public int b15258;
+ public int b15259;
+ public int b15260;
+ public int b15261;
+ public int b15262;
+ public int b15263;
+ public int b15264;
+ public int b15265;
+ public int b15266;
+ public int b15267;
+ public int b15268;
+ public int b15269;
+ public int b15270;
+ public int b15271;
+ public int b15272;
+ public int b15273;
+ public int b15274;
+ public int b15275;
+ public int b15276;
+ public int b15277;
+ public int b15278;
+ public int b15279;
+ public int b15280;
+ public int b15281;
+ public int b15282;
+ public int b15283;
+ public int b15284;
+ public int b15285;
+ public int b15286;
+ public int b15287;
+ public int b15288;
+ public int b15289;
+ public int b15290;
+ public int b15291;
+ public int b15292;
+ public int b15293;
+ public int b15294;
+ public int b15295;
+ public int b15296;
+ public int b15297;
+ public int b15298;
+ public int b15299;
+ public int b15300;
+ public int b15301;
+ public int b15302;
+ public int b15303;
+ public int b15304;
+ public int b15305;
+ public int b15306;
+ public int b15307;
+ public int b15308;
+ public int b15309;
+ public int b15310;
+ public int b15311;
+ public int b15312;
+ public int b15313;
+ public int b15314;
+ public int b15315;
+ public int b15316;
+ public int b15317;
+ public int b15318;
+ public int b15319;
+ public int b15320;
+ public int b15321;
+ public int b15322;
+ public int b15323;
+ public int b15324;
+ public int b15325;
+ public int b15326;
+ public int b15327;
+ public int b15328;
+ public int b15329;
+ public int b15330;
+ public int b15331;
+ public int b15332;
+ public int b15333;
+ public int b15334;
+ public int b15335;
+ public int b15336;
+ public int b15337;
+ public int b15338;
+ public int b15339;
+ public int b15340;
+ public int b15341;
+ public int b15342;
+ public int b15343;
+ public int b15344;
+ public int b15345;
+ public int b15346;
+ public int b15347;
+ public int b15348;
+ public int b15349;
+ public int b15350;
+ public int b15351;
+ public int b15352;
+ public int b15353;
+ public int b15354;
+ public int b15355;
+ public int b15356;
+ public int b15357;
+ public int b15358;
+ public int b15359;
+ public int b15360;
+ public int b15361;
+ public int b15362;
+ public int b15363;
+ public int b15364;
+ public int b15365;
+ public int b15366;
+ public int b15367;
+ public int b15368;
+ public int b15369;
+ public int b15370;
+ public int b15371;
+ public int b15372;
+ public int b15373;
+ public int b15374;
+ public int b15375;
+ public int b15376;
+ public int b15377;
+ public int b15378;
+ public int b15379;
+ public int b15380;
+ public int b15381;
+ public int b15382;
+ public int b15383;
+ public int b15384;
+ public int b15385;
+ public int b15386;
+ public int b15387;
+ public int b15388;
+ public int b15389;
+ public int b15390;
+ public int b15391;
+ public int b15392;
+ public int b15393;
+ public int b15394;
+ public int b15395;
+ public int b15396;
+ public int b15397;
+ public int b15398;
+ public int b15399;
+ public int b15400;
+ public int b15401;
+ public int b15402;
+ public int b15403;
+ public int b15404;
+ public int b15405;
+ public int b15406;
+ public int b15407;
+ public int b15408;
+ public int b15409;
+ public int b15410;
+ public int b15411;
+ public int b15412;
+ public int b15413;
+ public int b15414;
+ public int b15415;
+ public int b15416;
+ public int b15417;
+ public int b15418;
+ public int b15419;
+ public int b15420;
+ public int b15421;
+ public int b15422;
+ public int b15423;
+ public int b15424;
+ public int b15425;
+ public int b15426;
+ public int b15427;
+ public int b15428;
+ public int b15429;
+ public int b15430;
+ public int b15431;
+ public int b15432;
+ public int b15433;
+ public int b15434;
+ public int b15435;
+ public int b15436;
+ public int b15437;
+ public int b15438;
+ public int b15439;
+ public int b15440;
+ public int b15441;
+ public int b15442;
+ public int b15443;
+ public int b15444;
+ public int b15445;
+ public int b15446;
+ public int b15447;
+ public int b15448;
+ public int b15449;
+ public int b15450;
+ public int b15451;
+ public int b15452;
+ public int b15453;
+ public int b15454;
+ public int b15455;
+ public int b15456;
+ public int b15457;
+ public int b15458;
+ public int b15459;
+ public int b15460;
+ public int b15461;
+ public int b15462;
+ public int b15463;
+ public int b15464;
+ public int b15465;
+ public int b15466;
+ public int b15467;
+ public int b15468;
+ public int b15469;
+ public int b15470;
+ public int b15471;
+ public int b15472;
+ public int b15473;
+ public int b15474;
+ public int b15475;
+ public int b15476;
+ public int b15477;
+ public int b15478;
+ public int b15479;
+ public int b15480;
+ public int b15481;
+ public int b15482;
+ public int b15483;
+ public int b15484;
+ public int b15485;
+ public int b15486;
+ public int b15487;
+ public int b15488;
+ public int b15489;
+ public int b15490;
+ public int b15491;
+ public int b15492;
+ public int b15493;
+ public int b15494;
+ public int b15495;
+ public int b15496;
+ public int b15497;
+ public int b15498;
+ public int b15499;
+ public int b15500;
+ public int b15501;
+ public int b15502;
+ public int b15503;
+ public int b15504;
+ public int b15505;
+ public int b15506;
+ public int b15507;
+ public int b15508;
+ public int b15509;
+ public int b15510;
+ public int b15511;
+ public int b15512;
+ public int b15513;
+ public int b15514;
+ public int b15515;
+ public int b15516;
+ public int b15517;
+ public int b15518;
+ public int b15519;
+ public int b15520;
+ public int b15521;
+ public int b15522;
+ public int b15523;
+ public int b15524;
+ public int b15525;
+ public int b15526;
+ public int b15527;
+ public int b15528;
+ public int b15529;
+ public int b15530;
+ public int b15531;
+ public int b15532;
+ public int b15533;
+ public int b15534;
+ public int b15535;
+ public int b15536;
+ public int b15537;
+ public int b15538;
+ public int b15539;
+ public int b15540;
+ public int b15541;
+ public int b15542;
+ public int b15543;
+ public int b15544;
+ public int b15545;
+ public int b15546;
+ public int b15547;
+ public int b15548;
+ public int b15549;
+ public int b15550;
+ public int b15551;
+ public int b15552;
+ public int b15553;
+ public int b15554;
+ public int b15555;
+ public int b15556;
+ public int b15557;
+ public int b15558;
+ public int b15559;
+ public int b15560;
+ public int b15561;
+ public int b15562;
+ public int b15563;
+ public int b15564;
+ public int b15565;
+ public int b15566;
+ public int b15567;
+ public int b15568;
+ public int b15569;
+ public int b15570;
+ public int b15571;
+ public int b15572;
+ public int b15573;
+ public int b15574;
+ public int b15575;
+ public int b15576;
+ public int b15577;
+ public int b15578;
+ public int b15579;
+ public int b15580;
+ public int b15581;
+ public int b15582;
+ public int b15583;
+ public int b15584;
+ public int b15585;
+ public int b15586;
+ public int b15587;
+ public int b15588;
+ public int b15589;
+ public int b15590;
+ public int b15591;
+ public int b15592;
+ public int b15593;
+ public int b15594;
+ public int b15595;
+ public int b15596;
+ public int b15597;
+ public int b15598;
+ public int b15599;
+ public int b15600;
+ public int b15601;
+ public int b15602;
+ public int b15603;
+ public int b15604;
+ public int b15605;
+ public int b15606;
+ public int b15607;
+ public int b15608;
+ public int b15609;
+ public int b15610;
+ public int b15611;
+ public int b15612;
+ public int b15613;
+ public int b15614;
+ public int b15615;
+ public int b15616;
+ public int b15617;
+ public int b15618;
+ public int b15619;
+ public int b15620;
+ public int b15621;
+ public int b15622;
+ public int b15623;
+ public int b15624;
+ public int b15625;
+ public int b15626;
+ public int b15627;
+ public int b15628;
+ public int b15629;
+ public int b15630;
+ public int b15631;
+ public int b15632;
+ public int b15633;
+ public int b15634;
+ public int b15635;
+ public int b15636;
+ public int b15637;
+ public int b15638;
+ public int b15639;
+ public int b15640;
+ public int b15641;
+ public int b15642;
+ public int b15643;
+ public int b15644;
+ public int b15645;
+ public int b15646;
+ public int b15647;
+ public int b15648;
+ public int b15649;
+ public int b15650;
+ public int b15651;
+ public int b15652;
+ public int b15653;
+ public int b15654;
+ public int b15655;
+ public int b15656;
+ public int b15657;
+ public int b15658;
+ public int b15659;
+ public int b15660;
+ public int b15661;
+ public int b15662;
+ public int b15663;
+ public int b15664;
+ public int b15665;
+ public int b15666;
+ public int b15667;
+ public int b15668;
+ public int b15669;
+ public int b15670;
+ public int b15671;
+ public int b15672;
+ public int b15673;
+ public int b15674;
+ public int b15675;
+ public int b15676;
+ public int b15677;
+ public int b15678;
+ public int b15679;
+ public int b15680;
+ public int b15681;
+ public int b15682;
+ public int b15683;
+ public int b15684;
+ public int b15685;
+ public int b15686;
+ public int b15687;
+ public int b15688;
+ public int b15689;
+ public int b15690;
+ public int b15691;
+ public int b15692;
+ public int b15693;
+ public int b15694;
+ public int b15695;
+ public int b15696;
+ public int b15697;
+ public int b15698;
+ public int b15699;
+ public int b15700;
+ public int b15701;
+ public int b15702;
+ public int b15703;
+ public int b15704;
+ public int b15705;
+ public int b15706;
+ public int b15707;
+ public int b15708;
+ public int b15709;
+ public int b15710;
+ public int b15711;
+ public int b15712;
+ public int b15713;
+ public int b15714;
+ public int b15715;
+ public int b15716;
+ public int b15717;
+ public int b15718;
+ public int b15719;
+ public int b15720;
+ public int b15721;
+ public int b15722;
+ public int b15723;
+ public int b15724;
+ public int b15725;
+ public int b15726;
+ public int b15727;
+ public int b15728;
+ public int b15729;
+ public int b15730;
+ public int b15731;
+ public int b15732;
+ public int b15733;
+ public int b15734;
+ public int b15735;
+ public int b15736;
+ public int b15737;
+ public int b15738;
+ public int b15739;
+ public int b15740;
+ public int b15741;
+ public int b15742;
+ public int b15743;
+ public int b15744;
+ public int b15745;
+ public int b15746;
+ public int b15747;
+ public int b15748;
+ public int b15749;
+ public int b15750;
+ public int b15751;
+ public int b15752;
+ public int b15753;
+ public int b15754;
+ public int b15755;
+ public int b15756;
+ public int b15757;
+ public int b15758;
+ public int b15759;
+ public int b15760;
+ public int b15761;
+ public int b15762;
+ public int b15763;
+ public int b15764;
+ public int b15765;
+ public int b15766;
+ public int b15767;
+ public int b15768;
+ public int b15769;
+ public int b15770;
+ public int b15771;
+ public int b15772;
+ public int b15773;
+ public int b15774;
+ public int b15775;
+ public int b15776;
+ public int b15777;
+ public int b15778;
+ public int b15779;
+ public int b15780;
+ public int b15781;
+ public int b15782;
+ public int b15783;
+ public int b15784;
+ public int b15785;
+ public int b15786;
+ public int b15787;
+ public int b15788;
+ public int b15789;
+ public int b15790;
+ public int b15791;
+ public int b15792;
+ public int b15793;
+ public int b15794;
+ public int b15795;
+ public int b15796;
+ public int b15797;
+ public int b15798;
+ public int b15799;
+ public int b15800;
+ public int b15801;
+ public int b15802;
+ public int b15803;
+ public int b15804;
+ public int b15805;
+ public int b15806;
+ public int b15807;
+ public int b15808;
+ public int b15809;
+ public int b15810;
+ public int b15811;
+ public int b15812;
+ public int b15813;
+ public int b15814;
+ public int b15815;
+ public int b15816;
+ public int b15817;
+ public int b15818;
+ public int b15819;
+ public int b15820;
+ public int b15821;
+ public int b15822;
+ public int b15823;
+ public int b15824;
+ public int b15825;
+ public int b15826;
+ public int b15827;
+ public int b15828;
+ public int b15829;
+ public int b15830;
+ public int b15831;
+ public int b15832;
+ public int b15833;
+ public int b15834;
+ public int b15835;
+ public int b15836;
+ public int b15837;
+ public int b15838;
+ public int b15839;
+ public int b15840;
+ public int b15841;
+ public int b15842;
+ public int b15843;
+ public int b15844;
+ public int b15845;
+ public int b15846;
+ public int b15847;
+ public int b15848;
+ public int b15849;
+ public int b15850;
+ public int b15851;
+ public int b15852;
+ public int b15853;
+ public int b15854;
+ public int b15855;
+ public int b15856;
+ public int b15857;
+ public int b15858;
+ public int b15859;
+ public int b15860;
+ public int b15861;
+ public int b15862;
+ public int b15863;
+ public int b15864;
+ public int b15865;
+ public int b15866;
+ public int b15867;
+ public int b15868;
+ public int b15869;
+ public int b15870;
+ public int b15871;
+ public int b15872;
+ public int b15873;
+ public int b15874;
+ public int b15875;
+ public int b15876;
+ public int b15877;
+ public int b15878;
+ public int b15879;
+ public int b15880;
+ public int b15881;
+ public int b15882;
+ public int b15883;
+ public int b15884;
+ public int b15885;
+ public int b15886;
+ public int b15887;
+ public int b15888;
+ public int b15889;
+ public int b15890;
+ public int b15891;
+ public int b15892;
+ public int b15893;
+ public int b15894;
+ public int b15895;
+ public int b15896;
+ public int b15897;
+ public int b15898;
+ public int b15899;
+ public int b15900;
+ public int b15901;
+ public int b15902;
+ public int b15903;
+ public int b15904;
+ public int b15905;
+ public int b15906;
+ public int b15907;
+ public int b15908;
+ public int b15909;
+ public int b15910;
+ public int b15911;
+ public int b15912;
+ public int b15913;
+ public int b15914;
+ public int b15915;
+ public int b15916;
+ public int b15917;
+ public int b15918;
+ public int b15919;
+ public int b15920;
+ public int b15921;
+ public int b15922;
+ public int b15923;
+ public int b15924;
+ public int b15925;
+ public int b15926;
+ public int b15927;
+ public int b15928;
+ public int b15929;
+ public int b15930;
+ public int b15931;
+ public int b15932;
+ public int b15933;
+ public int b15934;
+ public int b15935;
+ public int b15936;
+ public int b15937;
+ public int b15938;
+ public int b15939;
+ public int b15940;
+ public int b15941;
+ public int b15942;
+ public int b15943;
+ public int b15944;
+ public int b15945;
+ public int b15946;
+ public int b15947;
+ public int b15948;
+ public int b15949;
+ public int b15950;
+ public int b15951;
+ public int b15952;
+ public int b15953;
+ public int b15954;
+ public int b15955;
+ public int b15956;
+ public int b15957;
+ public int b15958;
+ public int b15959;
+ public int b15960;
+ public int b15961;
+ public int b15962;
+ public int b15963;
+ public int b15964;
+ public int b15965;
+ public int b15966;
+ public int b15967;
+ public int b15968;
+ public int b15969;
+ public int b15970;
+ public int b15971;
+ public int b15972;
+ public int b15973;
+ public int b15974;
+ public int b15975;
+ public int b15976;
+ public int b15977;
+ public int b15978;
+ public int b15979;
+ public int b15980;
+ public int b15981;
+ public int b15982;
+ public int b15983;
+ public int b15984;
+ public int b15985;
+ public int b15986;
+ public int b15987;
+ public int b15988;
+ public int b15989;
+ public int b15990;
+ public int b15991;
+ public int b15992;
+ public int b15993;
+ public int b15994;
+ public int b15995;
+ public int b15996;
+ public int b15997;
+ public int b15998;
+ public int b15999;
+ public int b16000;
+ public int b16001;
+ public int b16002;
+ public int b16003;
+ public int b16004;
+ public int b16005;
+ public int b16006;
+ public int b16007;
+ public int b16008;
+ public int b16009;
+ public int b16010;
+ public int b16011;
+ public int b16012;
+ public int b16013;
+ public int b16014;
+ public int b16015;
+ public int b16016;
+ public int b16017;
+ public int b16018;
+ public int b16019;
+ public int b16020;
+ public int b16021;
+ public int b16022;
+ public int b16023;
+ public int b16024;
+ public int b16025;
+ public int b16026;
+ public int b16027;
+ public int b16028;
+ public int b16029;
+ public int b16030;
+ public int b16031;
+ public int b16032;
+ public int b16033;
+ public int b16034;
+ public int b16035;
+ public int b16036;
+ public int b16037;
+ public int b16038;
+ public int b16039;
+ public int b16040;
+ public int b16041;
+ public int b16042;
+ public int b16043;
+ public int b16044;
+ public int b16045;
+ public int b16046;
+ public int b16047;
+ public int b16048;
+ public int b16049;
+ public int b16050;
+ public int b16051;
+ public int b16052;
+ public int b16053;
+ public int b16054;
+ public int b16055;
+ public int b16056;
+ public int b16057;
+ public int b16058;
+ public int b16059;
+ public int b16060;
+ public int b16061;
+ public int b16062;
+ public int b16063;
+ public int b16064;
+ public int b16065;
+ public int b16066;
+ public int b16067;
+ public int b16068;
+ public int b16069;
+ public int b16070;
+ public int b16071;
+ public int b16072;
+ public int b16073;
+ public int b16074;
+ public int b16075;
+ public int b16076;
+ public int b16077;
+ public int b16078;
+ public int b16079;
+ public int b16080;
+ public int b16081;
+ public int b16082;
+ public int b16083;
+ public int b16084;
+ public int b16085;
+ public int b16086;
+ public int b16087;
+ public int b16088;
+ public int b16089;
+ public int b16090;
+ public int b16091;
+ public int b16092;
+ public int b16093;
+ public int b16094;
+ public int b16095;
+ public int b16096;
+ public int b16097;
+ public int b16098;
+ public int b16099;
+ public int b16100;
+ public int b16101;
+ public int b16102;
+ public int b16103;
+ public int b16104;
+ public int b16105;
+ public int b16106;
+ public int b16107;
+ public int b16108;
+ public int b16109;
+ public int b16110;
+ public int b16111;
+ public int b16112;
+ public int b16113;
+ public int b16114;
+ public int b16115;
+ public int b16116;
+ public int b16117;
+ public int b16118;
+ public int b16119;
+ public int b16120;
+ public int b16121;
+ public int b16122;
+ public int b16123;
+ public int b16124;
+ public int b16125;
+ public int b16126;
+ public int b16127;
+ public int b16128;
+ public int b16129;
+ public int b16130;
+ public int b16131;
+ public int b16132;
+ public int b16133;
+ public int b16134;
+ public int b16135;
+ public int b16136;
+ public int b16137;
+ public int b16138;
+ public int b16139;
+ public int b16140;
+ public int b16141;
+ public int b16142;
+ public int b16143;
+ public int b16144;
+ public int b16145;
+ public int b16146;
+ public int b16147;
+ public int b16148;
+ public int b16149;
+ public int b16150;
+ public int b16151;
+ public int b16152;
+ public int b16153;
+ public int b16154;
+ public int b16155;
+ public int b16156;
+ public int b16157;
+ public int b16158;
+ public int b16159;
+ public int b16160;
+ public int b16161;
+ public int b16162;
+ public int b16163;
+ public int b16164;
+ public int b16165;
+ public int b16166;
+ public int b16167;
+ public int b16168;
+ public int b16169;
+ public int b16170;
+ public int b16171;
+ public int b16172;
+ public int b16173;
+ public int b16174;
+ public int b16175;
+ public int b16176;
+ public int b16177;
+ public int b16178;
+ public int b16179;
+ public int b16180;
+ public int b16181;
+ public int b16182;
+ public int b16183;
+ public int b16184;
+ public int b16185;
+ public int b16186;
+ public int b16187;
+ public int b16188;
+ public int b16189;
+ public int b16190;
+ public int b16191;
+ public int b16192;
+ public int b16193;
+ public int b16194;
+ public int b16195;
+ public int b16196;
+ public int b16197;
+ public int b16198;
+ public int b16199;
+ public int b16200;
+ public int b16201;
+ public int b16202;
+ public int b16203;
+ public int b16204;
+ public int b16205;
+ public int b16206;
+ public int b16207;
+ public int b16208;
+ public int b16209;
+ public int b16210;
+ public int b16211;
+ public int b16212;
+ public int b16213;
+ public int b16214;
+ public int b16215;
+ public int b16216;
+ public int b16217;
+ public int b16218;
+ public int b16219;
+ public int b16220;
+ public int b16221;
+ public int b16222;
+ public int b16223;
+ public int b16224;
+ public int b16225;
+ public int b16226;
+ public int b16227;
+ public int b16228;
+ public int b16229;
+ public int b16230;
+ public int b16231;
+ public int b16232;
+ public int b16233;
+ public int b16234;
+ public int b16235;
+ public int b16236;
+ public int b16237;
+ public int b16238;
+ public int b16239;
+ public int b16240;
+ public int b16241;
+ public int b16242;
+ public int b16243;
+ public int b16244;
+ public int b16245;
+ public int b16246;
+ public int b16247;
+ public int b16248;
+ public int b16249;
+ public int b16250;
+ public int b16251;
+ public int b16252;
+ public int b16253;
+ public int b16254;
+ public int b16255;
+ public int b16256;
+ public int b16257;
+ public int b16258;
+ public int b16259;
+ public int b16260;
+ public int b16261;
+ public int b16262;
+ public int b16263;
+ public int b16264;
+ public int b16265;
+ public int b16266;
+ public int b16267;
+ public int b16268;
+ public int b16269;
+ public int b16270;
+ public int b16271;
+ public int b16272;
+ public int b16273;
+ public int b16274;
+ public int b16275;
+ public int b16276;
+ public int b16277;
+ public int b16278;
+ public int b16279;
+ public int b16280;
+ public int b16281;
+ public int b16282;
+ public int b16283;
+ public int b16284;
+ public int b16285;
+ public int b16286;
+ public int b16287;
+ public int b16288;
+ public int b16289;
+ public int b16290;
+ public int b16291;
+ public int b16292;
+ public int b16293;
+ public int b16294;
+ public int b16295;
+ public int b16296;
+ public int b16297;
+ public int b16298;
+ public int b16299;
+ public int b16300;
+ public int b16301;
+ public int b16302;
+ public int b16303;
+ public int b16304;
+ public int b16305;
+ public int b16306;
+ public int b16307;
+ public int b16308;
+ public int b16309;
+ public int b16310;
+ public int b16311;
+ public int b16312;
+ public int b16313;
+ public int b16314;
+ public int b16315;
+ public int b16316;
+ public int b16317;
+ public int b16318;
+ public int b16319;
+ public int b16320;
+ public int b16321;
+ public int b16322;
+ public int b16323;
+ public int b16324;
+ public int b16325;
+ public int b16326;
+ public int b16327;
+ public int b16328;
+ public int b16329;
+ public int b16330;
+ public int b16331;
+ public int b16332;
+ public int b16333;
+ public int b16334;
+ public int b16335;
+ public int b16336;
+ public int b16337;
+ public int b16338;
+ public int b16339;
+ public int b16340;
+ public int b16341;
+ public int b16342;
+ public int b16343;
+ public int b16344;
+ public int b16345;
+ public int b16346;
+ public int b16347;
+ public int b16348;
+ public int b16349;
+ public int b16350;
+ public int b16351;
+ public int b16352;
+ public int b16353;
+ public int b16354;
+ public int b16355;
+ public int b16356;
+ public int b16357;
+ public int b16358;
+ public int b16359;
+ public int b16360;
+ public int b16361;
+ public int b16362;
+ public int b16363;
+ public int b16364;
+ public int b16365;
+ public int b16366;
+ public int b16367;
+ public int b16368;
+ public int b16369;
+ public int b16370;
+ public int b16371;
+ public int b16372;
+ public int b16373;
+ public int b16374;
+ public int b16375;
+ public int b16376;
+ public int b16377;
+ public int b16378;
+ public int b16379;
+ public int b16380;
+ public int b16381;
+ public int b16382;
+ public int b16383;
+ public int b16384;
+ public int b16385;
+ public int b16386;
+ public int b16387;
+ public int b16388;
+ public int b16389;
+ public int b16390;
+ public int b16391;
+ public int b16392;
+ public int b16393;
+ public int b16394;
+ public int b16395;
+ public int b16396;
+ public int b16397;
+ public int b16398;
+ public int b16399;
+ public int b16400;
+ public int b16401;
+ public int b16402;
+ public int b16403;
+ public int b16404;
+ public int b16405;
+ public int b16406;
+ public int b16407;
+ public int b16408;
+ public int b16409;
+ public int b16410;
+ public int b16411;
+ public int b16412;
+ public int b16413;
+ public int b16414;
+ public int b16415;
+ public int b16416;
+ public int b16417;
+ public int b16418;
+ public int b16419;
+ public int b16420;
+ public int b16421;
+ public int b16422;
+ public int b16423;
+ public int b16424;
+ public int b16425;
+ public int b16426;
+ public int b16427;
+ public int b16428;
+ public int b16429;
+ public int b16430;
+ public int b16431;
+ public int b16432;
+ public int b16433;
+ public int b16434;
+ public int b16435;
+ public int b16436;
+ public int b16437;
+ public int b16438;
+ public int b16439;
+ public int b16440;
+ public int b16441;
+ public int b16442;
+ public int b16443;
+ public int b16444;
+ public int b16445;
+ public int b16446;
+ public int b16447;
+ public int b16448;
+ public int b16449;
+ public int b16450;
+ public int b16451;
+ public int b16452;
+ public int b16453;
+ public int b16454;
+ public int b16455;
+ public int b16456;
+ public int b16457;
+ public int b16458;
+ public int b16459;
+ public int b16460;
+ public int b16461;
+ public int b16462;
+ public int b16463;
+ public int b16464;
+ public int b16465;
+ public int b16466;
+ public int b16467;
+ public int b16468;
+ public int b16469;
+ public int b16470;
+ public int b16471;
+ public int b16472;
+ public int b16473;
+ public int b16474;
+ public int b16475;
+ public int b16476;
+ public int b16477;
+ public int b16478;
+ public int b16479;
+ public int b16480;
+ public int b16481;
+ public int b16482;
+ public int b16483;
+ public int b16484;
+ public int b16485;
+ public int b16486;
+ public int b16487;
+ public int b16488;
+ public int b16489;
+ public int b16490;
+ public int b16491;
+ public int b16492;
+ public int b16493;
+ public int b16494;
+ public int b16495;
+ public int b16496;
+ public int b16497;
+ public int b16498;
+ public int b16499;
+ public int b16500;
+ public int b16501;
+ public int b16502;
+ public int b16503;
+ public int b16504;
+ public int b16505;
+ public int b16506;
+ public int b16507;
+ public int b16508;
+ public int b16509;
+ public int b16510;
+ public int b16511;
+ public int b16512;
+ public int b16513;
+ public int b16514;
+ public int b16515;
+ public int b16516;
+ public int b16517;
+ public int b16518;
+ public int b16519;
+ public int b16520;
+ public int b16521;
+ public int b16522;
+ public int b16523;
+ public int b16524;
+ public int b16525;
+ public int b16526;
+ public int b16527;
+ public int b16528;
+ public int b16529;
+ public int b16530;
+ public int b16531;
+ public int b16532;
+ public int b16533;
+ public int b16534;
+ public int b16535;
+ public int b16536;
+ public int b16537;
+ public int b16538;
+ public int b16539;
+ public int b16540;
+ public int b16541;
+ public int b16542;
+ public int b16543;
+ public int b16544;
+ public int b16545;
+ public int b16546;
+ public int b16547;
+ public int b16548;
+ public int b16549;
+ public int b16550;
+ public int b16551;
+ public int b16552;
+ public int b16553;
+ public int b16554;
+ public int b16555;
+ public int b16556;
+ public int b16557;
+ public int b16558;
+ public int b16559;
+ public int b16560;
+ public int b16561;
+ public int b16562;
+ public int b16563;
+ public int b16564;
+ public int b16565;
+ public int b16566;
+ public int b16567;
+ public int b16568;
+ public int b16569;
+ public int b16570;
+ public int b16571;
+ public int b16572;
+ public int b16573;
+ public int b16574;
+ public int b16575;
+ public int b16576;
+ public int b16577;
+ public int b16578;
+ public int b16579;
+ public int b16580;
+ public int b16581;
+ public int b16582;
+ public int b16583;
+ public int b16584;
+ public int b16585;
+ public int b16586;
+ public int b16587;
+ public int b16588;
+ public int b16589;
+ public int b16590;
+ public int b16591;
+ public int b16592;
+ public int b16593;
+ public int b16594;
+ public int b16595;
+ public int b16596;
+ public int b16597;
+ public int b16598;
+ public int b16599;
+ public int b16600;
+ public int b16601;
+ public int b16602;
+ public int b16603;
+ public int b16604;
+ public int b16605;
+ public int b16606;
+ public int b16607;
+ public int b16608;
+ public int b16609;
+ public int b16610;
+ public int b16611;
+ public int b16612;
+ public int b16613;
+ public int b16614;
+ public int b16615;
+ public int b16616;
+ public int b16617;
+ public int b16618;
+ public int b16619;
+ public int b16620;
+ public int b16621;
+ public int b16622;
+ public int b16623;
+ public int b16624;
+ public int b16625;
+ public int b16626;
+ public int b16627;
+ public int b16628;
+ public int b16629;
+ public int b16630;
+ public int b16631;
+ public int b16632;
+ public int b16633;
+ public int b16634;
+ public int b16635;
+ public int b16636;
+ public int b16637;
+ public int b16638;
+ public int b16639;
+ public int b16640;
+ public int b16641;
+ public int b16642;
+ public int b16643;
+ public int b16644;
+ public int b16645;
+ public int b16646;
+ public int b16647;
+ public int b16648;
+ public int b16649;
+ public int b16650;
+ public int b16651;
+ public int b16652;
+ public int b16653;
+ public int b16654;
+ public int b16655;
+ public int b16656;
+ public int b16657;
+ public int b16658;
+ public int b16659;
+ public int b16660;
+ public int b16661;
+ public int b16662;
+ public int b16663;
+ public int b16664;
+ public int b16665;
+ public int b16666;
+ public int b16667;
+ public int b16668;
+ public int b16669;
+ public int b16670;
+ public int b16671;
+ public int b16672;
+ public int b16673;
+ public int b16674;
+ public int b16675;
+ public int b16676;
+ public int b16677;
+ public int b16678;
+ public int b16679;
+ public int b16680;
+ public int b16681;
+ public int b16682;
+ public int b16683;
+ public int b16684;
+ public int b16685;
+ public int b16686;
+ public int b16687;
+ public int b16688;
+ public int b16689;
+ public int b16690;
+ public int b16691;
+ public int b16692;
+ public int b16693;
+ public int b16694;
+ public int b16695;
+ public int b16696;
+ public int b16697;
+ public int b16698;
+ public int b16699;
+ public int b16700;
+ public int b16701;
+ public int b16702;
+ public int b16703;
+ public int b16704;
+ public int b16705;
+ public int b16706;
+ public int b16707;
+ public int b16708;
+ public int b16709;
+ public int b16710;
+ public int b16711;
+ public int b16712;
+ public int b16713;
+ public int b16714;
+ public int b16715;
+ public int b16716;
+ public int b16717;
+ public int b16718;
+ public int b16719;
+ public int b16720;
+ public int b16721;
+ public int b16722;
+ public int b16723;
+ public int b16724;
+ public int b16725;
+ public int b16726;
+ public int b16727;
+ public int b16728;
+ public int b16729;
+ public int b16730;
+ public int b16731;
+ public int b16732;
+ public int b16733;
+ public int b16734;
+ public int b16735;
+ public int b16736;
+ public int b16737;
+ public int b16738;
+ public int b16739;
+ public int b16740;
+ public int b16741;
+ public int b16742;
+ public int b16743;
+ public int b16744;
+ public int b16745;
+ public int b16746;
+ public int b16747;
+ public int b16748;
+ public int b16749;
+ public int b16750;
+ public int b16751;
+ public int b16752;
+ public int b16753;
+ public int b16754;
+ public int b16755;
+ public int b16756;
+ public int b16757;
+ public int b16758;
+ public int b16759;
+ public int b16760;
+ public int b16761;
+ public int b16762;
+ public int b16763;
+ public int b16764;
+ public int b16765;
+ public int b16766;
+ public int b16767;
+ public int b16768;
+ public int b16769;
+ public int b16770;
+ public int b16771;
+ public int b16772;
+ public int b16773;
+ public int b16774;
+ public int b16775;
+ public int b16776;
+ public int b16777;
+ public int b16778;
+ public int b16779;
+ public int b16780;
+ public int b16781;
+ public int b16782;
+ public int b16783;
+ public int b16784;
+ public int b16785;
+ public int b16786;
+ public int b16787;
+ public int b16788;
+ public int b16789;
+ public int b16790;
+ public int b16791;
+ public int b16792;
+ public int b16793;
+ public int b16794;
+ public int b16795;
+ public int b16796;
+ public int b16797;
+ public int b16798;
+ public int b16799;
+ public int b16800;
+ public int b16801;
+ public int b16802;
+ public int b16803;
+ public int b16804;
+ public int b16805;
+ public int b16806;
+ public int b16807;
+ public int b16808;
+ public int b16809;
+ public int b16810;
+ public int b16811;
+ public int b16812;
+ public int b16813;
+ public int b16814;
+ public int b16815;
+ public int b16816;
+ public int b16817;
+ public int b16818;
+ public int b16819;
+ public int b16820;
+ public int b16821;
+ public int b16822;
+ public int b16823;
+ public int b16824;
+ public int b16825;
+ public int b16826;
+ public int b16827;
+ public int b16828;
+ public int b16829;
+ public int b16830;
+ public int b16831;
+ public int b16832;
+ public int b16833;
+ public int b16834;
+ public int b16835;
+ public int b16836;
+ public int b16837;
+ public int b16838;
+ public int b16839;
+ public int b16840;
+ public int b16841;
+ public int b16842;
+ public int b16843;
+ public int b16844;
+ public int b16845;
+ public int b16846;
+ public int b16847;
+ public int b16848;
+ public int b16849;
+ public int b16850;
+ public int b16851;
+ public int b16852;
+ public int b16853;
+ public int b16854;
+ public int b16855;
+ public int b16856;
+ public int b16857;
+ public int b16858;
+ public int b16859;
+ public int b16860;
+ public int b16861;
+ public int b16862;
+ public int b16863;
+ public int b16864;
+ public int b16865;
+ public int b16866;
+ public int b16867;
+ public int b16868;
+ public int b16869;
+ public int b16870;
+ public int b16871;
+ public int b16872;
+ public int b16873;
+ public int b16874;
+ public int b16875;
+ public int b16876;
+ public int b16877;
+ public int b16878;
+ public int b16879;
+ public int b16880;
+ public int b16881;
+ public int b16882;
+ public int b16883;
+ public int b16884;
+ public int b16885;
+ public int b16886;
+ public int b16887;
+ public int b16888;
+ public int b16889;
+ public int b16890;
+ public int b16891;
+ public int b16892;
+ public int b16893;
+ public int b16894;
+ public int b16895;
+ public int b16896;
+ public int b16897;
+ public int b16898;
+ public int b16899;
+ public int b16900;
+ public int b16901;
+ public int b16902;
+ public int b16903;
+ public int b16904;
+ public int b16905;
+ public int b16906;
+ public int b16907;
+ public int b16908;
+ public int b16909;
+ public int b16910;
+ public int b16911;
+ public int b16912;
+ public int b16913;
+ public int b16914;
+ public int b16915;
+ public int b16916;
+ public int b16917;
+ public int b16918;
+ public int b16919;
+ public int b16920;
+ public int b16921;
+ public int b16922;
+ public int b16923;
+ public int b16924;
+ public int b16925;
+ public int b16926;
+ public int b16927;
+ public int b16928;
+ public int b16929;
+ public int b16930;
+ public int b16931;
+ public int b16932;
+ public int b16933;
+ public int b16934;
+ public int b16935;
+ public int b16936;
+ public int b16937;
+ public int b16938;
+ public int b16939;
+ public int b16940;
+ public int b16941;
+ public int b16942;
+ public int b16943;
+ public int b16944;
+ public int b16945;
+ public int b16946;
+ public int b16947;
+ public int b16948;
+ public int b16949;
+ public int b16950;
+ public int b16951;
+ public int b16952;
+ public int b16953;
+ public int b16954;
+ public int b16955;
+ public int b16956;
+ public int b16957;
+ public int b16958;
+ public int b16959;
+ public int b16960;
+ public int b16961;
+ public int b16962;
+ public int b16963;
+ public int b16964;
+ public int b16965;
+ public int b16966;
+ public int b16967;
+ public int b16968;
+ public int b16969;
+ public int b16970;
+ public int b16971;
+ public int b16972;
+ public int b16973;
+ public int b16974;
+ public int b16975;
+ public int b16976;
+ public int b16977;
+ public int b16978;
+ public int b16979;
+ public int b16980;
+ public int b16981;
+ public int b16982;
+ public int b16983;
+ public int b16984;
+ public int b16985;
+ public int b16986;
+ public int b16987;
+ public int b16988;
+ public int b16989;
+ public int b16990;
+ public int b16991;
+ public int b16992;
+ public int b16993;
+ public int b16994;
+ public int b16995;
+ public int b16996;
+ public int b16997;
+ public int b16998;
+ public int b16999;
+ public int b17000;
+ public int b17001;
+ public int b17002;
+ public int b17003;
+ public int b17004;
+ public int b17005;
+ public int b17006;
+ public int b17007;
+ public int b17008;
+ public int b17009;
+ public int b17010;
+ public int b17011;
+ public int b17012;
+ public int b17013;
+ public int b17014;
+ public int b17015;
+ public int b17016;
+ public int b17017;
+ public int b17018;
+ public int b17019;
+ public int b17020;
+ public int b17021;
+ public int b17022;
+ public int b17023;
+ public int b17024;
+ public int b17025;
+ public int b17026;
+ public int b17027;
+ public int b17028;
+ public int b17029;
+ public int b17030;
+ public int b17031;
+ public int b17032;
+ public int b17033;
+ public int b17034;
+ public int b17035;
+ public int b17036;
+ public int b17037;
+ public int b17038;
+ public int b17039;
+ public int b17040;
+ public int b17041;
+ public int b17042;
+ public int b17043;
+ public int b17044;
+ public int b17045;
+ public int b17046;
+ public int b17047;
+ public int b17048;
+ public int b17049;
+ public int b17050;
+ public int b17051;
+ public int b17052;
+ public int b17053;
+ public int b17054;
+ public int b17055;
+ public int b17056;
+ public int b17057;
+ public int b17058;
+ public int b17059;
+ public int b17060;
+ public int b17061;
+ public int b17062;
+ public int b17063;
+ public int b17064;
+ public int b17065;
+ public int b17066;
+ public int b17067;
+ public int b17068;
+ public int b17069;
+ public int b17070;
+ public int b17071;
+ public int b17072;
+ public int b17073;
+ public int b17074;
+ public int b17075;
+ public int b17076;
+ public int b17077;
+ public int b17078;
+ public int b17079;
+ public int b17080;
+ public int b17081;
+ public int b17082;
+ public int b17083;
+ public int b17084;
+ public int b17085;
+ public int b17086;
+ public int b17087;
+ public int b17088;
+ public int b17089;
+ public int b17090;
+ public int b17091;
+ public int b17092;
+ public int b17093;
+ public int b17094;
+ public int b17095;
+ public int b17096;
+ public int b17097;
+ public int b17098;
+ public int b17099;
+ public int b17100;
+ public int b17101;
+ public int b17102;
+ public int b17103;
+ public int b17104;
+ public int b17105;
+ public int b17106;
+ public int b17107;
+ public int b17108;
+ public int b17109;
+ public int b17110;
+ public int b17111;
+ public int b17112;
+ public int b17113;
+ public int b17114;
+ public int b17115;
+ public int b17116;
+ public int b17117;
+ public int b17118;
+ public int b17119;
+ public int b17120;
+ public int b17121;
+ public int b17122;
+ public int b17123;
+ public int b17124;
+ public int b17125;
+ public int b17126;
+ public int b17127;
+ public int b17128;
+ public int b17129;
+ public int b17130;
+ public int b17131;
+ public int b17132;
+ public int b17133;
+ public int b17134;
+ public int b17135;
+ public int b17136;
+ public int b17137;
+ public int b17138;
+ public int b17139;
+ public int b17140;
+ public int b17141;
+ public int b17142;
+ public int b17143;
+ public int b17144;
+ public int b17145;
+ public int b17146;
+ public int b17147;
+ public int b17148;
+ public int b17149;
+ public int b17150;
+ public int b17151;
+ public int b17152;
+ public int b17153;
+ public int b17154;
+ public int b17155;
+ public int b17156;
+ public int b17157;
+ public int b17158;
+ public int b17159;
+ public int b17160;
+ public int b17161;
+ public int b17162;
+ public int b17163;
+ public int b17164;
+ public int b17165;
+ public int b17166;
+ public int b17167;
+ public int b17168;
+ public int b17169;
+ public int b17170;
+ public int b17171;
+ public int b17172;
+ public int b17173;
+ public int b17174;
+ public int b17175;
+ public int b17176;
+ public int b17177;
+ public int b17178;
+ public int b17179;
+ public int b17180;
+ public int b17181;
+ public int b17182;
+ public int b17183;
+ public int b17184;
+ public int b17185;
+ public int b17186;
+ public int b17187;
+ public int b17188;
+ public int b17189;
+ public int b17190;
+ public int b17191;
+ public int b17192;
+ public int b17193;
+ public int b17194;
+ public int b17195;
+ public int b17196;
+ public int b17197;
+ public int b17198;
+ public int b17199;
+ public int b17200;
+ public int b17201;
+ public int b17202;
+ public int b17203;
+ public int b17204;
+ public int b17205;
+ public int b17206;
+ public int b17207;
+ public int b17208;
+ public int b17209;
+ public int b17210;
+ public int b17211;
+ public int b17212;
+ public int b17213;
+ public int b17214;
+ public int b17215;
+ public int b17216;
+ public int b17217;
+ public int b17218;
+ public int b17219;
+ public int b17220;
+ public int b17221;
+ public int b17222;
+ public int b17223;
+ public int b17224;
+ public int b17225;
+ public int b17226;
+ public int b17227;
+ public int b17228;
+ public int b17229;
+ public int b17230;
+ public int b17231;
+ public int b17232;
+ public int b17233;
+ public int b17234;
+ public int b17235;
+ public int b17236;
+ public int b17237;
+ public int b17238;
+ public int b17239;
+ public int b17240;
+ public int b17241;
+ public int b17242;
+ public int b17243;
+ public int b17244;
+ public int b17245;
+ public int b17246;
+ public int b17247;
+ public int b17248;
+ public int b17249;
+ public int b17250;
+ public int b17251;
+ public int b17252;
+ public int b17253;
+ public int b17254;
+ public int b17255;
+ public int b17256;
+ public int b17257;
+ public int b17258;
+ public int b17259;
+ public int b17260;
+ public int b17261;
+ public int b17262;
+ public int b17263;
+ public int b17264;
+ public int b17265;
+ public int b17266;
+ public int b17267;
+ public int b17268;
+ public int b17269;
+ public int b17270;
+ public int b17271;
+ public int b17272;
+ public int b17273;
+ public int b17274;
+ public int b17275;
+ public int b17276;
+ public int b17277;
+ public int b17278;
+ public int b17279;
+ public int b17280;
+ public int b17281;
+ public int b17282;
+ public int b17283;
+ public int b17284;
+ public int b17285;
+ public int b17286;
+ public int b17287;
+ public int b17288;
+ public int b17289;
+ public int b17290;
+ public int b17291;
+ public int b17292;
+ public int b17293;
+ public int b17294;
+ public int b17295;
+ public int b17296;
+ public int b17297;
+ public int b17298;
+ public int b17299;
+ public int b17300;
+ public int b17301;
+ public int b17302;
+ public int b17303;
+ public int b17304;
+ public int b17305;
+ public int b17306;
+ public int b17307;
+ public int b17308;
+ public int b17309;
+ public int b17310;
+ public int b17311;
+ public int b17312;
+ public int b17313;
+ public int b17314;
+ public int b17315;
+ public int b17316;
+ public int b17317;
+ public int b17318;
+ public int b17319;
+ public int b17320;
+ public int b17321;
+ public int b17322;
+ public int b17323;
+ public int b17324;
+ public int b17325;
+ public int b17326;
+ public int b17327;
+ public int b17328;
+ public int b17329;
+ public int b17330;
+ public int b17331;
+ public int b17332;
+ public int b17333;
+ public int b17334;
+ public int b17335;
+ public int b17336;
+ public int b17337;
+ public int b17338;
+ public int b17339;
+ public int b17340;
+ public int b17341;
+ public int b17342;
+ public int b17343;
+ public int b17344;
+ public int b17345;
+ public int b17346;
+ public int b17347;
+ public int b17348;
+ public int b17349;
+ public int b17350;
+ public int b17351;
+ public int b17352;
+ public int b17353;
+ public int b17354;
+ public int b17355;
+ public int b17356;
+ public int b17357;
+ public int b17358;
+ public int b17359;
+ public int b17360;
+ public int b17361;
+ public int b17362;
+ public int b17363;
+ public int b17364;
+ public int b17365;
+ public int b17366;
+ public int b17367;
+ public int b17368;
+ public int b17369;
+ public int b17370;
+ public int b17371;
+ public int b17372;
+ public int b17373;
+ public int b17374;
+ public int b17375;
+ public int b17376;
+ public int b17377;
+ public int b17378;
+ public int b17379;
+ public int b17380;
+ public int b17381;
+ public int b17382;
+ public int b17383;
+ public int b17384;
+ public int b17385;
+ public int b17386;
+ public int b17387;
+ public int b17388;
+ public int b17389;
+ public int b17390;
+ public int b17391;
+ public int b17392;
+ public int b17393;
+ public int b17394;
+ public int b17395;
+ public int b17396;
+ public int b17397;
+ public int b17398;
+ public int b17399;
+ public int b17400;
+ public int b17401;
+ public int b17402;
+ public int b17403;
+ public int b17404;
+ public int b17405;
+ public int b17406;
+ public int b17407;
+ public int b17408;
+ public int b17409;
+ public int b17410;
+ public int b17411;
+ public int b17412;
+ public int b17413;
+ public int b17414;
+ public int b17415;
+ public int b17416;
+ public int b17417;
+ public int b17418;
+ public int b17419;
+ public int b17420;
+ public int b17421;
+ public int b17422;
+ public int b17423;
+ public int b17424;
+ public int b17425;
+ public int b17426;
+ public int b17427;
+ public int b17428;
+ public int b17429;
+ public int b17430;
+ public int b17431;
+ public int b17432;
+ public int b17433;
+ public int b17434;
+ public int b17435;
+ public int b17436;
+ public int b17437;
+ public int b17438;
+ public int b17439;
+ public int b17440;
+ public int b17441;
+ public int b17442;
+ public int b17443;
+ public int b17444;
+ public int b17445;
+ public int b17446;
+ public int b17447;
+ public int b17448;
+ public int b17449;
+ public int b17450;
+ public int b17451;
+ public int b17452;
+ public int b17453;
+ public int b17454;
+ public int b17455;
+ public int b17456;
+ public int b17457;
+ public int b17458;
+ public int b17459;
+ public int b17460;
+ public int b17461;
+ public int b17462;
+ public int b17463;
+ public int b17464;
+ public int b17465;
+ public int b17466;
+ public int b17467;
+ public int b17468;
+ public int b17469;
+ public int b17470;
+ public int b17471;
+ public int b17472;
+ public int b17473;
+ public int b17474;
+ public int b17475;
+ public int b17476;
+ public int b17477;
+ public int b17478;
+ public int b17479;
+ public int b17480;
+ public int b17481;
+ public int b17482;
+ public int b17483;
+ public int b17484;
+ public int b17485;
+ public int b17486;
+ public int b17487;
+ public int b17488;
+ public int b17489;
+ public int b17490;
+ public int b17491;
+ public int b17492;
+ public int b17493;
+ public int b17494;
+ public int b17495;
+ public int b17496;
+ public int b17497;
+ public int b17498;
+ public int b17499;
+ public int b17500;
+ public int b17501;
+ public int b17502;
+ public int b17503;
+ public int b17504;
+ public int b17505;
+ public int b17506;
+ public int b17507;
+ public int b17508;
+ public int b17509;
+ public int b17510;
+ public int b17511;
+ public int b17512;
+ public int b17513;
+ public int b17514;
+ public int b17515;
+ public int b17516;
+ public int b17517;
+ public int b17518;
+ public int b17519;
+ public int b17520;
+ public int b17521;
+ public int b17522;
+ public int b17523;
+ public int b17524;
+ public int b17525;
+ public int b17526;
+ public int b17527;
+ public int b17528;
+ public int b17529;
+ public int b17530;
+ public int b17531;
+ public int b17532;
+ public int b17533;
+ public int b17534;
+ public int b17535;
+ public int b17536;
+ public int b17537;
+ public int b17538;
+ public int b17539;
+ public int b17540;
+ public int b17541;
+ public int b17542;
+ public int b17543;
+ public int b17544;
+ public int b17545;
+ public int b17546;
+ public int b17547;
+ public int b17548;
+ public int b17549;
+ public int b17550;
+ public int b17551;
+ public int b17552;
+ public int b17553;
+ public int b17554;
+ public int b17555;
+ public int b17556;
+ public int b17557;
+ public int b17558;
+ public int b17559;
+ public int b17560;
+ public int b17561;
+ public int b17562;
+ public int b17563;
+ public int b17564;
+ public int b17565;
+ public int b17566;
+ public int b17567;
+ public int b17568;
+ public int b17569;
+ public int b17570;
+ public int b17571;
+ public int b17572;
+ public int b17573;
+ public int b17574;
+ public int b17575;
+ public int b17576;
+ public int b17577;
+ public int b17578;
+ public int b17579;
+ public int b17580;
+ public int b17581;
+ public int b17582;
+ public int b17583;
+ public int b17584;
+ public int b17585;
+ public int b17586;
+ public int b17587;
+ public int b17588;
+ public int b17589;
+ public int b17590;
+ public int b17591;
+ public int b17592;
+ public int b17593;
+ public int b17594;
+ public int b17595;
+ public int b17596;
+ public int b17597;
+ public int b17598;
+ public int b17599;
+ public int b17600;
+ public int b17601;
+ public int b17602;
+ public int b17603;
+ public int b17604;
+ public int b17605;
+ public int b17606;
+ public int b17607;
+ public int b17608;
+ public int b17609;
+ public int b17610;
+ public int b17611;
+ public int b17612;
+ public int b17613;
+ public int b17614;
+ public int b17615;
+ public int b17616;
+ public int b17617;
+ public int b17618;
+ public int b17619;
+ public int b17620;
+ public int b17621;
+ public int b17622;
+ public int b17623;
+ public int b17624;
+ public int b17625;
+ public int b17626;
+ public int b17627;
+ public int b17628;
+ public int b17629;
+ public int b17630;
+ public int b17631;
+ public int b17632;
+ public int b17633;
+ public int b17634;
+ public int b17635;
+ public int b17636;
+ public int b17637;
+ public int b17638;
+ public int b17639;
+ public int b17640;
+ public int b17641;
+ public int b17642;
+ public int b17643;
+ public int b17644;
+ public int b17645;
+ public int b17646;
+ public int b17647;
+ public int b17648;
+ public int b17649;
+ public int b17650;
+ public int b17651;
+ public int b17652;
+ public int b17653;
+ public int b17654;
+ public int b17655;
+ public int b17656;
+ public int b17657;
+ public int b17658;
+ public int b17659;
+ public int b17660;
+ public int b17661;
+ public int b17662;
+ public int b17663;
+ public int b17664;
+ public int b17665;
+ public int b17666;
+ public int b17667;
+ public int b17668;
+ public int b17669;
+ public int b17670;
+ public int b17671;
+ public int b17672;
+ public int b17673;
+ public int b17674;
+ public int b17675;
+ public int b17676;
+ public int b17677;
+ public int b17678;
+ public int b17679;
+ public int b17680;
+ public int b17681;
+ public int b17682;
+ public int b17683;
+ public int b17684;
+ public int b17685;
+ public int b17686;
+ public int b17687;
+ public int b17688;
+ public int b17689;
+ public int b17690;
+ public int b17691;
+ public int b17692;
+ public int b17693;
+ public int b17694;
+ public int b17695;
+ public int b17696;
+ public int b17697;
+ public int b17698;
+ public int b17699;
+ public int b17700;
+ public int b17701;
+ public int b17702;
+ public int b17703;
+ public int b17704;
+ public int b17705;
+ public int b17706;
+ public int b17707;
+ public int b17708;
+ public int b17709;
+ public int b17710;
+ public int b17711;
+ public int b17712;
+ public int b17713;
+ public int b17714;
+ public int b17715;
+ public int b17716;
+ public int b17717;
+ public int b17718;
+ public int b17719;
+ public int b17720;
+ public int b17721;
+ public int b17722;
+ public int b17723;
+ public int b17724;
+ public int b17725;
+ public int b17726;
+ public int b17727;
+ public int b17728;
+ public int b17729;
+ public int b17730;
+ public int b17731;
+ public int b17732;
+ public int b17733;
+ public int b17734;
+ public int b17735;
+ public int b17736;
+ public int b17737;
+ public int b17738;
+ public int b17739;
+ public int b17740;
+ public int b17741;
+ public int b17742;
+ public int b17743;
+ public int b17744;
+ public int b17745;
+ public int b17746;
+ public int b17747;
+ public int b17748;
+ public int b17749;
+ public int b17750;
+ public int b17751;
+ public int b17752;
+ public int b17753;
+ public int b17754;
+ public int b17755;
+ public int b17756;
+ public int b17757;
+ public int b17758;
+ public int b17759;
+ public int b17760;
+ public int b17761;
+ public int b17762;
+ public int b17763;
+ public int b17764;
+ public int b17765;
+ public int b17766;
+ public int b17767;
+ public int b17768;
+ public int b17769;
+ public int b17770;
+ public int b17771;
+ public int b17772;
+ public int b17773;
+ public int b17774;
+ public int b17775;
+ public int b17776;
+ public int b17777;
+ public int b17778;
+ public int b17779;
+ public int b17780;
+ public int b17781;
+ public int b17782;
+ public int b17783;
+ public int b17784;
+ public int b17785;
+ public int b17786;
+ public int b17787;
+ public int b17788;
+ public int b17789;
+ public int b17790;
+ public int b17791;
+ public int b17792;
+ public int b17793;
+ public int b17794;
+ public int b17795;
+ public int b17796;
+ public int b17797;
+ public int b17798;
+ public int b17799;
+ public int b17800;
+ public int b17801;
+ public int b17802;
+ public int b17803;
+ public int b17804;
+ public int b17805;
+ public int b17806;
+ public int b17807;
+ public int b17808;
+ public int b17809;
+ public int b17810;
+ public int b17811;
+ public int b17812;
+ public int b17813;
+ public int b17814;
+ public int b17815;
+ public int b17816;
+ public int b17817;
+ public int b17818;
+ public int b17819;
+ public int b17820;
+ public int b17821;
+ public int b17822;
+ public int b17823;
+ public int b17824;
+ public int b17825;
+ public int b17826;
+ public int b17827;
+ public int b17828;
+ public int b17829;
+ public int b17830;
+ public int b17831;
+ public int b17832;
+ public int b17833;
+ public int b17834;
+ public int b17835;
+ public int b17836;
+ public int b17837;
+ public int b17838;
+ public int b17839;
+ public int b17840;
+ public int b17841;
+ public int b17842;
+ public int b17843;
+ public int b17844;
+ public int b17845;
+ public int b17846;
+ public int b17847;
+ public int b17848;
+ public int b17849;
+ public int b17850;
+ public int b17851;
+ public int b17852;
+ public int b17853;
+ public int b17854;
+ public int b17855;
+ public int b17856;
+ public int b17857;
+ public int b17858;
+ public int b17859;
+ public int b17860;
+ public int b17861;
+ public int b17862;
+ public int b17863;
+ public int b17864;
+ public int b17865;
+ public int b17866;
+ public int b17867;
+ public int b17868;
+ public int b17869;
+ public int b17870;
+ public int b17871;
+ public int b17872;
+ public int b17873;
+ public int b17874;
+ public int b17875;
+ public int b17876;
+ public int b17877;
+ public int b17878;
+ public int b17879;
+ public int b17880;
+ public int b17881;
+ public int b17882;
+ public int b17883;
+ public int b17884;
+ public int b17885;
+ public int b17886;
+ public int b17887;
+ public int b17888;
+ public int b17889;
+ public int b17890;
+ public int b17891;
+ public int b17892;
+ public int b17893;
+ public int b17894;
+ public int b17895;
+ public int b17896;
+ public int b17897;
+ public int b17898;
+ public int b17899;
+ public int b17900;
+ public int b17901;
+ public int b17902;
+ public int b17903;
+ public int b17904;
+ public int b17905;
+ public int b17906;
+ public int b17907;
+ public int b17908;
+ public int b17909;
+ public int b17910;
+ public int b17911;
+ public int b17912;
+ public int b17913;
+ public int b17914;
+ public int b17915;
+ public int b17916;
+ public int b17917;
+ public int b17918;
+ public int b17919;
+ public int b17920;
+ public int b17921;
+ public int b17922;
+ public int b17923;
+ public int b17924;
+ public int b17925;
+ public int b17926;
+ public int b17927;
+ public int b17928;
+ public int b17929;
+ public int b17930;
+ public int b17931;
+ public int b17932;
+ public int b17933;
+ public int b17934;
+ public int b17935;
+ public int b17936;
+ public int b17937;
+ public int b17938;
+ public int b17939;
+ public int b17940;
+ public int b17941;
+ public int b17942;
+ public int b17943;
+ public int b17944;
+ public int b17945;
+ public int b17946;
+ public int b17947;
+ public int b17948;
+ public int b17949;
+ public int b17950;
+ public int b17951;
+ public int b17952;
+ public int b17953;
+ public int b17954;
+ public int b17955;
+ public int b17956;
+ public int b17957;
+ public int b17958;
+ public int b17959;
+ public int b17960;
+ public int b17961;
+ public int b17962;
+ public int b17963;
+ public int b17964;
+ public int b17965;
+ public int b17966;
+ public int b17967;
+ public int b17968;
+ public int b17969;
+ public int b17970;
+ public int b17971;
+ public int b17972;
+ public int b17973;
+ public int b17974;
+ public int b17975;
+ public int b17976;
+ public int b17977;
+ public int b17978;
+ public int b17979;
+ public int b17980;
+ public int b17981;
+ public int b17982;
+ public int b17983;
+ public int b17984;
+ public int b17985;
+ public int b17986;
+ public int b17987;
+ public int b17988;
+ public int b17989;
+ public int b17990;
+ public int b17991;
+ public int b17992;
+ public int b17993;
+ public int b17994;
+ public int b17995;
+ public int b17996;
+ public int b17997;
+ public int b17998;
+ public int b17999;
+ public int b18000;
+ public int b18001;
+ public int b18002;
+ public int b18003;
+ public int b18004;
+ public int b18005;
+ public int b18006;
+ public int b18007;
+ public int b18008;
+ public int b18009;
+ public int b18010;
+ public int b18011;
+ public int b18012;
+ public int b18013;
+ public int b18014;
+ public int b18015;
+ public int b18016;
+ public int b18017;
+ public int b18018;
+ public int b18019;
+ public int b18020;
+ public int b18021;
+ public int b18022;
+ public int b18023;
+ public int b18024;
+ public int b18025;
+ public int b18026;
+ public int b18027;
+ public int b18028;
+ public int b18029;
+ public int b18030;
+ public int b18031;
+ public int b18032;
+ public int b18033;
+ public int b18034;
+ public int b18035;
+ public int b18036;
+ public int b18037;
+ public int b18038;
+ public int b18039;
+ public int b18040;
+ public int b18041;
+ public int b18042;
+ public int b18043;
+ public int b18044;
+ public int b18045;
+ public int b18046;
+ public int b18047;
+ public int b18048;
+ public int b18049;
+ public int b18050;
+ public int b18051;
+ public int b18052;
+ public int b18053;
+ public int b18054;
+ public int b18055;
+ public int b18056;
+ public int b18057;
+ public int b18058;
+ public int b18059;
+ public int b18060;
+ public int b18061;
+ public int b18062;
+ public int b18063;
+ public int b18064;
+ public int b18065;
+ public int b18066;
+ public int b18067;
+ public int b18068;
+ public int b18069;
+ public int b18070;
+ public int b18071;
+ public int b18072;
+ public int b18073;
+ public int b18074;
+ public int b18075;
+ public int b18076;
+ public int b18077;
+ public int b18078;
+ public int b18079;
+ public int b18080;
+ public int b18081;
+ public int b18082;
+ public int b18083;
+ public int b18084;
+ public int b18085;
+ public int b18086;
+ public int b18087;
+ public int b18088;
+ public int b18089;
+ public int b18090;
+ public int b18091;
+ public int b18092;
+ public int b18093;
+ public int b18094;
+ public int b18095;
+ public int b18096;
+ public int b18097;
+ public int b18098;
+ public int b18099;
+ public int b18100;
+ public int b18101;
+ public int b18102;
+ public int b18103;
+ public int b18104;
+ public int b18105;
+ public int b18106;
+ public int b18107;
+ public int b18108;
+ public int b18109;
+ public int b18110;
+ public int b18111;
+ public int b18112;
+ public int b18113;
+ public int b18114;
+ public int b18115;
+ public int b18116;
+ public int b18117;
+ public int b18118;
+ public int b18119;
+ public int b18120;
+ public int b18121;
+ public int b18122;
+ public int b18123;
+ public int b18124;
+ public int b18125;
+ public int b18126;
+ public int b18127;
+ public int b18128;
+ public int b18129;
+ public int b18130;
+ public int b18131;
+ public int b18132;
+ public int b18133;
+ public int b18134;
+ public int b18135;
+ public int b18136;
+ public int b18137;
+ public int b18138;
+ public int b18139;
+ public int b18140;
+ public int b18141;
+ public int b18142;
+ public int b18143;
+ public int b18144;
+ public int b18145;
+ public int b18146;
+ public int b18147;
+ public int b18148;
+ public int b18149;
+ public int b18150;
+ public int b18151;
+ public int b18152;
+ public int b18153;
+ public int b18154;
+ public int b18155;
+ public int b18156;
+ public int b18157;
+ public int b18158;
+ public int b18159;
+ public int b18160;
+ public int b18161;
+ public int b18162;
+ public int b18163;
+ public int b18164;
+ public int b18165;
+ public int b18166;
+ public int b18167;
+ public int b18168;
+ public int b18169;
+ public int b18170;
+ public int b18171;
+ public int b18172;
+ public int b18173;
+ public int b18174;
+ public int b18175;
+ public int b18176;
+ public int b18177;
+ public int b18178;
+ public int b18179;
+ public int b18180;
+ public int b18181;
+ public int b18182;
+ public int b18183;
+ public int b18184;
+ public int b18185;
+ public int b18186;
+ public int b18187;
+ public int b18188;
+ public int b18189;
+ public int b18190;
+ public int b18191;
+ public int b18192;
+ public int b18193;
+ public int b18194;
+ public int b18195;
+ public int b18196;
+ public int b18197;
+ public int b18198;
+ public int b18199;
+ public int b18200;
+ public int b18201;
+ public int b18202;
+ public int b18203;
+ public int b18204;
+ public int b18205;
+ public int b18206;
+ public int b18207;
+ public int b18208;
+ public int b18209;
+ public int b18210;
+ public int b18211;
+ public int b18212;
+ public int b18213;
+ public int b18214;
+ public int b18215;
+ public int b18216;
+ public int b18217;
+ public int b18218;
+ public int b18219;
+ public int b18220;
+ public int b18221;
+ public int b18222;
+ public int b18223;
+ public int b18224;
+ public int b18225;
+ public int b18226;
+ public int b18227;
+ public int b18228;
+ public int b18229;
+ public int b18230;
+ public int b18231;
+ public int b18232;
+ public int b18233;
+ public int b18234;
+ public int b18235;
+ public int b18236;
+ public int b18237;
+ public int b18238;
+ public int b18239;
+ public int b18240;
+ public int b18241;
+ public int b18242;
+ public int b18243;
+ public int b18244;
+ public int b18245;
+ public int b18246;
+ public int b18247;
+ public int b18248;
+ public int b18249;
+ public int b18250;
+ public int b18251;
+ public int b18252;
+ public int b18253;
+ public int b18254;
+ public int b18255;
+ public int b18256;
+ public int b18257;
+ public int b18258;
+ public int b18259;
+ public int b18260;
+ public int b18261;
+ public int b18262;
+ public int b18263;
+ public int b18264;
+ public int b18265;
+ public int b18266;
+ public int b18267;
+ public int b18268;
+ public int b18269;
+ public int b18270;
+ public int b18271;
+ public int b18272;
+ public int b18273;
+ public int b18274;
+ public int b18275;
+ public int b18276;
+ public int b18277;
+ public int b18278;
+ public int b18279;
+ public int b18280;
+ public int b18281;
+ public int b18282;
+ public int b18283;
+ public int b18284;
+ public int b18285;
+ public int b18286;
+ public int b18287;
+ public int b18288;
+ public int b18289;
+ public int b18290;
+ public int b18291;
+ public int b18292;
+ public int b18293;
+ public int b18294;
+ public int b18295;
+ public int b18296;
+ public int b18297;
+ public int b18298;
+ public int b18299;
+ public int b18300;
+ public int b18301;
+ public int b18302;
+ public int b18303;
+ public int b18304;
+ public int b18305;
+ public int b18306;
+ public int b18307;
+ public int b18308;
+ public int b18309;
+ public int b18310;
+ public int b18311;
+ public int b18312;
+ public int b18313;
+ public int b18314;
+ public int b18315;
+ public int b18316;
+ public int b18317;
+ public int b18318;
+ public int b18319;
+ public int b18320;
+ public int b18321;
+ public int b18322;
+ public int b18323;
+ public int b18324;
+ public int b18325;
+ public int b18326;
+ public int b18327;
+ public int b18328;
+ public int b18329;
+ public int b18330;
+ public int b18331;
+ public int b18332;
+ public int b18333;
+ public int b18334;
+ public int b18335;
+ public int b18336;
+ public int b18337;
+ public int b18338;
+ public int b18339;
+ public int b18340;
+ public int b18341;
+ public int b18342;
+ public int b18343;
+ public int b18344;
+ public int b18345;
+ public int b18346;
+ public int b18347;
+ public int b18348;
+ public int b18349;
+ public int b18350;
+ public int b18351;
+ public int b18352;
+ public int b18353;
+ public int b18354;
+ public int b18355;
+ public int b18356;
+ public int b18357;
+ public int b18358;
+ public int b18359;
+ public int b18360;
+ public int b18361;
+ public int b18362;
+ public int b18363;
+ public int b18364;
+ public int b18365;
+ public int b18366;
+ public int b18367;
+ public int b18368;
+ public int b18369;
+ public int b18370;
+ public int b18371;
+ public int b18372;
+ public int b18373;
+ public int b18374;
+ public int b18375;
+ public int b18376;
+ public int b18377;
+ public int b18378;
+ public int b18379;
+ public int b18380;
+ public int b18381;
+ public int b18382;
+ public int b18383;
+ public int b18384;
+ public int b18385;
+ public int b18386;
+ public int b18387;
+ public int b18388;
+ public int b18389;
+ public int b18390;
+ public int b18391;
+ public int b18392;
+ public int b18393;
+ public int b18394;
+ public int b18395;
+ public int b18396;
+ public int b18397;
+ public int b18398;
+ public int b18399;
+ public int b18400;
+ public int b18401;
+ public int b18402;
+ public int b18403;
+ public int b18404;
+ public int b18405;
+ public int b18406;
+ public int b18407;
+ public int b18408;
+ public int b18409;
+ public int b18410;
+ public int b18411;
+ public int b18412;
+ public int b18413;
+ public int b18414;
+ public int b18415;
+ public int b18416;
+ public int b18417;
+ public int b18418;
+ public int b18419;
+ public int b18420;
+ public int b18421;
+ public int b18422;
+ public int b18423;
+ public int b18424;
+ public int b18425;
+ public int b18426;
+ public int b18427;
+ public int b18428;
+ public int b18429;
+ public int b18430;
+ public int b18431;
+ public int b18432;
+ public int b18433;
+ public int b18434;
+ public int b18435;
+ public int b18436;
+ public int b18437;
+ public int b18438;
+ public int b18439;
+ public int b18440;
+ public int b18441;
+ public int b18442;
+ public int b18443;
+ public int b18444;
+ public int b18445;
+ public int b18446;
+ public int b18447;
+ public int b18448;
+ public int b18449;
+ public int b18450;
+ public int b18451;
+ public int b18452;
+ public int b18453;
+ public int b18454;
+ public int b18455;
+ public int b18456;
+ public int b18457;
+ public int b18458;
+ public int b18459;
+ public int b18460;
+ public int b18461;
+ public int b18462;
+ public int b18463;
+ public int b18464;
+ public int b18465;
+ public int b18466;
+ public int b18467;
+ public int b18468;
+ public int b18469;
+ public int b18470;
+ public int b18471;
+ public int b18472;
+ public int b18473;
+ public int b18474;
+ public int b18475;
+ public int b18476;
+ public int b18477;
+ public int b18478;
+ public int b18479;
+ public int b18480;
+ public int b18481;
+ public int b18482;
+ public int b18483;
+ public int b18484;
+ public int b18485;
+ public int b18486;
+ public int b18487;
+ public int b18488;
+ public int b18489;
+ public int b18490;
+ public int b18491;
+ public int b18492;
+ public int b18493;
+ public int b18494;
+ public int b18495;
+ public int b18496;
+ public int b18497;
+ public int b18498;
+ public int b18499;
+ public int b18500;
+ public int b18501;
+ public int b18502;
+ public int b18503;
+ public int b18504;
+ public int b18505;
+ public int b18506;
+ public int b18507;
+ public int b18508;
+ public int b18509;
+ public int b18510;
+ public int b18511;
+ public int b18512;
+ public int b18513;
+ public int b18514;
+ public int b18515;
+ public int b18516;
+ public int b18517;
+ public int b18518;
+ public int b18519;
+ public int b18520;
+ public int b18521;
+ public int b18522;
+ public int b18523;
+ public int b18524;
+ public int b18525;
+ public int b18526;
+ public int b18527;
+ public int b18528;
+ public int b18529;
+ public int b18530;
+ public int b18531;
+ public int b18532;
+ public int b18533;
+ public int b18534;
+ public int b18535;
+ public int b18536;
+ public int b18537;
+ public int b18538;
+ public int b18539;
+ public int b18540;
+ public int b18541;
+ public int b18542;
+ public int b18543;
+ public int b18544;
+ public int b18545;
+ public int b18546;
+ public int b18547;
+ public int b18548;
+ public int b18549;
+ public int b18550;
+ public int b18551;
+ public int b18552;
+ public int b18553;
+ public int b18554;
+ public int b18555;
+ public int b18556;
+ public int b18557;
+ public int b18558;
+ public int b18559;
+ public int b18560;
+ public int b18561;
+ public int b18562;
+ public int b18563;
+ public int b18564;
+ public int b18565;
+ public int b18566;
+ public int b18567;
+ public int b18568;
+ public int b18569;
+ public int b18570;
+ public int b18571;
+ public int b18572;
+ public int b18573;
+ public int b18574;
+ public int b18575;
+ public int b18576;
+ public int b18577;
+ public int b18578;
+ public int b18579;
+ public int b18580;
+ public int b18581;
+ public int b18582;
+ public int b18583;
+ public int b18584;
+ public int b18585;
+ public int b18586;
+ public int b18587;
+ public int b18588;
+ public int b18589;
+ public int b18590;
+ public int b18591;
+ public int b18592;
+ public int b18593;
+ public int b18594;
+ public int b18595;
+ public int b18596;
+ public int b18597;
+ public int b18598;
+ public int b18599;
+ public int b18600;
+ public int b18601;
+ public int b18602;
+ public int b18603;
+ public int b18604;
+ public int b18605;
+ public int b18606;
+ public int b18607;
+ public int b18608;
+ public int b18609;
+ public int b18610;
+ public int b18611;
+ public int b18612;
+ public int b18613;
+ public int b18614;
+ public int b18615;
+ public int b18616;
+ public int b18617;
+ public int b18618;
+ public int b18619;
+ public int b18620;
+ public int b18621;
+ public int b18622;
+ public int b18623;
+ public int b18624;
+ public int b18625;
+ public int b18626;
+ public int b18627;
+ public int b18628;
+ public int b18629;
+ public int b18630;
+ public int b18631;
+ public int b18632;
+ public int b18633;
+ public int b18634;
+ public int b18635;
+ public int b18636;
+ public int b18637;
+ public int b18638;
+ public int b18639;
+ public int b18640;
+ public int b18641;
+ public int b18642;
+ public int b18643;
+ public int b18644;
+ public int b18645;
+ public int b18646;
+ public int b18647;
+ public int b18648;
+ public int b18649;
+ public int b18650;
+ public int b18651;
+ public int b18652;
+ public int b18653;
+ public int b18654;
+ public int b18655;
+ public int b18656;
+ public int b18657;
+ public int b18658;
+ public int b18659;
+ public int b18660;
+ public int b18661;
+ public int b18662;
+ public int b18663;
+ public int b18664;
+ public int b18665;
+ public int b18666;
+ public int b18667;
+ public int b18668;
+ public int b18669;
+ public int b18670;
+ public int b18671;
+ public int b18672;
+ public int b18673;
+ public int b18674;
+ public int b18675;
+ public int b18676;
+ public int b18677;
+ public int b18678;
+ public int b18679;
+ public int b18680;
+ public int b18681;
+ public int b18682;
+ public int b18683;
+ public int b18684;
+ public int b18685;
+ public int b18686;
+ public int b18687;
+ public int b18688;
+ public int b18689;
+ public int b18690;
+ public int b18691;
+ public int b18692;
+ public int b18693;
+ public int b18694;
+ public int b18695;
+ public int b18696;
+ public int b18697;
+ public int b18698;
+ public int b18699;
+ public int b18700;
+ public int b18701;
+ public int b18702;
+ public int b18703;
+ public int b18704;
+ public int b18705;
+ public int b18706;
+ public int b18707;
+ public int b18708;
+ public int b18709;
+ public int b18710;
+ public int b18711;
+ public int b18712;
+ public int b18713;
+ public int b18714;
+ public int b18715;
+ public int b18716;
+ public int b18717;
+ public int b18718;
+ public int b18719;
+ public int b18720;
+ public int b18721;
+ public int b18722;
+ public int b18723;
+ public int b18724;
+ public int b18725;
+ public int b18726;
+ public int b18727;
+ public int b18728;
+ public int b18729;
+ public int b18730;
+ public int b18731;
+ public int b18732;
+ public int b18733;
+ public int b18734;
+ public int b18735;
+ public int b18736;
+ public int b18737;
+ public int b18738;
+ public int b18739;
+ public int b18740;
+ public int b18741;
+ public int b18742;
+ public int b18743;
+ public int b18744;
+ public int b18745;
+ public int b18746;
+ public int b18747;
+ public int b18748;
+ public int b18749;
+ public int b18750;
+ public int b18751;
+ public int b18752;
+ public int b18753;
+ public int b18754;
+ public int b18755;
+ public int b18756;
+ public int b18757;
+ public int b18758;
+ public int b18759;
+ public int b18760;
+ public int b18761;
+ public int b18762;
+ public int b18763;
+ public int b18764;
+ public int b18765;
+ public int b18766;
+ public int b18767;
+ public int b18768;
+ public int b18769;
+ public int b18770;
+ public int b18771;
+ public int b18772;
+ public int b18773;
+ public int b18774;
+ public int b18775;
+ public int b18776;
+ public int b18777;
+ public int b18778;
+ public int b18779;
+ public int b18780;
+ public int b18781;
+ public int b18782;
+ public int b18783;
+ public int b18784;
+ public int b18785;
+ public int b18786;
+ public int b18787;
+ public int b18788;
+ public int b18789;
+ public int b18790;
+ public int b18791;
+ public int b18792;
+ public int b18793;
+ public int b18794;
+ public int b18795;
+ public int b18796;
+ public int b18797;
+ public int b18798;
+ public int b18799;
+ public int b18800;
+ public int b18801;
+ public int b18802;
+ public int b18803;
+ public int b18804;
+ public int b18805;
+ public int b18806;
+ public int b18807;
+ public int b18808;
+ public int b18809;
+ public int b18810;
+ public int b18811;
+ public int b18812;
+ public int b18813;
+ public int b18814;
+ public int b18815;
+ public int b18816;
+ public int b18817;
+ public int b18818;
+ public int b18819;
+ public int b18820;
+ public int b18821;
+ public int b18822;
+ public int b18823;
+ public int b18824;
+ public int b18825;
+ public int b18826;
+ public int b18827;
+ public int b18828;
+ public int b18829;
+ public int b18830;
+ public int b18831;
+ public int b18832;
+ public int b18833;
+ public int b18834;
+ public int b18835;
+ public int b18836;
+ public int b18837;
+ public int b18838;
+ public int b18839;
+ public int b18840;
+ public int b18841;
+ public int b18842;
+ public int b18843;
+ public int b18844;
+ public int b18845;
+ public int b18846;
+ public int b18847;
+ public int b18848;
+ public int b18849;
+ public int b18850;
+ public int b18851;
+ public int b18852;
+ public int b18853;
+ public int b18854;
+ public int b18855;
+ public int b18856;
+ public int b18857;
+ public int b18858;
+ public int b18859;
+ public int b18860;
+ public int b18861;
+ public int b18862;
+ public int b18863;
+ public int b18864;
+ public int b18865;
+ public int b18866;
+ public int b18867;
+ public int b18868;
+ public int b18869;
+ public int b18870;
+ public int b18871;
+ public int b18872;
+ public int b18873;
+ public int b18874;
+ public int b18875;
+ public int b18876;
+ public int b18877;
+ public int b18878;
+ public int b18879;
+ public int b18880;
+ public int b18881;
+ public int b18882;
+ public int b18883;
+ public int b18884;
+ public int b18885;
+ public int b18886;
+ public int b18887;
+ public int b18888;
+ public int b18889;
+ public int b18890;
+ public int b18891;
+ public int b18892;
+ public int b18893;
+ public int b18894;
+ public int b18895;
+ public int b18896;
+ public int b18897;
+ public int b18898;
+ public int b18899;
+ public int b18900;
+ public int b18901;
+ public int b18902;
+ public int b18903;
+ public int b18904;
+ public int b18905;
+ public int b18906;
+ public int b18907;
+ public int b18908;
+ public int b18909;
+ public int b18910;
+ public int b18911;
+ public int b18912;
+ public int b18913;
+ public int b18914;
+ public int b18915;
+ public int b18916;
+ public int b18917;
+ public int b18918;
+ public int b18919;
+ public int b18920;
+ public int b18921;
+ public int b18922;
+ public int b18923;
+ public int b18924;
+ public int b18925;
+ public int b18926;
+ public int b18927;
+ public int b18928;
+ public int b18929;
+ public int b18930;
+ public int b18931;
+ public int b18932;
+ public int b18933;
+ public int b18934;
+ public int b18935;
+ public int b18936;
+ public int b18937;
+ public int b18938;
+ public int b18939;
+ public int b18940;
+ public int b18941;
+ public int b18942;
+ public int b18943;
+ public int b18944;
+ public int b18945;
+ public int b18946;
+ public int b18947;
+ public int b18948;
+ public int b18949;
+ public int b18950;
+ public int b18951;
+ public int b18952;
+ public int b18953;
+ public int b18954;
+ public int b18955;
+ public int b18956;
+ public int b18957;
+ public int b18958;
+ public int b18959;
+ public int b18960;
+ public int b18961;
+ public int b18962;
+ public int b18963;
+ public int b18964;
+ public int b18965;
+ public int b18966;
+ public int b18967;
+ public int b18968;
+ public int b18969;
+ public int b18970;
+ public int b18971;
+ public int b18972;
+ public int b18973;
+ public int b18974;
+ public int b18975;
+ public int b18976;
+ public int b18977;
+ public int b18978;
+ public int b18979;
+ public int b18980;
+ public int b18981;
+ public int b18982;
+ public int b18983;
+ public int b18984;
+ public int b18985;
+ public int b18986;
+ public int b18987;
+ public int b18988;
+ public int b18989;
+ public int b18990;
+ public int b18991;
+ public int b18992;
+ public int b18993;
+ public int b18994;
+ public int b18995;
+ public int b18996;
+ public int b18997;
+ public int b18998;
+ public int b18999;
+ public int b19000;
+ public int b19001;
+ public int b19002;
+ public int b19003;
+ public int b19004;
+ public int b19005;
+ public int b19006;
+ public int b19007;
+ public int b19008;
+ public int b19009;
+ public int b19010;
+ public int b19011;
+ public int b19012;
+ public int b19013;
+ public int b19014;
+ public int b19015;
+ public int b19016;
+ public int b19017;
+ public int b19018;
+ public int b19019;
+ public int b19020;
+ public int b19021;
+ public int b19022;
+ public int b19023;
+ public int b19024;
+ public int b19025;
+ public int b19026;
+ public int b19027;
+ public int b19028;
+ public int b19029;
+ public int b19030;
+ public int b19031;
+ public int b19032;
+ public int b19033;
+ public int b19034;
+ public int b19035;
+ public int b19036;
+ public int b19037;
+ public int b19038;
+ public int b19039;
+ public int b19040;
+ public int b19041;
+ public int b19042;
+ public int b19043;
+ public int b19044;
+ public int b19045;
+ public int b19046;
+ public int b19047;
+ public int b19048;
+ public int b19049;
+ public int b19050;
+ public int b19051;
+ public int b19052;
+ public int b19053;
+ public int b19054;
+ public int b19055;
+ public int b19056;
+ public int b19057;
+ public int b19058;
+ public int b19059;
+ public int b19060;
+ public int b19061;
+ public int b19062;
+ public int b19063;
+ public int b19064;
+ public int b19065;
+ public int b19066;
+ public int b19067;
+ public int b19068;
+ public int b19069;
+ public int b19070;
+ public int b19071;
+ public int b19072;
+ public int b19073;
+ public int b19074;
+ public int b19075;
+ public int b19076;
+ public int b19077;
+ public int b19078;
+ public int b19079;
+ public int b19080;
+ public int b19081;
+ public int b19082;
+ public int b19083;
+ public int b19084;
+ public int b19085;
+ public int b19086;
+ public int b19087;
+ public int b19088;
+ public int b19089;
+ public int b19090;
+ public int b19091;
+ public int b19092;
+ public int b19093;
+ public int b19094;
+ public int b19095;
+ public int b19096;
+ public int b19097;
+ public int b19098;
+ public int b19099;
+ public int b19100;
+ public int b19101;
+ public int b19102;
+ public int b19103;
+ public int b19104;
+ public int b19105;
+ public int b19106;
+ public int b19107;
+ public int b19108;
+ public int b19109;
+ public int b19110;
+ public int b19111;
+ public int b19112;
+ public int b19113;
+ public int b19114;
+ public int b19115;
+ public int b19116;
+ public int b19117;
+ public int b19118;
+ public int b19119;
+ public int b19120;
+ public int b19121;
+ public int b19122;
+ public int b19123;
+ public int b19124;
+ public int b19125;
+ public int b19126;
+ public int b19127;
+ public int b19128;
+ public int b19129;
+ public int b19130;
+ public int b19131;
+ public int b19132;
+ public int b19133;
+ public int b19134;
+ public int b19135;
+ public int b19136;
+ public int b19137;
+ public int b19138;
+ public int b19139;
+ public int b19140;
+ public int b19141;
+ public int b19142;
+ public int b19143;
+ public int b19144;
+ public int b19145;
+ public int b19146;
+ public int b19147;
+ public int b19148;
+ public int b19149;
+ public int b19150;
+ public int b19151;
+ public int b19152;
+ public int b19153;
+ public int b19154;
+ public int b19155;
+ public int b19156;
+ public int b19157;
+ public int b19158;
+ public int b19159;
+ public int b19160;
+ public int b19161;
+ public int b19162;
+ public int b19163;
+ public int b19164;
+ public int b19165;
+ public int b19166;
+ public int b19167;
+ public int b19168;
+ public int b19169;
+ public int b19170;
+ public int b19171;
+ public int b19172;
+ public int b19173;
+ public int b19174;
+ public int b19175;
+ public int b19176;
+ public int b19177;
+ public int b19178;
+ public int b19179;
+ public int b19180;
+ public int b19181;
+ public int b19182;
+ public int b19183;
+ public int b19184;
+ public int b19185;
+ public int b19186;
+ public int b19187;
+ public int b19188;
+ public int b19189;
+ public int b19190;
+ public int b19191;
+ public int b19192;
+ public int b19193;
+ public int b19194;
+ public int b19195;
+ public int b19196;
+ public int b19197;
+ public int b19198;
+ public int b19199;
+ public int b19200;
+ public int b19201;
+ public int b19202;
+ public int b19203;
+ public int b19204;
+ public int b19205;
+ public int b19206;
+ public int b19207;
+ public int b19208;
+ public int b19209;
+ public int b19210;
+ public int b19211;
+ public int b19212;
+ public int b19213;
+ public int b19214;
+ public int b19215;
+ public int b19216;
+ public int b19217;
+ public int b19218;
+ public int b19219;
+ public int b19220;
+ public int b19221;
+ public int b19222;
+ public int b19223;
+ public int b19224;
+ public int b19225;
+ public int b19226;
+ public int b19227;
+ public int b19228;
+ public int b19229;
+ public int b19230;
+ public int b19231;
+ public int b19232;
+ public int b19233;
+ public int b19234;
+ public int b19235;
+ public int b19236;
+ public int b19237;
+ public int b19238;
+ public int b19239;
+ public int b19240;
+ public int b19241;
+ public int b19242;
+ public int b19243;
+ public int b19244;
+ public int b19245;
+ public int b19246;
+ public int b19247;
+ public int b19248;
+ public int b19249;
+ public int b19250;
+ public int b19251;
+ public int b19252;
+ public int b19253;
+ public int b19254;
+ public int b19255;
+ public int b19256;
+ public int b19257;
+ public int b19258;
+ public int b19259;
+ public int b19260;
+ public int b19261;
+ public int b19262;
+ public int b19263;
+ public int b19264;
+ public int b19265;
+ public int b19266;
+ public int b19267;
+ public int b19268;
+ public int b19269;
+ public int b19270;
+ public int b19271;
+ public int b19272;
+ public int b19273;
+ public int b19274;
+ public int b19275;
+ public int b19276;
+ public int b19277;
+ public int b19278;
+ public int b19279;
+ public int b19280;
+ public int b19281;
+ public int b19282;
+ public int b19283;
+ public int b19284;
+ public int b19285;
+ public int b19286;
+ public int b19287;
+ public int b19288;
+ public int b19289;
+ public int b19290;
+ public int b19291;
+ public int b19292;
+ public int b19293;
+ public int b19294;
+ public int b19295;
+ public int b19296;
+ public int b19297;
+ public int b19298;
+ public int b19299;
+ public int b19300;
+ public int b19301;
+ public int b19302;
+ public int b19303;
+ public int b19304;
+ public int b19305;
+ public int b19306;
+ public int b19307;
+ public int b19308;
+ public int b19309;
+ public int b19310;
+ public int b19311;
+ public int b19312;
+ public int b19313;
+ public int b19314;
+ public int b19315;
+ public int b19316;
+ public int b19317;
+ public int b19318;
+ public int b19319;
+ public int b19320;
+ public int b19321;
+ public int b19322;
+ public int b19323;
+ public int b19324;
+ public int b19325;
+ public int b19326;
+ public int b19327;
+ public int b19328;
+ public int b19329;
+ public int b19330;
+ public int b19331;
+ public int b19332;
+ public int b19333;
+ public int b19334;
+ public int b19335;
+ public int b19336;
+ public int b19337;
+ public int b19338;
+ public int b19339;
+ public int b19340;
+ public int b19341;
+ public int b19342;
+ public int b19343;
+ public int b19344;
+ public int b19345;
+ public int b19346;
+ public int b19347;
+ public int b19348;
+ public int b19349;
+ public int b19350;
+ public int b19351;
+ public int b19352;
+ public int b19353;
+ public int b19354;
+ public int b19355;
+ public int b19356;
+ public int b19357;
+ public int b19358;
+ public int b19359;
+ public int b19360;
+ public int b19361;
+ public int b19362;
+ public int b19363;
+ public int b19364;
+ public int b19365;
+ public int b19366;
+ public int b19367;
+ public int b19368;
+ public int b19369;
+ public int b19370;
+ public int b19371;
+ public int b19372;
+ public int b19373;
+ public int b19374;
+ public int b19375;
+ public int b19376;
+ public int b19377;
+ public int b19378;
+ public int b19379;
+ public int b19380;
+ public int b19381;
+ public int b19382;
+ public int b19383;
+ public int b19384;
+ public int b19385;
+ public int b19386;
+ public int b19387;
+ public int b19388;
+ public int b19389;
+ public int b19390;
+ public int b19391;
+ public int b19392;
+ public int b19393;
+ public int b19394;
+ public int b19395;
+ public int b19396;
+ public int b19397;
+ public int b19398;
+ public int b19399;
+ public int b19400;
+ public int b19401;
+ public int b19402;
+ public int b19403;
+ public int b19404;
+ public int b19405;
+ public int b19406;
+ public int b19407;
+ public int b19408;
+ public int b19409;
+ public int b19410;
+ public int b19411;
+ public int b19412;
+ public int b19413;
+ public int b19414;
+ public int b19415;
+ public int b19416;
+ public int b19417;
+ public int b19418;
+ public int b19419;
+ public int b19420;
+ public int b19421;
+ public int b19422;
+ public int b19423;
+ public int b19424;
+ public int b19425;
+ public int b19426;
+ public int b19427;
+ public int b19428;
+ public int b19429;
+ public int b19430;
+ public int b19431;
+ public int b19432;
+ public int b19433;
+ public int b19434;
+ public int b19435;
+ public int b19436;
+ public int b19437;
+ public int b19438;
+ public int b19439;
+ public int b19440;
+ public int b19441;
+ public int b19442;
+ public int b19443;
+ public int b19444;
+ public int b19445;
+ public int b19446;
+ public int b19447;
+ public int b19448;
+ public int b19449;
+ public int b19450;
+ public int b19451;
+ public int b19452;
+ public int b19453;
+ public int b19454;
+ public int b19455;
+ public int b19456;
+ public int b19457;
+ public int b19458;
+ public int b19459;
+ public int b19460;
+ public int b19461;
+ public int b19462;
+ public int b19463;
+ public int b19464;
+ public int b19465;
+ public int b19466;
+ public int b19467;
+ public int b19468;
+ public int b19469;
+ public int b19470;
+ public int b19471;
+ public int b19472;
+ public int b19473;
+ public int b19474;
+ public int b19475;
+ public int b19476;
+ public int b19477;
+ public int b19478;
+ public int b19479;
+ public int b19480;
+ public int b19481;
+ public int b19482;
+ public int b19483;
+ public int b19484;
+ public int b19485;
+ public int b19486;
+ public int b19487;
+ public int b19488;
+ public int b19489;
+ public int b19490;
+ public int b19491;
+ public int b19492;
+ public int b19493;
+ public int b19494;
+ public int b19495;
+ public int b19496;
+ public int b19497;
+ public int b19498;
+ public int b19499;
+ public int b19500;
+ public int b19501;
+ public int b19502;
+ public int b19503;
+ public int b19504;
+ public int b19505;
+ public int b19506;
+ public int b19507;
+ public int b19508;
+ public int b19509;
+ public int b19510;
+ public int b19511;
+ public int b19512;
+ public int b19513;
+ public int b19514;
+ public int b19515;
+ public int b19516;
+ public int b19517;
+ public int b19518;
+ public int b19519;
+ public int b19520;
+ public int b19521;
+ public int b19522;
+ public int b19523;
+ public int b19524;
+ public int b19525;
+ public int b19526;
+ public int b19527;
+ public int b19528;
+ public int b19529;
+ public int b19530;
+ public int b19531;
+ public int b19532;
+ public int b19533;
+ public int b19534;
+ public int b19535;
+ public int b19536;
+ public int b19537;
+ public int b19538;
+ public int b19539;
+ public int b19540;
+ public int b19541;
+ public int b19542;
+ public int b19543;
+ public int b19544;
+ public int b19545;
+ public int b19546;
+ public int b19547;
+ public int b19548;
+ public int b19549;
+ public int b19550;
+ public int b19551;
+ public int b19552;
+ public int b19553;
+ public int b19554;
+ public int b19555;
+ public int b19556;
+ public int b19557;
+ public int b19558;
+ public int b19559;
+ public int b19560;
+ public int b19561;
+ public int b19562;
+ public int b19563;
+ public int b19564;
+ public int b19565;
+ public int b19566;
+ public int b19567;
+ public int b19568;
+ public int b19569;
+ public int b19570;
+ public int b19571;
+ public int b19572;
+ public int b19573;
+ public int b19574;
+ public int b19575;
+ public int b19576;
+ public int b19577;
+ public int b19578;
+ public int b19579;
+ public int b19580;
+ public int b19581;
+ public int b19582;
+ public int b19583;
+ public int b19584;
+ public int b19585;
+ public int b19586;
+ public int b19587;
+ public int b19588;
+ public int b19589;
+ public int b19590;
+ public int b19591;
+ public int b19592;
+ public int b19593;
+ public int b19594;
+ public int b19595;
+ public int b19596;
+ public int b19597;
+ public int b19598;
+ public int b19599;
+ public int b19600;
+ public int b19601;
+ public int b19602;
+ public int b19603;
+ public int b19604;
+ public int b19605;
+ public int b19606;
+ public int b19607;
+ public int b19608;
+ public int b19609;
+ public int b19610;
+ public int b19611;
+ public int b19612;
+ public int b19613;
+ public int b19614;
+ public int b19615;
+ public int b19616;
+ public int b19617;
+ public int b19618;
+ public int b19619;
+ public int b19620;
+ public int b19621;
+ public int b19622;
+ public int b19623;
+ public int b19624;
+ public int b19625;
+ public int b19626;
+ public int b19627;
+ public int b19628;
+ public int b19629;
+ public int b19630;
+ public int b19631;
+ public int b19632;
+ public int b19633;
+ public int b19634;
+ public int b19635;
+ public int b19636;
+ public int b19637;
+ public int b19638;
+ public int b19639;
+ public int b19640;
+ public int b19641;
+ public int b19642;
+ public int b19643;
+ public int b19644;
+ public int b19645;
+ public int b19646;
+ public int b19647;
+ public int b19648;
+ public int b19649;
+ public int b19650;
+ public int b19651;
+ public int b19652;
+ public int b19653;
+ public int b19654;
+ public int b19655;
+ public int b19656;
+ public int b19657;
+ public int b19658;
+ public int b19659;
+ public int b19660;
+ public int b19661;
+ public int b19662;
+ public int b19663;
+ public int b19664;
+ public int b19665;
+ public int b19666;
+ public int b19667;
+ public int b19668;
+ public int b19669;
+ public int b19670;
+ public int b19671;
+ public int b19672;
+ public int b19673;
+ public int b19674;
+ public int b19675;
+ public int b19676;
+ public int b19677;
+ public int b19678;
+ public int b19679;
+ public int b19680;
+ public int b19681;
+ public int b19682;
+ public int b19683;
+ public int b19684;
+ public int b19685;
+ public int b19686;
+ public int b19687;
+ public int b19688;
+ public int b19689;
+ public int b19690;
+ public int b19691;
+ public int b19692;
+ public int b19693;
+ public int b19694;
+ public int b19695;
+ public int b19696;
+ public int b19697;
+ public int b19698;
+ public int b19699;
+ public int b19700;
+ public int b19701;
+ public int b19702;
+ public int b19703;
+ public int b19704;
+ public int b19705;
+ public int b19706;
+ public int b19707;
+ public int b19708;
+ public int b19709;
+ public int b19710;
+ public int b19711;
+ public int b19712;
+ public int b19713;
+ public int b19714;
+ public int b19715;
+ public int b19716;
+ public int b19717;
+ public int b19718;
+ public int b19719;
+ public int b19720;
+ public int b19721;
+ public int b19722;
+ public int b19723;
+ public int b19724;
+ public int b19725;
+ public int b19726;
+ public int b19727;
+ public int b19728;
+ public int b19729;
+ public int b19730;
+ public int b19731;
+ public int b19732;
+ public int b19733;
+ public int b19734;
+ public int b19735;
+ public int b19736;
+ public int b19737;
+ public int b19738;
+ public int b19739;
+ public int b19740;
+ public int b19741;
+ public int b19742;
+ public int b19743;
+ public int b19744;
+ public int b19745;
+ public int b19746;
+ public int b19747;
+ public int b19748;
+ public int b19749;
+ public int b19750;
+ public int b19751;
+ public int b19752;
+ public int b19753;
+ public int b19754;
+ public int b19755;
+ public int b19756;
+ public int b19757;
+ public int b19758;
+ public int b19759;
+ public int b19760;
+ public int b19761;
+ public int b19762;
+ public int b19763;
+ public int b19764;
+ public int b19765;
+ public int b19766;
+ public int b19767;
+ public int b19768;
+ public int b19769;
+ public int b19770;
+ public int b19771;
+ public int b19772;
+ public int b19773;
+ public int b19774;
+ public int b19775;
+ public int b19776;
+ public int b19777;
+ public int b19778;
+ public int b19779;
+ public int b19780;
+ public int b19781;
+ public int b19782;
+ public int b19783;
+ public int b19784;
+ public int b19785;
+ public int b19786;
+ public int b19787;
+ public int b19788;
+ public int b19789;
+ public int b19790;
+ public int b19791;
+ public int b19792;
+ public int b19793;
+ public int b19794;
+ public int b19795;
+ public int b19796;
+ public int b19797;
+ public int b19798;
+ public int b19799;
+ public int b19800;
+ public int b19801;
+ public int b19802;
+ public int b19803;
+ public int b19804;
+ public int b19805;
+ public int b19806;
+ public int b19807;
+ public int b19808;
+ public int b19809;
+ public int b19810;
+ public int b19811;
+ public int b19812;
+ public int b19813;
+ public int b19814;
+ public int b19815;
+ public int b19816;
+ public int b19817;
+ public int b19818;
+ public int b19819;
+ public int b19820;
+ public int b19821;
+ public int b19822;
+ public int b19823;
+ public int b19824;
+ public int b19825;
+ public int b19826;
+ public int b19827;
+ public int b19828;
+ public int b19829;
+ public int b19830;
+ public int b19831;
+ public int b19832;
+ public int b19833;
+ public int b19834;
+ public int b19835;
+ public int b19836;
+ public int b19837;
+ public int b19838;
+ public int b19839;
+ public int b19840;
+ public int b19841;
+ public int b19842;
+ public int b19843;
+ public int b19844;
+ public int b19845;
+ public int b19846;
+ public int b19847;
+ public int b19848;
+ public int b19849;
+ public int b19850;
+ public int b19851;
+ public int b19852;
+ public int b19853;
+ public int b19854;
+ public int b19855;
+ public int b19856;
+ public int b19857;
+ public int b19858;
+ public int b19859;
+ public int b19860;
+ public int b19861;
+ public int b19862;
+ public int b19863;
+ public int b19864;
+ public int b19865;
+ public int b19866;
+ public int b19867;
+ public int b19868;
+ public int b19869;
+ public int b19870;
+ public int b19871;
+ public int b19872;
+ public int b19873;
+ public int b19874;
+ public int b19875;
+ public int b19876;
+ public int b19877;
+ public int b19878;
+ public int b19879;
+ public int b19880;
+ public int b19881;
+ public int b19882;
+ public int b19883;
+ public int b19884;
+ public int b19885;
+ public int b19886;
+ public int b19887;
+ public int b19888;
+ public int b19889;
+ public int b19890;
+ public int b19891;
+ public int b19892;
+ public int b19893;
+ public int b19894;
+ public int b19895;
+ public int b19896;
+ public int b19897;
+ public int b19898;
+ public int b19899;
+ public int b19900;
+ public int b19901;
+ public int b19902;
+ public int b19903;
+ public int b19904;
+ public int b19905;
+ public int b19906;
+ public int b19907;
+ public int b19908;
+ public int b19909;
+ public int b19910;
+ public int b19911;
+ public int b19912;
+ public int b19913;
+ public int b19914;
+ public int b19915;
+ public int b19916;
+ public int b19917;
+ public int b19918;
+ public int b19919;
+ public int b19920;
+ public int b19921;
+ public int b19922;
+ public int b19923;
+ public int b19924;
+ public int b19925;
+ public int b19926;
+ public int b19927;
+ public int b19928;
+ public int b19929;
+ public int b19930;
+ public int b19931;
+ public int b19932;
+ public int b19933;
+ public int b19934;
+ public int b19935;
+ public int b19936;
+ public int b19937;
+ public int b19938;
+ public int b19939;
+ public int b19940;
+ public int b19941;
+ public int b19942;
+ public int b19943;
+ public int b19944;
+ public int b19945;
+ public int b19946;
+ public int b19947;
+ public int b19948;
+ public int b19949;
+ public int b19950;
+ public int b19951;
+ public int b19952;
+ public int b19953;
+ public int b19954;
+ public int b19955;
+ public int b19956;
+ public int b19957;
+ public int b19958;
+ public int b19959;
+ public int b19960;
+ public int b19961;
+ public int b19962;
+ public int b19963;
+ public int b19964;
+ public int b19965;
+ public int b19966;
+ public int b19967;
+ public int b19968;
+ public int b19969;
+ public int b19970;
+ public int b19971;
+ public int b19972;
+ public int b19973;
+ public int b19974;
+ public int b19975;
+ public int b19976;
+ public int b19977;
+ public int b19978;
+ public int b19979;
+ public int b19980;
+ public int b19981;
+ public int b19982;
+ public int b19983;
+ public int b19984;
+ public int b19985;
+ public int b19986;
+ public int b19987;
+ public int b19988;
+ public int b19989;
+ public int b19990;
+ public int b19991;
+ public int b19992;
+ public int b19993;
+ public int b19994;
+ public int b19995;
+ public int b19996;
+ public int b19997;
+ public int b19998;
+ public int b19999;
+ public int b20000;
+ public int b20001;
+ public int b20002;
+ public int b20003;
+ public int b20004;
+ public int b20005;
+ public int b20006;
+ public int b20007;
+ public int b20008;
+ public int b20009;
+ public int b20010;
+ public int b20011;
+ public int b20012;
+ public int b20013;
+ public int b20014;
+ public int b20015;
+ public int b20016;
+ public int b20017;
+ public int b20018;
+ public int b20019;
+ public int b20020;
+ public int b20021;
+ public int b20022;
+ public int b20023;
+ public int b20024;
+ public int b20025;
+ public int b20026;
+ public int b20027;
+ public int b20028;
+ public int b20029;
+ public int b20030;
+ public int b20031;
+ public int b20032;
+ public int b20033;
+ public int b20034;
+ public int b20035;
+ public int b20036;
+ public int b20037;
+ public int b20038;
+ public int b20039;
+ public int b20040;
+ public int b20041;
+ public int b20042;
+ public int b20043;
+ public int b20044;
+ public int b20045;
+ public int b20046;
+ public int b20047;
+ public int b20048;
+ public int b20049;
+ public int b20050;
+ public int b20051;
+ public int b20052;
+ public int b20053;
+ public int b20054;
+ public int b20055;
+ public int b20056;
+ public int b20057;
+ public int b20058;
+ public int b20059;
+ public int b20060;
+ public int b20061;
+ public int b20062;
+ public int b20063;
+ public int b20064;
+ public int b20065;
+ public int b20066;
+ public int b20067;
+ public int b20068;
+ public int b20069;
+ public int b20070;
+ public int b20071;
+ public int b20072;
+ public int b20073;
+ public int b20074;
+ public int b20075;
+ public int b20076;
+ public int b20077;
+ public int b20078;
+ public int b20079;
+ public int b20080;
+ public int b20081;
+ public int b20082;
+ public int b20083;
+ public int b20084;
+ public int b20085;
+ public int b20086;
+ public int b20087;
+ public int b20088;
+ public int b20089;
+ public int b20090;
+ public int b20091;
+ public int b20092;
+ public int b20093;
+ public int b20094;
+ public int b20095;
+ public int b20096;
+ public int b20097;
+ public int b20098;
+ public int b20099;
+ public int b20100;
+ public int b20101;
+ public int b20102;
+ public int b20103;
+ public int b20104;
+ public int b20105;
+ public int b20106;
+ public int b20107;
+ public int b20108;
+ public int b20109;
+ public int b20110;
+ public int b20111;
+ public int b20112;
+ public int b20113;
+ public int b20114;
+ public int b20115;
+ public int b20116;
+ public int b20117;
+ public int b20118;
+ public int b20119;
+ public int b20120;
+ public int b20121;
+ public int b20122;
+ public int b20123;
+ public int b20124;
+ public int b20125;
+ public int b20126;
+ public int b20127;
+ public int b20128;
+ public int b20129;
+ public int b20130;
+ public int b20131;
+ public int b20132;
+ public int b20133;
+ public int b20134;
+ public int b20135;
+ public int b20136;
+ public int b20137;
+ public int b20138;
+ public int b20139;
+ public int b20140;
+ public int b20141;
+ public int b20142;
+ public int b20143;
+ public int b20144;
+ public int b20145;
+ public int b20146;
+ public int b20147;
+ public int b20148;
+ public int b20149;
+ public int b20150;
+ public int b20151;
+ public int b20152;
+ public int b20153;
+ public int b20154;
+ public int b20155;
+ public int b20156;
+ public int b20157;
+ public int b20158;
+ public int b20159;
+ public int b20160;
+ public int b20161;
+ public int b20162;
+ public int b20163;
+ public int b20164;
+ public int b20165;
+ public int b20166;
+ public int b20167;
+ public int b20168;
+ public int b20169;
+ public int b20170;
+ public int b20171;
+ public int b20172;
+ public int b20173;
+ public int b20174;
+ public int b20175;
+ public int b20176;
+ public int b20177;
+ public int b20178;
+ public int b20179;
+ public int b20180;
+ public int b20181;
+ public int b20182;
+ public int b20183;
+ public int b20184;
+ public int b20185;
+ public int b20186;
+ public int b20187;
+ public int b20188;
+ public int b20189;
+ public int b20190;
+ public int b20191;
+ public int b20192;
+ public int b20193;
+ public int b20194;
+ public int b20195;
+ public int b20196;
+ public int b20197;
+ public int b20198;
+ public int b20199;
+ public int b20200;
+ public int b20201;
+ public int b20202;
+ public int b20203;
+ public int b20204;
+ public int b20205;
+ public int b20206;
+ public int b20207;
+ public int b20208;
+ public int b20209;
+ public int b20210;
+ public int b20211;
+ public int b20212;
+ public int b20213;
+ public int b20214;
+ public int b20215;
+ public int b20216;
+ public int b20217;
+ public int b20218;
+ public int b20219;
+ public int b20220;
+ public int b20221;
+ public int b20222;
+ public int b20223;
+ public int b20224;
+ public int b20225;
+ public int b20226;
+ public int b20227;
+ public int b20228;
+ public int b20229;
+ public int b20230;
+ public int b20231;
+ public int b20232;
+ public int b20233;
+ public int b20234;
+ public int b20235;
+ public int b20236;
+ public int b20237;
+ public int b20238;
+ public int b20239;
+ public int b20240;
+ public int b20241;
+ public int b20242;
+ public int b20243;
+ public int b20244;
+ public int b20245;
+ public int b20246;
+ public int b20247;
+ public int b20248;
+ public int b20249;
+ public int b20250;
+ public int b20251;
+ public int b20252;
+ public int b20253;
+ public int b20254;
+ public int b20255;
+ public int b20256;
+ public int b20257;
+ public int b20258;
+ public int b20259;
+ public int b20260;
+ public int b20261;
+ public int b20262;
+ public int b20263;
+ public int b20264;
+ public int b20265;
+ public int b20266;
+ public int b20267;
+ public int b20268;
+ public int b20269;
+ public int b20270;
+ public int b20271;
+ public int b20272;
+ public int b20273;
+ public int b20274;
+ public int b20275;
+ public int b20276;
+ public int b20277;
+ public int b20278;
+ public int b20279;
+ public int b20280;
+ public int b20281;
+ public int b20282;
+ public int b20283;
+ public int b20284;
+ public int b20285;
+ public int b20286;
+ public int b20287;
+ public int b20288;
+ public int b20289;
+ public int b20290;
+ public int b20291;
+ public int b20292;
+ public int b20293;
+ public int b20294;
+ public int b20295;
+ public int b20296;
+ public int b20297;
+ public int b20298;
+ public int b20299;
+ public int b20300;
+ public int b20301;
+ public int b20302;
+ public int b20303;
+ public int b20304;
+ public int b20305;
+ public int b20306;
+ public int b20307;
+ public int b20308;
+ public int b20309;
+ public int b20310;
+ public int b20311;
+ public int b20312;
+ public int b20313;
+ public int b20314;
+ public int b20315;
+ public int b20316;
+ public int b20317;
+ public int b20318;
+ public int b20319;
+ public int b20320;
+ public int b20321;
+ public int b20322;
+ public int b20323;
+ public int b20324;
+ public int b20325;
+ public int b20326;
+ public int b20327;
+ public int b20328;
+ public int b20329;
+ public int b20330;
+ public int b20331;
+ public int b20332;
+ public int b20333;
+ public int b20334;
+ public int b20335;
+ public int b20336;
+ public int b20337;
+ public int b20338;
+ public int b20339;
+ public int b20340;
+ public int b20341;
+ public int b20342;
+ public int b20343;
+ public int b20344;
+ public int b20345;
+ public int b20346;
+ public int b20347;
+ public int b20348;
+ public int b20349;
+ public int b20350;
+ public int b20351;
+ public int b20352;
+ public int b20353;
+ public int b20354;
+ public int b20355;
+ public int b20356;
+ public int b20357;
+ public int b20358;
+ public int b20359;
+ public int b20360;
+ public int b20361;
+ public int b20362;
+ public int b20363;
+ public int b20364;
+ public int b20365;
+ public int b20366;
+ public int b20367;
+ public int b20368;
+ public int b20369;
+ public int b20370;
+ public int b20371;
+ public int b20372;
+ public int b20373;
+ public int b20374;
+ public int b20375;
+ public int b20376;
+ public int b20377;
+ public int b20378;
+ public int b20379;
+ public int b20380;
+ public int b20381;
+ public int b20382;
+ public int b20383;
+ public int b20384;
+ public int b20385;
+ public int b20386;
+ public int b20387;
+ public int b20388;
+ public int b20389;
+ public int b20390;
+ public int b20391;
+ public int b20392;
+ public int b20393;
+ public int b20394;
+ public int b20395;
+ public int b20396;
+ public int b20397;
+ public int b20398;
+ public int b20399;
+ public int b20400;
+ public int b20401;
+ public int b20402;
+ public int b20403;
+ public int b20404;
+ public int b20405;
+ public int b20406;
+ public int b20407;
+ public int b20408;
+ public int b20409;
+ public int b20410;
+ public int b20411;
+ public int b20412;
+ public int b20413;
+ public int b20414;
+ public int b20415;
+ public int b20416;
+ public int b20417;
+ public int b20418;
+ public int b20419;
+ public int b20420;
+ public int b20421;
+ public int b20422;
+ public int b20423;
+ public int b20424;
+ public int b20425;
+ public int b20426;
+ public int b20427;
+ public int b20428;
+ public int b20429;
+ public int b20430;
+ public int b20431;
+ public int b20432;
+ public int b20433;
+ public int b20434;
+ public int b20435;
+ public int b20436;
+ public int b20437;
+ public int b20438;
+ public int b20439;
+ public int b20440;
+ public int b20441;
+ public int b20442;
+ public int b20443;
+ public int b20444;
+ public int b20445;
+ public int b20446;
+ public int b20447;
+ public int b20448;
+ public int b20449;
+ public int b20450;
+ public int b20451;
+ public int b20452;
+ public int b20453;
+ public int b20454;
+ public int b20455;
+ public int b20456;
+ public int b20457;
+ public int b20458;
+ public int b20459;
+ public int b20460;
+ public int b20461;
+ public int b20462;
+ public int b20463;
+ public int b20464;
+ public int b20465;
+ public int b20466;
+ public int b20467;
+ public int b20468;
+ public int b20469;
+ public int b20470;
+ public int b20471;
+ public int b20472;
+ public int b20473;
+ public int b20474;
+ public int b20475;
+ public int b20476;
+ public int b20477;
+ public int b20478;
+ public int b20479;
+ public int b20480;
+ public int b20481;
+ public int b20482;
+ public int b20483;
+ public int b20484;
+ public int b20485;
+ public int b20486;
+ public int b20487;
+ public int b20488;
+ public int b20489;
+ public int b20490;
+ public int b20491;
+ public int b20492;
+ public int b20493;
+ public int b20494;
+ public int b20495;
+ public int b20496;
+ public int b20497;
+ public int b20498;
+ public int b20499;
+ public int b20500;
+ public int b20501;
+ public int b20502;
+ public int b20503;
+ public int b20504;
+ public int b20505;
+ public int b20506;
+ public int b20507;
+ public int b20508;
+ public int b20509;
+ public int b20510;
+ public int b20511;
+ public int b20512;
+ public int b20513;
+ public int b20514;
+ public int b20515;
+ public int b20516;
+ public int b20517;
+ public int b20518;
+ public int b20519;
+ public int b20520;
+ public int b20521;
+ public int b20522;
+ public int b20523;
+ public int b20524;
+ public int b20525;
+ public int b20526;
+ public int b20527;
+ public int b20528;
+ public int b20529;
+ public int b20530;
+ public int b20531;
+ public int b20532;
+ public int b20533;
+ public int b20534;
+ public int b20535;
+ public int b20536;
+ public int b20537;
+ public int b20538;
+ public int b20539;
+ public int b20540;
+ public int b20541;
+ public int b20542;
+ public int b20543;
+ public int b20544;
+ public int b20545;
+ public int b20546;
+ public int b20547;
+ public int b20548;
+ public int b20549;
+ public int b20550;
+ public int b20551;
+ public int b20552;
+ public int b20553;
+ public int b20554;
+ public int b20555;
+ public int b20556;
+ public int b20557;
+ public int b20558;
+ public int b20559;
+ public int b20560;
+ public int b20561;
+ public int b20562;
+ public int b20563;
+ public int b20564;
+ public int b20565;
+ public int b20566;
+ public int b20567;
+ public int b20568;
+ public int b20569;
+ public int b20570;
+ public int b20571;
+ public int b20572;
+ public int b20573;
+ public int b20574;
+ public int b20575;
+ public int b20576;
+ public int b20577;
+ public int b20578;
+ public int b20579;
+ public int b20580;
+ public int b20581;
+ public int b20582;
+ public int b20583;
+ public int b20584;
+ public int b20585;
+ public int b20586;
+ public int b20587;
+ public int b20588;
+ public int b20589;
+ public int b20590;
+ public int b20591;
+ public int b20592;
+ public int b20593;
+ public int b20594;
+ public int b20595;
+ public int b20596;
+ public int b20597;
+ public int b20598;
+ public int b20599;
+ public int b20600;
+ public int b20601;
+ public int b20602;
+ public int b20603;
+ public int b20604;
+ public int b20605;
+ public int b20606;
+ public int b20607;
+ public int b20608;
+ public int b20609;
+ public int b20610;
+ public int b20611;
+ public int b20612;
+ public int b20613;
+ public int b20614;
+ public int b20615;
+ public int b20616;
+ public int b20617;
+ public int b20618;
+ public int b20619;
+ public int b20620;
+ public int b20621;
+ public int b20622;
+ public int b20623;
+ public int b20624;
+ public int b20625;
+ public int b20626;
+ public int b20627;
+ public int b20628;
+ public int b20629;
+ public int b20630;
+ public int b20631;
+ public int b20632;
+ public int b20633;
+ public int b20634;
+ public int b20635;
+ public int b20636;
+ public int b20637;
+ public int b20638;
+ public int b20639;
+ public int b20640;
+ public int b20641;
+ public int b20642;
+ public int b20643;
+ public int b20644;
+ public int b20645;
+ public int b20646;
+ public int b20647;
+ public int b20648;
+ public int b20649;
+ public int b20650;
+ public int b20651;
+ public int b20652;
+ public int b20653;
+ public int b20654;
+ public int b20655;
+ public int b20656;
+ public int b20657;
+ public int b20658;
+ public int b20659;
+ public int b20660;
+ public int b20661;
+ public int b20662;
+ public int b20663;
+ public int b20664;
+ public int b20665;
+ public int b20666;
+ public int b20667;
+ public int b20668;
+ public int b20669;
+ public int b20670;
+ public int b20671;
+ public int b20672;
+ public int b20673;
+ public int b20674;
+ public int b20675;
+ public int b20676;
+ public int b20677;
+ public int b20678;
+ public int b20679;
+ public int b20680;
+ public int b20681;
+ public int b20682;
+ public int b20683;
+ public int b20684;
+ public int b20685;
+ public int b20686;
+ public int b20687;
+ public int b20688;
+ public int b20689;
+ public int b20690;
+ public int b20691;
+ public int b20692;
+ public int b20693;
+ public int b20694;
+ public int b20695;
+ public int b20696;
+ public int b20697;
+ public int b20698;
+ public int b20699;
+ public int b20700;
+ public int b20701;
+ public int b20702;
+ public int b20703;
+ public int b20704;
+ public int b20705;
+ public int b20706;
+ public int b20707;
+ public int b20708;
+ public int b20709;
+ public int b20710;
+ public int b20711;
+ public int b20712;
+ public int b20713;
+ public int b20714;
+ public int b20715;
+ public int b20716;
+ public int b20717;
+ public int b20718;
+ public int b20719;
+ public int b20720;
+ public int b20721;
+ public int b20722;
+ public int b20723;
+ public int b20724;
+ public int b20725;
+ public int b20726;
+ public int b20727;
+ public int b20728;
+ public int b20729;
+ public int b20730;
+ public int b20731;
+ public int b20732;
+ public int b20733;
+ public int b20734;
+ public int b20735;
+ public int b20736;
+ public int b20737;
+ public int b20738;
+ public int b20739;
+ public int b20740;
+ public int b20741;
+ public int b20742;
+ public int b20743;
+ public int b20744;
+ public int b20745;
+ public int b20746;
+ public int b20747;
+ public int b20748;
+ public int b20749;
+ public int b20750;
+ public int b20751;
+ public int b20752;
+ public int b20753;
+ public int b20754;
+ public int b20755;
+ public int b20756;
+ public int b20757;
+ public int b20758;
+ public int b20759;
+ public int b20760;
+ public int b20761;
+ public int b20762;
+ public int b20763;
+ public int b20764;
+ public int b20765;
+ public int b20766;
+ public int b20767;
+ public int b20768;
+ public int b20769;
+ public int b20770;
+ public int b20771;
+ public int b20772;
+ public int b20773;
+ public int b20774;
+ public int b20775;
+ public int b20776;
+ public int b20777;
+ public int b20778;
+ public int b20779;
+ public int b20780;
+ public int b20781;
+ public int b20782;
+ public int b20783;
+ public int b20784;
+ public int b20785;
+ public int b20786;
+ public int b20787;
+ public int b20788;
+ public int b20789;
+ public int b20790;
+ public int b20791;
+ public int b20792;
+ public int b20793;
+ public int b20794;
+ public int b20795;
+ public int b20796;
+ public int b20797;
+ public int b20798;
+ public int b20799;
+ public int b20800;
+ public int b20801;
+ public int b20802;
+ public int b20803;
+ public int b20804;
+ public int b20805;
+ public int b20806;
+ public int b20807;
+ public int b20808;
+ public int b20809;
+ public int b20810;
+ public int b20811;
+ public int b20812;
+ public int b20813;
+ public int b20814;
+ public int b20815;
+ public int b20816;
+ public int b20817;
+ public int b20818;
+ public int b20819;
+ public int b20820;
+ public int b20821;
+ public int b20822;
+ public int b20823;
+ public int b20824;
+ public int b20825;
+ public int b20826;
+ public int b20827;
+ public int b20828;
+ public int b20829;
+ public int b20830;
+ public int b20831;
+ public int b20832;
+ public int b20833;
+ public int b20834;
+ public int b20835;
+ public int b20836;
+ public int b20837;
+ public int b20838;
+ public int b20839;
+ public int b20840;
+ public int b20841;
+ public int b20842;
+ public int b20843;
+ public int b20844;
+ public int b20845;
+ public int b20846;
+ public int b20847;
+ public int b20848;
+ public int b20849;
+ public int b20850;
+ public int b20851;
+ public int b20852;
+ public int b20853;
+ public int b20854;
+ public int b20855;
+ public int b20856;
+ public int b20857;
+ public int b20858;
+ public int b20859;
+ public int b20860;
+ public int b20861;
+ public int b20862;
+ public int b20863;
+ public int b20864;
+ public int b20865;
+ public int b20866;
+ public int b20867;
+ public int b20868;
+ public int b20869;
+ public int b20870;
+ public int b20871;
+ public int b20872;
+ public int b20873;
+ public int b20874;
+ public int b20875;
+ public int b20876;
+ public int b20877;
+ public int b20878;
+ public int b20879;
+ public int b20880;
+ public int b20881;
+ public int b20882;
+ public int b20883;
+ public int b20884;
+ public int b20885;
+ public int b20886;
+ public int b20887;
+ public int b20888;
+ public int b20889;
+ public int b20890;
+ public int b20891;
+ public int b20892;
+ public int b20893;
+ public int b20894;
+ public int b20895;
+ public int b20896;
+ public int b20897;
+ public int b20898;
+ public int b20899;
+ public int b20900;
+ public int b20901;
+ public int b20902;
+ public int b20903;
+ public int b20904;
+ public int b20905;
+ public int b20906;
+ public int b20907;
+ public int b20908;
+ public int b20909;
+ public int b20910;
+ public int b20911;
+ public int b20912;
+ public int b20913;
+ public int b20914;
+ public int b20915;
+ public int b20916;
+ public int b20917;
+ public int b20918;
+ public int b20919;
+ public int b20920;
+ public int b20921;
+ public int b20922;
+ public int b20923;
+ public int b20924;
+ public int b20925;
+ public int b20926;
+ public int b20927;
+ public int b20928;
+ public int b20929;
+ public int b20930;
+ public int b20931;
+ public int b20932;
+ public int b20933;
+ public int b20934;
+ public int b20935;
+ public int b20936;
+ public int b20937;
+ public int b20938;
+ public int b20939;
+ public int b20940;
+ public int b20941;
+ public int b20942;
+ public int b20943;
+ public int b20944;
+ public int b20945;
+ public int b20946;
+ public int b20947;
+ public int b20948;
+ public int b20949;
+ public int b20950;
+ public int b20951;
+ public int b20952;
+ public int b20953;
+ public int b20954;
+ public int b20955;
+ public int b20956;
+ public int b20957;
+ public int b20958;
+ public int b20959;
+ public int b20960;
+ public int b20961;
+ public int b20962;
+ public int b20963;
+ public int b20964;
+ public int b20965;
+ public int b20966;
+ public int b20967;
+ public int b20968;
+ public int b20969;
+ public int b20970;
+ public int b20971;
+ public int b20972;
+ public int b20973;
+ public int b20974;
+ public int b20975;
+ public int b20976;
+ public int b20977;
+ public int b20978;
+ public int b20979;
+ public int b20980;
+ public int b20981;
+ public int b20982;
+ public int b20983;
+ public int b20984;
+ public int b20985;
+ public int b20986;
+ public int b20987;
+ public int b20988;
+ public int b20989;
+ public int b20990;
+ public int b20991;
+ public int b20992;
+ public int b20993;
+ public int b20994;
+ public int b20995;
+ public int b20996;
+ public int b20997;
+ public int b20998;
+ public int b20999;
+ public int b21000;
+ public int b21001;
+ public int b21002;
+ public int b21003;
+ public int b21004;
+ public int b21005;
+ public int b21006;
+ public int b21007;
+ public int b21008;
+ public int b21009;
+ public int b21010;
+ public int b21011;
+ public int b21012;
+ public int b21013;
+ public int b21014;
+ public int b21015;
+ public int b21016;
+ public int b21017;
+ public int b21018;
+ public int b21019;
+ public int b21020;
+ public int b21021;
+ public int b21022;
+ public int b21023;
+ public int b21024;
+ public int b21025;
+ public int b21026;
+ public int b21027;
+ public int b21028;
+ public int b21029;
+ public int b21030;
+ public int b21031;
+ public int b21032;
+ public int b21033;
+ public int b21034;
+ public int b21035;
+ public int b21036;
+ public int b21037;
+ public int b21038;
+ public int b21039;
+ public int b21040;
+ public int b21041;
+ public int b21042;
+ public int b21043;
+ public int b21044;
+ public int b21045;
+ public int b21046;
+ public int b21047;
+ public int b21048;
+ public int b21049;
+ public int b21050;
+ public int b21051;
+ public int b21052;
+ public int b21053;
+ public int b21054;
+ public int b21055;
+ public int b21056;
+ public int b21057;
+ public int b21058;
+ public int b21059;
+ public int b21060;
+ public int b21061;
+ public int b21062;
+ public int b21063;
+ public int b21064;
+ public int b21065;
+ public int b21066;
+ public int b21067;
+ public int b21068;
+ public int b21069;
+ public int b21070;
+ public int b21071;
+ public int b21072;
+ public int b21073;
+ public int b21074;
+ public int b21075;
+ public int b21076;
+ public int b21077;
+ public int b21078;
+ public int b21079;
+ public int b21080;
+ public int b21081;
+ public int b21082;
+ public int b21083;
+ public int b21084;
+ public int b21085;
+ public int b21086;
+ public int b21087;
+ public int b21088;
+ public int b21089;
+ public int b21090;
+ public int b21091;
+ public int b21092;
+ public int b21093;
+ public int b21094;
+ public int b21095;
+ public int b21096;
+ public int b21097;
+ public int b21098;
+ public int b21099;
+ public int b21100;
+ public int b21101;
+ public int b21102;
+ public int b21103;
+ public int b21104;
+ public int b21105;
+ public int b21106;
+ public int b21107;
+ public int b21108;
+ public int b21109;
+ public int b21110;
+ public int b21111;
+ public int b21112;
+ public int b21113;
+ public int b21114;
+ public int b21115;
+ public int b21116;
+ public int b21117;
+ public int b21118;
+ public int b21119;
+ public int b21120;
+ public int b21121;
+ public int b21122;
+ public int b21123;
+ public int b21124;
+ public int b21125;
+ public int b21126;
+ public int b21127;
+ public int b21128;
+ public int b21129;
+ public int b21130;
+ public int b21131;
+ public int b21132;
+ public int b21133;
+ public int b21134;
+ public int b21135;
+ public int b21136;
+ public int b21137;
+ public int b21138;
+ public int b21139;
+ public int b21140;
+ public int b21141;
+ public int b21142;
+ public int b21143;
+ public int b21144;
+ public int b21145;
+ public int b21146;
+ public int b21147;
+ public int b21148;
+ public int b21149;
+ public int b21150;
+ public int b21151;
+ public int b21152;
+ public int b21153;
+ public int b21154;
+ public int b21155;
+ public int b21156;
+ public int b21157;
+ public int b21158;
+ public int b21159;
+ public int b21160;
+ public int b21161;
+ public int b21162;
+ public int b21163;
+ public int b21164;
+ public int b21165;
+ public int b21166;
+ public int b21167;
+ public int b21168;
+ public int b21169;
+ public int b21170;
+ public int b21171;
+ public int b21172;
+ public int b21173;
+ public int b21174;
+ public int b21175;
+ public int b21176;
+ public int b21177;
+ public int b21178;
+ public int b21179;
+ public int b21180;
+ public int b21181;
+ public int b21182;
+ public int b21183;
+ public int b21184;
+ public int b21185;
+ public int b21186;
+ public int b21187;
+ public int b21188;
+ public int b21189;
+ public int b21190;
+ public int b21191;
+ public int b21192;
+ public int b21193;
+ public int b21194;
+ public int b21195;
+ public int b21196;
+ public int b21197;
+ public int b21198;
+ public int b21199;
+ public int b21200;
+ public int b21201;
+ public int b21202;
+ public int b21203;
+ public int b21204;
+ public int b21205;
+ public int b21206;
+ public int b21207;
+ public int b21208;
+ public int b21209;
+ public int b21210;
+ public int b21211;
+ public int b21212;
+ public int b21213;
+ public int b21214;
+ public int b21215;
+ public int b21216;
+ public int b21217;
+ public int b21218;
+ public int b21219;
+ public int b21220;
+ public int b21221;
+ public int b21222;
+ public int b21223;
+ public int b21224;
+ public int b21225;
+ public int b21226;
+ public int b21227;
+ public int b21228;
+ public int b21229;
+ public int b21230;
+ public int b21231;
+ public int b21232;
+ public int b21233;
+ public int b21234;
+ public int b21235;
+ public int b21236;
+ public int b21237;
+ public int b21238;
+ public int b21239;
+ public int b21240;
+ public int b21241;
+ public int b21242;
+ public int b21243;
+ public int b21244;
+ public int b21245;
+ public int b21246;
+ public int b21247;
+ public int b21248;
+ public int b21249;
+ public int b21250;
+ public int b21251;
+ public int b21252;
+ public int b21253;
+ public int b21254;
+ public int b21255;
+ public int b21256;
+ public int b21257;
+ public int b21258;
+ public int b21259;
+ public int b21260;
+ public int b21261;
+ public int b21262;
+ public int b21263;
+ public int b21264;
+ public int b21265;
+ public int b21266;
+ public int b21267;
+ public int b21268;
+ public int b21269;
+ public int b21270;
+ public int b21271;
+ public int b21272;
+ public int b21273;
+ public int b21274;
+ public int b21275;
+ public int b21276;
+ public int b21277;
+ public int b21278;
+ public int b21279;
+ public int b21280;
+ public int b21281;
+ public int b21282;
+ public int b21283;
+ public int b21284;
+ public int b21285;
+ public int b21286;
+ public int b21287;
+ public int b21288;
+ public int b21289;
+ public int b21290;
+ public int b21291;
+ public int b21292;
+ public int b21293;
+ public int b21294;
+ public int b21295;
+ public int b21296;
+ public int b21297;
+ public int b21298;
+ public int b21299;
+ public int b21300;
+ public int b21301;
+ public int b21302;
+ public int b21303;
+ public int b21304;
+ public int b21305;
+ public int b21306;
+ public int b21307;
+ public int b21308;
+ public int b21309;
+ public int b21310;
+ public int b21311;
+ public int b21312;
+ public int b21313;
+ public int b21314;
+ public int b21315;
+ public int b21316;
+ public int b21317;
+ public int b21318;
+ public int b21319;
+ public int b21320;
+ public int b21321;
+ public int b21322;
+ public int b21323;
+ public int b21324;
+ public int b21325;
+ public int b21326;
+ public int b21327;
+ public int b21328;
+ public int b21329;
+ public int b21330;
+ public int b21331;
+ public int b21332;
+ public int b21333;
+ public int b21334;
+ public int b21335;
+ public int b21336;
+ public int b21337;
+ public int b21338;
+ public int b21339;
+ public int b21340;
+ public int b21341;
+ public int b21342;
+ public int b21343;
+ public int b21344;
+ public int b21345;
+ public int b21346;
+ public int b21347;
+ public int b21348;
+ public int b21349;
+ public int b21350;
+ public int b21351;
+ public int b21352;
+ public int b21353;
+ public int b21354;
+ public int b21355;
+ public int b21356;
+ public int b21357;
+ public int b21358;
+ public int b21359;
+ public int b21360;
+ public int b21361;
+ public int b21362;
+ public int b21363;
+ public int b21364;
+ public int b21365;
+ public int b21366;
+ public int b21367;
+ public int b21368;
+ public int b21369;
+ public int b21370;
+ public int b21371;
+ public int b21372;
+ public int b21373;
+ public int b21374;
+ public int b21375;
+ public int b21376;
+ public int b21377;
+ public int b21378;
+ public int b21379;
+ public int b21380;
+ public int b21381;
+ public int b21382;
+ public int b21383;
+ public int b21384;
+ public int b21385;
+ public int b21386;
+ public int b21387;
+ public int b21388;
+ public int b21389;
+ public int b21390;
+ public int b21391;
+ public int b21392;
+ public int b21393;
+ public int b21394;
+ public int b21395;
+ public int b21396;
+ public int b21397;
+ public int b21398;
+ public int b21399;
+ public int b21400;
+ public int b21401;
+ public int b21402;
+ public int b21403;
+ public int b21404;
+ public int b21405;
+ public int b21406;
+ public int b21407;
+ public int b21408;
+ public int b21409;
+ public int b21410;
+ public int b21411;
+ public int b21412;
+ public int b21413;
+ public int b21414;
+ public int b21415;
+ public int b21416;
+ public int b21417;
+ public int b21418;
+ public int b21419;
+ public int b21420;
+ public int b21421;
+ public int b21422;
+ public int b21423;
+ public int b21424;
+ public int b21425;
+ public int b21426;
+ public int b21427;
+ public int b21428;
+ public int b21429;
+ public int b21430;
+ public int b21431;
+ public int b21432;
+ public int b21433;
+ public int b21434;
+ public int b21435;
+ public int b21436;
+ public int b21437;
+ public int b21438;
+ public int b21439;
+ public int b21440;
+ public int b21441;
+ public int b21442;
+ public int b21443;
+ public int b21444;
+ public int b21445;
+ public int b21446;
+ public int b21447;
+ public int b21448;
+ public int b21449;
+ public int b21450;
+ public int b21451;
+ public int b21452;
+ public int b21453;
+ public int b21454;
+ public int b21455;
+ public int b21456;
+ public int b21457;
+ public int b21458;
+ public int b21459;
+ public int b21460;
+ public int b21461;
+ public int b21462;
+ public int b21463;
+ public int b21464;
+ public int b21465;
+ public int b21466;
+ public int b21467;
+ public int b21468;
+ public int b21469;
+ public int b21470;
+ public int b21471;
+ public int b21472;
+ public int b21473;
+ public int b21474;
+ public int b21475;
+ public int b21476;
+ public int b21477;
+ public int b21478;
+ public int b21479;
+ public int b21480;
+ public int b21481;
+ public int b21482;
+ public int b21483;
+ public int b21484;
+ public int b21485;
+ public int b21486;
+ public int b21487;
+ public int b21488;
+ public int b21489;
+ public int b21490;
+ public int b21491;
+ public int b21492;
+ public int b21493;
+ public int b21494;
+ public int b21495;
+ public int b21496;
+ public int b21497;
+ public int b21498;
+ public int b21499;
+ public int b21500;
+ public int b21501;
+ public int b21502;
+ public int b21503;
+ public int b21504;
+ public int b21505;
+ public int b21506;
+ public int b21507;
+ public int b21508;
+ public int b21509;
+ public int b21510;
+ public int b21511;
+ public int b21512;
+ public int b21513;
+ public int b21514;
+ public int b21515;
+ public int b21516;
+ public int b21517;
+ public int b21518;
+ public int b21519;
+ public int b21520;
+ public int b21521;
+ public int b21522;
+ public int b21523;
+ public int b21524;
+ public int b21525;
+ public int b21526;
+ public int b21527;
+ public int b21528;
+ public int b21529;
+ public int b21530;
+ public int b21531;
+ public int b21532;
+ public int b21533;
+ public int b21534;
+ public int b21535;
+ public int b21536;
+ public int b21537;
+ public int b21538;
+ public int b21539;
+ public int b21540;
+ public int b21541;
+ public int b21542;
+ public int b21543;
+ public int b21544;
+ public int b21545;
+ public int b21546;
+ public int b21547;
+ public int b21548;
+ public int b21549;
+ public int b21550;
+ public int b21551;
+ public int b21552;
+ public int b21553;
+ public int b21554;
+ public int b21555;
+ public int b21556;
+ public int b21557;
+ public int b21558;
+ public int b21559;
+ public int b21560;
+ public int b21561;
+ public int b21562;
+ public int b21563;
+ public int b21564;
+ public int b21565;
+ public int b21566;
+ public int b21567;
+ public int b21568;
+ public int b21569;
+ public int b21570;
+ public int b21571;
+ public int b21572;
+ public int b21573;
+ public int b21574;
+ public int b21575;
+ public int b21576;
+ public int b21577;
+ public int b21578;
+ public int b21579;
+ public int b21580;
+ public int b21581;
+ public int b21582;
+ public int b21583;
+ public int b21584;
+ public int b21585;
+ public int b21586;
+ public int b21587;
+ public int b21588;
+ public int b21589;
+ public int b21590;
+ public int b21591;
+ public int b21592;
+ public int b21593;
+ public int b21594;
+ public int b21595;
+ public int b21596;
+ public int b21597;
+ public int b21598;
+ public int b21599;
+ public int b21600;
+ public int b21601;
+ public int b21602;
+ public int b21603;
+ public int b21604;
+ public int b21605;
+ public int b21606;
+ public int b21607;
+ public int b21608;
+ public int b21609;
+ public int b21610;
+ public int b21611;
+ public int b21612;
+ public int b21613;
+ public int b21614;
+ public int b21615;
+ public int b21616;
+ public int b21617;
+ public int b21618;
+ public int b21619;
+ public int b21620;
+ public int b21621;
+ public int b21622;
+ public int b21623;
+ public int b21624;
+ public int b21625;
+ public int b21626;
+ public int b21627;
+ public int b21628;
+ public int b21629;
+ public int b21630;
+ public int b21631;
+ public int b21632;
+ public int b21633;
+ public int b21634;
+ public int b21635;
+ public int b21636;
+ public int b21637;
+ public int b21638;
+ public int b21639;
+ public int b21640;
+ public int b21641;
+ public int b21642;
+ public int b21643;
+ public int b21644;
+ public int b21645;
+ public int b21646;
+ public int b21647;
+ public int b21648;
+ public int b21649;
+ public int b21650;
+ public int b21651;
+ public int b21652;
+ public int b21653;
+ public int b21654;
+ public int b21655;
+ public int b21656;
+ public int b21657;
+ public int b21658;
+ public int b21659;
+ public int b21660;
+ public int b21661;
+ public int b21662;
+ public int b21663;
+ public int b21664;
+ public int b21665;
+ public int b21666;
+ public int b21667;
+ public int b21668;
+ public int b21669;
+ public int b21670;
+ public int b21671;
+ public int b21672;
+ public int b21673;
+ public int b21674;
+ public int b21675;
+ public int b21676;
+ public int b21677;
+ public int b21678;
+ public int b21679;
+ public int b21680;
+ public int b21681;
+ public int b21682;
+ public int b21683;
+ public int b21684;
+ public int b21685;
+ public int b21686;
+ public int b21687;
+ public int b21688;
+ public int b21689;
+ public int b21690;
+ public int b21691;
+ public int b21692;
+ public int b21693;
+ public int b21694;
+ public int b21695;
+ public int b21696;
+ public int b21697;
+ public int b21698;
+ public int b21699;
+ public int b21700;
+ public int b21701;
+ public int b21702;
+ public int b21703;
+ public int b21704;
+ public int b21705;
+ public int b21706;
+ public int b21707;
+ public int b21708;
+ public int b21709;
+ public int b21710;
+ public int b21711;
+ public int b21712;
+ public int b21713;
+ public int b21714;
+ public int b21715;
+ public int b21716;
+ public int b21717;
+ public int b21718;
+ public int b21719;
+ public int b21720;
+ public int b21721;
+ public int b21722;
+ public int b21723;
+ public int b21724;
+ public int b21725;
+ public int b21726;
+ public int b21727;
+ public int b21728;
+ public int b21729;
+ public int b21730;
+ public int b21731;
+ public int b21732;
+ public int b21733;
+ public int b21734;
+ public int b21735;
+ public int b21736;
+ public int b21737;
+ public int b21738;
+ public int b21739;
+ public int b21740;
+ public int b21741;
+ public int b21742;
+ public int b21743;
+ public int b21744;
+ public int b21745;
+ public int b21746;
+ public int b21747;
+ public int b21748;
+ public int b21749;
+ public int b21750;
+ public int b21751;
+ public int b21752;
+ public int b21753;
+ public int b21754;
+ public int b21755;
+ public int b21756;
+ public int b21757;
+ public int b21758;
+ public int b21759;
+ public int b21760;
+ public int b21761;
+ public int b21762;
+ public int b21763;
+ public int b21764;
+ public int b21765;
+ public int b21766;
+ public int b21767;
+ public int b21768;
+ public int b21769;
+ public int b21770;
+ public int b21771;
+ public int b21772;
+ public int b21773;
+ public int b21774;
+ public int b21775;
+ public int b21776;
+ public int b21777;
+ public int b21778;
+ public int b21779;
+ public int b21780;
+ public int b21781;
+ public int b21782;
+ public int b21783;
+ public int b21784;
+ public int b21785;
+ public int b21786;
+ public int b21787;
+ public int b21788;
+ public int b21789;
+ public int b21790;
+ public int b21791;
+ public int b21792;
+ public int b21793;
+ public int b21794;
+ public int b21795;
+ public int b21796;
+ public int b21797;
+ public int b21798;
+ public int b21799;
+ public int b21800;
+ public int b21801;
+ public int b21802;
+ public int b21803;
+ public int b21804;
+ public int b21805;
+ public int b21806;
+ public int b21807;
+ public int b21808;
+ public int b21809;
+ public int b21810;
+ public int b21811;
+ public int b21812;
+ public int b21813;
+ public int b21814;
+ public int b21815;
+ public int b21816;
+ public int b21817;
+ public int b21818;
+ public int b21819;
+ public int b21820;
+ public int b21821;
+ public int b21822;
+ public int b21823;
+ public int b21824;
+ public int b21825;
+ public int b21826;
+ public int b21827;
+ public int b21828;
+ public int b21829;
+ public int b21830;
+ public int b21831;
+ public int b21832;
+ public int b21833;
+ public int b21834;
+ public int b21835;
+ public int b21836;
+ public int b21837;
+ public int b21838;
+ public int b21839;
+ public int b21840;
+ public int b21841;
+ public int b21842;
+ public int b21843;
+ public int b21844;
+ public int b21845;
+ public int b21846;
+ public int b21847;
+ public int b21848;
+ public int b21849;
+ public int b21850;
+ public int b21851;
+ public int b21852;
+ public int b21853;
+ public int b21854;
+ public int b21855;
+ public int b21856;
+ public int b21857;
+ public int b21858;
+ public int b21859;
+ public int b21860;
+ public int b21861;
+ public int b21862;
+ public int b21863;
+ public int b21864;
+ public int b21865;
+ public int b21866;
+ public int b21867;
+ public int b21868;
+ public int b21869;
+ public int b21870;
+ public int b21871;
+ public int b21872;
+ public int b21873;
+ public int b21874;
+ public int b21875;
+ public int b21876;
+ public int b21877;
+ public int b21878;
+ public int b21879;
+ public int b21880;
+ public int b21881;
+ public int b21882;
+ public int b21883;
+ public int b21884;
+ public int b21885;
+ public int b21886;
+ public int b21887;
+ public int b21888;
+ public int b21889;
+ public int b21890;
+ public int b21891;
+ public int b21892;
+ public int b21893;
+ public int b21894;
+ public int b21895;
+ public int b21896;
+ public int b21897;
+ public int b21898;
+ public int b21899;
+ public int b21900;
+ public int b21901;
+ public int b21902;
+ public int b21903;
+ public int b21904;
+ public int b21905;
+ public int b21906;
+ public int b21907;
+ public int b21908;
+ public int b21909;
+ public int b21910;
+ public int b21911;
+ public int b21912;
+ public int b21913;
+ public int b21914;
+ public int b21915;
+ public int b21916;
+ public int b21917;
+ public int b21918;
+ public int b21919;
+ public int b21920;
+ public int b21921;
+ public int b21922;
+ public int b21923;
+ public int b21924;
+ public int b21925;
+ public int b21926;
+ public int b21927;
+ public int b21928;
+ public int b21929;
+ public int b21930;
+ public int b21931;
+ public int b21932;
+ public int b21933;
+ public int b21934;
+ public int b21935;
+ public int b21936;
+ public int b21937;
+ public int b21938;
+ public int b21939;
+ public int b21940;
+ public int b21941;
+ public int b21942;
+ public int b21943;
+ public int b21944;
+ public int b21945;
+ public int b21946;
+ public int b21947;
+ public int b21948;
+ public int b21949;
+ public int b21950;
+ public int b21951;
+ public int b21952;
+ public int b21953;
+ public int b21954;
+ public int b21955;
+ public int b21956;
+ public int b21957;
+ public int b21958;
+ public int b21959;
+ public int b21960;
+ public int b21961;
+ public int b21962;
+ public int b21963;
+ public int b21964;
+ public int b21965;
+ public int b21966;
+ public int b21967;
+ public int b21968;
+ public int b21969;
+ public int b21970;
+ public int b21971;
+ public int b21972;
+ public int b21973;
+ public int b21974;
+ public int b21975;
+ public int b21976;
+ public int b21977;
+ public int b21978;
+ public int b21979;
+ public int b21980;
+ public int b21981;
+ public int b21982;
+ public int b21983;
+ public int b21984;
+ public int b21985;
+ public int b21986;
+ public int b21987;
+ public int b21988;
+ public int b21989;
+ public int b21990;
+ public int b21991;
+ public int b21992;
+ public int b21993;
+ public int b21994;
+ public int b21995;
+ public int b21996;
+ public int b21997;
+ public int b21998;
+ public int b21999;
+ public int b22000;
+ public int b22001;
+ public int b22002;
+ public int b22003;
+ public int b22004;
+ public int b22005;
+ public int b22006;
+ public int b22007;
+ public int b22008;
+ public int b22009;
+ public int b22010;
+ public int b22011;
+ public int b22012;
+ public int b22013;
+ public int b22014;
+ public int b22015;
+ public int b22016;
+ public int b22017;
+ public int b22018;
+ public int b22019;
+ public int b22020;
+ public int b22021;
+ public int b22022;
+ public int b22023;
+ public int b22024;
+ public int b22025;
+ public int b22026;
+ public int b22027;
+ public int b22028;
+ public int b22029;
+ public int b22030;
+ public int b22031;
+ public int b22032;
+ public int b22033;
+ public int b22034;
+ public int b22035;
+ public int b22036;
+ public int b22037;
+ public int b22038;
+ public int b22039;
+ public int b22040;
+ public int b22041;
+ public int b22042;
+ public int b22043;
+ public int b22044;
+ public int b22045;
+ public int b22046;
+ public int b22047;
+ public int b22048;
+ public int b22049;
+ public int b22050;
+ public int b22051;
+ public int b22052;
+ public int b22053;
+ public int b22054;
+ public int b22055;
+ public int b22056;
+ public int b22057;
+ public int b22058;
+ public int b22059;
+ public int b22060;
+ public int b22061;
+ public int b22062;
+ public int b22063;
+ public int b22064;
+ public int b22065;
+ public int b22066;
+ public int b22067;
+ public int b22068;
+ public int b22069;
+ public int b22070;
+ public int b22071;
+ public int b22072;
+ public int b22073;
+ public int b22074;
+ public int b22075;
+ public int b22076;
+ public int b22077;
+ public int b22078;
+ public int b22079;
+ public int b22080;
+ public int b22081;
+ public int b22082;
+ public int b22083;
+ public int b22084;
+ public int b22085;
+ public int b22086;
+ public int b22087;
+ public int b22088;
+ public int b22089;
+ public int b22090;
+ public int b22091;
+ public int b22092;
+ public int b22093;
+ public int b22094;
+ public int b22095;
+ public int b22096;
+ public int b22097;
+ public int b22098;
+ public int b22099;
+ public int b22100;
+ public int b22101;
+ public int b22102;
+ public int b22103;
+ public int b22104;
+ public int b22105;
+ public int b22106;
+ public int b22107;
+ public int b22108;
+ public int b22109;
+ public int b22110;
+ public int b22111;
+ public int b22112;
+ public int b22113;
+ public int b22114;
+ public int b22115;
+ public int b22116;
+ public int b22117;
+ public int b22118;
+ public int b22119;
+ public int b22120;
+ public int b22121;
+ public int b22122;
+ public int b22123;
+ public int b22124;
+ public int b22125;
+ public int b22126;
+ public int b22127;
+ public int b22128;
+ public int b22129;
+ public int b22130;
+ public int b22131;
+ public int b22132;
+ public int b22133;
+ public int b22134;
+ public int b22135;
+ public int b22136;
+ public int b22137;
+ public int b22138;
+ public int b22139;
+ public int b22140;
+ public int b22141;
+ public int b22142;
+ public int b22143;
+ public int b22144;
+ public int b22145;
+ public int b22146;
+ public int b22147;
+ public int b22148;
+ public int b22149;
+ public int b22150;
+ public int b22151;
+ public int b22152;
+ public int b22153;
+ public int b22154;
+ public int b22155;
+ public int b22156;
+ public int b22157;
+ public int b22158;
+ public int b22159;
+ public int b22160;
+ public int b22161;
+ public int b22162;
+ public int b22163;
+ public int b22164;
+ public int b22165;
+ public int b22166;
+ public int b22167;
+ public int b22168;
+ public int b22169;
+ public int b22170;
+ public int b22171;
+ public int b22172;
+ public int b22173;
+ public int b22174;
+ public int b22175;
+ public int b22176;
+ public int b22177;
+ public int b22178;
+ public int b22179;
+ public int b22180;
+ public int b22181;
+ public int b22182;
+ public int b22183;
+ public int b22184;
+ public int b22185;
+ public int b22186;
+ public int b22187;
+ public int b22188;
+ public int b22189;
+ public int b22190;
+ public int b22191;
+ public int b22192;
+ public int b22193;
+ public int b22194;
+ public int b22195;
+ public int b22196;
+ public int b22197;
+ public int b22198;
+ public int b22199;
+ public int b22200;
+ public int b22201;
+ public int b22202;
+ public int b22203;
+ public int b22204;
+ public int b22205;
+ public int b22206;
+ public int b22207;
+ public int b22208;
+ public int b22209;
+ public int b22210;
+ public int b22211;
+ public int b22212;
+ public int b22213;
+ public int b22214;
+ public int b22215;
+ public int b22216;
+ public int b22217;
+ public int b22218;
+ public int b22219;
+ public int b22220;
+ public int b22221;
+ public int b22222;
+ public int b22223;
+ public int b22224;
+ public int b22225;
+ public int b22226;
+ public int b22227;
+ public int b22228;
+ public int b22229;
+ public int b22230;
+ public int b22231;
+ public int b22232;
+ public int b22233;
+ public int b22234;
+ public int b22235;
+ public int b22236;
+ public int b22237;
+ public int b22238;
+ public int b22239;
+ public int b22240;
+ public int b22241;
+ public int b22242;
+ public int b22243;
+ public int b22244;
+ public int b22245;
+ public int b22246;
+ public int b22247;
+ public int b22248;
+ public int b22249;
+ public int b22250;
+ public int b22251;
+ public int b22252;
+ public int b22253;
+ public int b22254;
+ public int b22255;
+ public int b22256;
+ public int b22257;
+ public int b22258;
+ public int b22259;
+ public int b22260;
+ public int b22261;
+ public int b22262;
+ public int b22263;
+ public int b22264;
+ public int b22265;
+ public int b22266;
+ public int b22267;
+ public int b22268;
+ public int b22269;
+ public int b22270;
+ public int b22271;
+ public int b22272;
+ public int b22273;
+ public int b22274;
+ public int b22275;
+ public int b22276;
+ public int b22277;
+ public int b22278;
+ public int b22279;
+ public int b22280;
+ public int b22281;
+ public int b22282;
+ public int b22283;
+ public int b22284;
+ public int b22285;
+ public int b22286;
+ public int b22287;
+ public int b22288;
+ public int b22289;
+ public int b22290;
+ public int b22291;
+ public int b22292;
+ public int b22293;
+ public int b22294;
+ public int b22295;
+ public int b22296;
+ public int b22297;
+ public int b22298;
+ public int b22299;
+ public int b22300;
+ public int b22301;
+ public int b22302;
+ public int b22303;
+ public int b22304;
+ public int b22305;
+ public int b22306;
+ public int b22307;
+ public int b22308;
+ public int b22309;
+ public int b22310;
+ public int b22311;
+ public int b22312;
+ public int b22313;
+ public int b22314;
+ public int b22315;
+ public int b22316;
+ public int b22317;
+ public int b22318;
+ public int b22319;
+ public int b22320;
+ public int b22321;
+ public int b22322;
+ public int b22323;
+ public int b22324;
+ public int b22325;
+ public int b22326;
+ public int b22327;
+ public int b22328;
+ public int b22329;
+ public int b22330;
+ public int b22331;
+ public int b22332;
+ public int b22333;
+ public int b22334;
+ public int b22335;
+ public int b22336;
+ public int b22337;
+ public int b22338;
+ public int b22339;
+ public int b22340;
+ public int b22341;
+ public int b22342;
+ public int b22343;
+ public int b22344;
+ public int b22345;
+ public int b22346;
+ public int b22347;
+ public int b22348;
+ public int b22349;
+ public int b22350;
+ public int b22351;
+ public int b22352;
+ public int b22353;
+ public int b22354;
+ public int b22355;
+ public int b22356;
+ public int b22357;
+ public int b22358;
+ public int b22359;
+ public int b22360;
+ public int b22361;
+ public int b22362;
+ public int b22363;
+ public int b22364;
+ public int b22365;
+ public int b22366;
+ public int b22367;
+ public int b22368;
+ public int b22369;
+ public int b22370;
+ public int b22371;
+ public int b22372;
+ public int b22373;
+ public int b22374;
+ public int b22375;
+ public int b22376;
+ public int b22377;
+ public int b22378;
+ public int b22379;
+ public int b22380;
+ public int b22381;
+ public int b22382;
+ public int b22383;
+ public int b22384;
+ public int b22385;
+ public int b22386;
+ public int b22387;
+ public int b22388;
+ public int b22389;
+ public int b22390;
+ public int b22391;
+ public int b22392;
+ public int b22393;
+ public int b22394;
+ public int b22395;
+ public int b22396;
+ public int b22397;
+ public int b22398;
+ public int b22399;
+ public int b22400;
+ public int b22401;
+ public int b22402;
+ public int b22403;
+ public int b22404;
+ public int b22405;
+ public int b22406;
+ public int b22407;
+ public int b22408;
+ public int b22409;
+ public int b22410;
+ public int b22411;
+ public int b22412;
+ public int b22413;
+ public int b22414;
+ public int b22415;
+ public int b22416;
+ public int b22417;
+ public int b22418;
+ public int b22419;
+ public int b22420;
+ public int b22421;
+ public int b22422;
+ public int b22423;
+ public int b22424;
+ public int b22425;
+ public int b22426;
+ public int b22427;
+ public int b22428;
+ public int b22429;
+ public int b22430;
+ public int b22431;
+ public int b22432;
+ public int b22433;
+ public int b22434;
+ public int b22435;
+ public int b22436;
+ public int b22437;
+ public int b22438;
+ public int b22439;
+ public int b22440;
+ public int b22441;
+ public int b22442;
+ public int b22443;
+ public int b22444;
+ public int b22445;
+ public int b22446;
+ public int b22447;
+ public int b22448;
+ public int b22449;
+ public int b22450;
+ public int b22451;
+ public int b22452;
+ public int b22453;
+ public int b22454;
+ public int b22455;
+ public int b22456;
+ public int b22457;
+ public int b22458;
+ public int b22459;
+ public int b22460;
+ public int b22461;
+ public int b22462;
+ public int b22463;
+ public int b22464;
+ public int b22465;
+ public int b22466;
+ public int b22467;
+ public int b22468;
+ public int b22469;
+ public int b22470;
+ public int b22471;
+ public int b22472;
+ public int b22473;
+ public int b22474;
+ public int b22475;
+ public int b22476;
+ public int b22477;
+ public int b22478;
+ public int b22479;
+ public int b22480;
+ public int b22481;
+ public int b22482;
+ public int b22483;
+ public int b22484;
+ public int b22485;
+ public int b22486;
+ public int b22487;
+ public int b22488;
+ public int b22489;
+ public int b22490;
+ public int b22491;
+ public int b22492;
+ public int b22493;
+ public int b22494;
+ public int b22495;
+ public int b22496;
+ public int b22497;
+ public int b22498;
+ public int b22499;
+ public int b22500;
+ public int b22501;
+ public int b22502;
+ public int b22503;
+ public int b22504;
+ public int b22505;
+ public int b22506;
+ public int b22507;
+ public int b22508;
+ public int b22509;
+ public int b22510;
+ public int b22511;
+ public int b22512;
+ public int b22513;
+ public int b22514;
+ public int b22515;
+ public int b22516;
+ public int b22517;
+ public int b22518;
+ public int b22519;
+ public int b22520;
+ public int b22521;
+ public int b22522;
+ public int b22523;
+ public int b22524;
+ public int b22525;
+ public int b22526;
+ public int b22527;
+ public int b22528;
+ public int b22529;
+ public int b22530;
+ public int b22531;
+ public int b22532;
+ public int b22533;
+ public int b22534;
+ public int b22535;
+ public int b22536;
+ public int b22537;
+ public int b22538;
+ public int b22539;
+ public int b22540;
+ public int b22541;
+ public int b22542;
+ public int b22543;
+ public int b22544;
+ public int b22545;
+ public int b22546;
+ public int b22547;
+ public int b22548;
+ public int b22549;
+ public int b22550;
+ public int b22551;
+ public int b22552;
+ public int b22553;
+ public int b22554;
+ public int b22555;
+ public int b22556;
+ public int b22557;
+ public int b22558;
+ public int b22559;
+ public int b22560;
+ public int b22561;
+ public int b22562;
+ public int b22563;
+ public int b22564;
+ public int b22565;
+ public int b22566;
+ public int b22567;
+ public int b22568;
+ public int b22569;
+ public int b22570;
+ public int b22571;
+ public int b22572;
+ public int b22573;
+ public int b22574;
+ public int b22575;
+ public int b22576;
+ public int b22577;
+ public int b22578;
+ public int b22579;
+ public int b22580;
+ public int b22581;
+ public int b22582;
+ public int b22583;
+ public int b22584;
+ public int b22585;
+ public int b22586;
+ public int b22587;
+ public int b22588;
+ public int b22589;
+ public int b22590;
+ public int b22591;
+ public int b22592;
+ public int b22593;
+ public int b22594;
+ public int b22595;
+ public int b22596;
+ public int b22597;
+ public int b22598;
+ public int b22599;
+ public int b22600;
+ public int b22601;
+ public int b22602;
+ public int b22603;
+ public int b22604;
+ public int b22605;
+ public int b22606;
+ public int b22607;
+ public int b22608;
+ public int b22609;
+ public int b22610;
+ public int b22611;
+ public int b22612;
+ public int b22613;
+ public int b22614;
+ public int b22615;
+ public int b22616;
+ public int b22617;
+ public int b22618;
+ public int b22619;
+ public int b22620;
+ public int b22621;
+ public int b22622;
+ public int b22623;
+ public int b22624;
+ public int b22625;
+ public int b22626;
+ public int b22627;
+ public int b22628;
+ public int b22629;
+ public int b22630;
+ public int b22631;
+ public int b22632;
+ public int b22633;
+ public int b22634;
+ public int b22635;
+ public int b22636;
+ public int b22637;
+ public int b22638;
+ public int b22639;
+ public int b22640;
+ public int b22641;
+ public int b22642;
+ public int b22643;
+ public int b22644;
+ public int b22645;
+ public int b22646;
+ public int b22647;
+ public int b22648;
+ public int b22649;
+ public int b22650;
+ public int b22651;
+ public int b22652;
+ public int b22653;
+ public int b22654;
+ public int b22655;
+ public int b22656;
+ public int b22657;
+ public int b22658;
+ public int b22659;
+ public int b22660;
+ public int b22661;
+ public int b22662;
+ public int b22663;
+ public int b22664;
+ public int b22665;
+ public int b22666;
+ public int b22667;
+ public int b22668;
+ public int b22669;
+ public int b22670;
+ public int b22671;
+ public int b22672;
+ public int b22673;
+ public int b22674;
+ public int b22675;
+ public int b22676;
+ public int b22677;
+ public int b22678;
+ public int b22679;
+ public int b22680;
+ public int b22681;
+ public int b22682;
+ public int b22683;
+ public int b22684;
+ public int b22685;
+ public int b22686;
+ public int b22687;
+ public int b22688;
+ public int b22689;
+ public int b22690;
+ public int b22691;
+ public int b22692;
+ public int b22693;
+ public int b22694;
+ public int b22695;
+ public int b22696;
+ public int b22697;
+ public int b22698;
+ public int b22699;
+ public int b22700;
+ public int b22701;
+ public int b22702;
+ public int b22703;
+ public int b22704;
+ public int b22705;
+ public int b22706;
+ public int b22707;
+ public int b22708;
+ public int b22709;
+ public int b22710;
+ public int b22711;
+ public int b22712;
+ public int b22713;
+ public int b22714;
+ public int b22715;
+ public int b22716;
+ public int b22717;
+ public int b22718;
+ public int b22719;
+ public int b22720;
+ public int b22721;
+ public int b22722;
+ public int b22723;
+ public int b22724;
+ public int b22725;
+ public int b22726;
+ public int b22727;
+ public int b22728;
+ public int b22729;
+ public int b22730;
+ public int b22731;
+ public int b22732;
+ public int b22733;
+ public int b22734;
+ public int b22735;
+ public int b22736;
+ public int b22737;
+ public int b22738;
+ public int b22739;
+ public int b22740;
+ public int b22741;
+ public int b22742;
+ public int b22743;
+ public int b22744;
+ public int b22745;
+ public int b22746;
+ public int b22747;
+ public int b22748;
+ public int b22749;
+ public int b22750;
+ public int b22751;
+ public int b22752;
+ public int b22753;
+ public int b22754;
+ public int b22755;
+ public int b22756;
+ public int b22757;
+ public int b22758;
+ public int b22759;
+ public int b22760;
+ public int b22761;
+ public int b22762;
+ public int b22763;
+ public int b22764;
+ public int b22765;
+ public int b22766;
+ public int b22767;
+ public int b22768;
+ public int b22769;
+ public int b22770;
+ public int b22771;
+ public int b22772;
+ public int b22773;
+ public int b22774;
+ public int b22775;
+ public int b22776;
+ public int b22777;
+ public int b22778;
+ public int b22779;
+ public int b22780;
+ public int b22781;
+ public int b22782;
+ public int b22783;
+ public int b22784;
+ public int b22785;
+ public int b22786;
+ public int b22787;
+ public int b22788;
+ public int b22789;
+ public int b22790;
+ public int b22791;
+ public int b22792;
+ public int b22793;
+ public int b22794;
+ public int b22795;
+ public int b22796;
+ public int b22797;
+ public int b22798;
+ public int b22799;
+ public int b22800;
+ public int b22801;
+ public int b22802;
+ public int b22803;
+ public int b22804;
+ public int b22805;
+ public int b22806;
+ public int b22807;
+ public int b22808;
+ public int b22809;
+ public int b22810;
+ public int b22811;
+ public int b22812;
+ public int b22813;
+ public int b22814;
+ public int b22815;
+ public int b22816;
+ public int b22817;
+ public int b22818;
+ public int b22819;
+ public int b22820;
+ public int b22821;
+ public int b22822;
+ public int b22823;
+ public int b22824;
+ public int b22825;
+ public int b22826;
+ public int b22827;
+ public int b22828;
+ public int b22829;
+ public int b22830;
+ public int b22831;
+ public int b22832;
+ public int b22833;
+ public int b22834;
+ public int b22835;
+ public int b22836;
+ public int b22837;
+ public int b22838;
+ public int b22839;
+ public int b22840;
+ public int b22841;
+ public int b22842;
+ public int b22843;
+ public int b22844;
+ public int b22845;
+ public int b22846;
+ public int b22847;
+ public int b22848;
+ public int b22849;
+ public int b22850;
+ public int b22851;
+ public int b22852;
+ public int b22853;
+ public int b22854;
+ public int b22855;
+ public int b22856;
+ public int b22857;
+ public int b22858;
+ public int b22859;
+ public int b22860;
+ public int b22861;
+ public int b22862;
+ public int b22863;
+ public int b22864;
+ public int b22865;
+ public int b22866;
+ public int b22867;
+ public int b22868;
+ public int b22869;
+ public int b22870;
+ public int b22871;
+ public int b22872;
+ public int b22873;
+ public int b22874;
+ public int b22875;
+ public int b22876;
+ public int b22877;
+ public int b22878;
+ public int b22879;
+ public int b22880;
+ public int b22881;
+ public int b22882;
+ public int b22883;
+ public int b22884;
+ public int b22885;
+ public int b22886;
+ public int b22887;
+ public int b22888;
+ public int b22889;
+ public int b22890;
+ public int b22891;
+ public int b22892;
+ public int b22893;
+ public int b22894;
+ public int b22895;
+ public int b22896;
+ public int b22897;
+ public int b22898;
+ public int b22899;
+ public int b22900;
+ public int b22901;
+ public int b22902;
+ public int b22903;
+ public int b22904;
+ public int b22905;
+ public int b22906;
+ public int b22907;
+ public int b22908;
+ public int b22909;
+ public int b22910;
+ public int b22911;
+ public int b22912;
+ public int b22913;
+ public int b22914;
+ public int b22915;
+ public int b22916;
+ public int b22917;
+ public int b22918;
+ public int b22919;
+ public int b22920;
+ public int b22921;
+ public int b22922;
+ public int b22923;
+ public int b22924;
+ public int b22925;
+ public int b22926;
+ public int b22927;
+ public int b22928;
+ public int b22929;
+ public int b22930;
+ public int b22931;
+ public int b22932;
+ public int b22933;
+ public int b22934;
+ public int b22935;
+ public int b22936;
+ public int b22937;
+ public int b22938;
+ public int b22939;
+ public int b22940;
+ public int b22941;
+ public int b22942;
+ public int b22943;
+ public int b22944;
+ public int b22945;
+ public int b22946;
+ public int b22947;
+ public int b22948;
+ public int b22949;
+ public int b22950;
+ public int b22951;
+ public int b22952;
+ public int b22953;
+ public int b22954;
+ public int b22955;
+ public int b22956;
+ public int b22957;
+ public int b22958;
+ public int b22959;
+ public int b22960;
+ public int b22961;
+ public int b22962;
+ public int b22963;
+ public int b22964;
+ public int b22965;
+ public int b22966;
+ public int b22967;
+ public int b22968;
+ public int b22969;
+ public int b22970;
+ public int b22971;
+ public int b22972;
+ public int b22973;
+ public int b22974;
+ public int b22975;
+ public int b22976;
+ public int b22977;
+ public int b22978;
+ public int b22979;
+ public int b22980;
+ public int b22981;
+ public int b22982;
+ public int b22983;
+ public int b22984;
+ public int b22985;
+ public int b22986;
+ public int b22987;
+ public int b22988;
+ public int b22989;
+ public int b22990;
+ public int b22991;
+ public int b22992;
+ public int b22993;
+ public int b22994;
+ public int b22995;
+ public int b22996;
+ public int b22997;
+ public int b22998;
+ public int b22999;
+ public int b23000;
+ public int b23001;
+ public int b23002;
+ public int b23003;
+ public int b23004;
+ public int b23005;
+ public int b23006;
+ public int b23007;
+ public int b23008;
+ public int b23009;
+ public int b23010;
+ public int b23011;
+ public int b23012;
+ public int b23013;
+ public int b23014;
+ public int b23015;
+ public int b23016;
+ public int b23017;
+ public int b23018;
+ public int b23019;
+ public int b23020;
+ public int b23021;
+ public int b23022;
+ public int b23023;
+ public int b23024;
+ public int b23025;
+ public int b23026;
+ public int b23027;
+ public int b23028;
+ public int b23029;
+ public int b23030;
+ public int b23031;
+ public int b23032;
+ public int b23033;
+ public int b23034;
+ public int b23035;
+ public int b23036;
+ public int b23037;
+ public int b23038;
+ public int b23039;
+ public int b23040;
+ public int b23041;
+ public int b23042;
+ public int b23043;
+ public int b23044;
+ public int b23045;
+ public int b23046;
+ public int b23047;
+ public int b23048;
+ public int b23049;
+ public int b23050;
+ public int b23051;
+ public int b23052;
+ public int b23053;
+ public int b23054;
+ public int b23055;
+ public int b23056;
+ public int b23057;
+ public int b23058;
+ public int b23059;
+ public int b23060;
+ public int b23061;
+ public int b23062;
+ public int b23063;
+ public int b23064;
+ public int b23065;
+ public int b23066;
+ public int b23067;
+ public int b23068;
+ public int b23069;
+ public int b23070;
+ public int b23071;
+ public int b23072;
+ public int b23073;
+ public int b23074;
+ public int b23075;
+ public int b23076;
+ public int b23077;
+ public int b23078;
+ public int b23079;
+ public int b23080;
+ public int b23081;
+ public int b23082;
+ public int b23083;
+ public int b23084;
+ public int b23085;
+ public int b23086;
+ public int b23087;
+ public int b23088;
+ public int b23089;
+ public int b23090;
+ public int b23091;
+ public int b23092;
+ public int b23093;
+ public int b23094;
+ public int b23095;
+ public int b23096;
+ public int b23097;
+ public int b23098;
+ public int b23099;
+ public int b23100;
+ public int b23101;
+ public int b23102;
+ public int b23103;
+ public int b23104;
+ public int b23105;
+ public int b23106;
+ public int b23107;
+ public int b23108;
+ public int b23109;
+ public int b23110;
+ public int b23111;
+ public int b23112;
+ public int b23113;
+ public int b23114;
+ public int b23115;
+ public int b23116;
+ public int b23117;
+ public int b23118;
+ public int b23119;
+ public int b23120;
+ public int b23121;
+ public int b23122;
+ public int b23123;
+ public int b23124;
+ public int b23125;
+ public int b23126;
+ public int b23127;
+ public int b23128;
+ public int b23129;
+ public int b23130;
+ public int b23131;
+ public int b23132;
+ public int b23133;
+ public int b23134;
+ public int b23135;
+ public int b23136;
+ public int b23137;
+ public int b23138;
+ public int b23139;
+ public int b23140;
+ public int b23141;
+ public int b23142;
+ public int b23143;
+ public int b23144;
+ public int b23145;
+ public int b23146;
+ public int b23147;
+ public int b23148;
+ public int b23149;
+ public int b23150;
+ public int b23151;
+ public int b23152;
+ public int b23153;
+ public int b23154;
+ public int b23155;
+ public int b23156;
+ public int b23157;
+ public int b23158;
+ public int b23159;
+ public int b23160;
+ public int b23161;
+ public int b23162;
+ public int b23163;
+ public int b23164;
+ public int b23165;
+ public int b23166;
+ public int b23167;
+ public int b23168;
+ public int b23169;
+ public int b23170;
+ public int b23171;
+ public int b23172;
+ public int b23173;
+ public int b23174;
+ public int b23175;
+ public int b23176;
+ public int b23177;
+ public int b23178;
+ public int b23179;
+ public int b23180;
+ public int b23181;
+ public int b23182;
+ public int b23183;
+ public int b23184;
+ public int b23185;
+ public int b23186;
+ public int b23187;
+ public int b23188;
+ public int b23189;
+ public int b23190;
+ public int b23191;
+ public int b23192;
+ public int b23193;
+ public int b23194;
+ public int b23195;
+ public int b23196;
+ public int b23197;
+ public int b23198;
+ public int b23199;
+ public int b23200;
+ public int b23201;
+ public int b23202;
+ public int b23203;
+ public int b23204;
+ public int b23205;
+ public int b23206;
+ public int b23207;
+ public int b23208;
+ public int b23209;
+ public int b23210;
+ public int b23211;
+ public int b23212;
+ public int b23213;
+ public int b23214;
+ public int b23215;
+ public int b23216;
+ public int b23217;
+ public int b23218;
+ public int b23219;
+ public int b23220;
+ public int b23221;
+ public int b23222;
+ public int b23223;
+ public int b23224;
+ public int b23225;
+ public int b23226;
+ public int b23227;
+ public int b23228;
+ public int b23229;
+ public int b23230;
+ public int b23231;
+ public int b23232;
+ public int b23233;
+ public int b23234;
+ public int b23235;
+ public int b23236;
+ public int b23237;
+ public int b23238;
+ public int b23239;
+ public int b23240;
+ public int b23241;
+ public int b23242;
+ public int b23243;
+ public int b23244;
+ public int b23245;
+ public int b23246;
+ public int b23247;
+ public int b23248;
+ public int b23249;
+ public int b23250;
+ public int b23251;
+ public int b23252;
+ public int b23253;
+ public int b23254;
+ public int b23255;
+ public int b23256;
+ public int b23257;
+ public int b23258;
+ public int b23259;
+ public int b23260;
+ public int b23261;
+ public int b23262;
+ public int b23263;
+ public int b23264;
+ public int b23265;
+ public int b23266;
+ public int b23267;
+ public int b23268;
+ public int b23269;
+ public int b23270;
+ public int b23271;
+ public int b23272;
+ public int b23273;
+ public int b23274;
+ public int b23275;
+ public int b23276;
+ public int b23277;
+ public int b23278;
+ public int b23279;
+ public int b23280;
+ public int b23281;
+ public int b23282;
+ public int b23283;
+ public int b23284;
+ public int b23285;
+ public int b23286;
+ public int b23287;
+ public int b23288;
+ public int b23289;
+ public int b23290;
+ public int b23291;
+ public int b23292;
+ public int b23293;
+ public int b23294;
+ public int b23295;
+ public int b23296;
+ public int b23297;
+ public int b23298;
+ public int b23299;
+ public int b23300;
+ public int b23301;
+ public int b23302;
+ public int b23303;
+ public int b23304;
+ public int b23305;
+ public int b23306;
+ public int b23307;
+ public int b23308;
+ public int b23309;
+ public int b23310;
+ public int b23311;
+ public int b23312;
+ public int b23313;
+ public int b23314;
+ public int b23315;
+ public int b23316;
+ public int b23317;
+ public int b23318;
+ public int b23319;
+ public int b23320;
+ public int b23321;
+ public int b23322;
+ public int b23323;
+ public int b23324;
+ public int b23325;
+ public int b23326;
+ public int b23327;
+ public int b23328;
+ public int b23329;
+ public int b23330;
+ public int b23331;
+ public int b23332;
+ public int b23333;
+ public int b23334;
+ public int b23335;
+ public int b23336;
+ public int b23337;
+ public int b23338;
+ public int b23339;
+ public int b23340;
+ public int b23341;
+ public int b23342;
+ public int b23343;
+ public int b23344;
+ public int b23345;
+ public int b23346;
+ public int b23347;
+ public int b23348;
+ public int b23349;
+ public int b23350;
+ public int b23351;
+ public int b23352;
+ public int b23353;
+ public int b23354;
+ public int b23355;
+ public int b23356;
+ public int b23357;
+ public int b23358;
+ public int b23359;
+ public int b23360;
+ public int b23361;
+ public int b23362;
+ public int b23363;
+ public int b23364;
+ public int b23365;
+ public int b23366;
+ public int b23367;
+ public int b23368;
+ public int b23369;
+ public int b23370;
+ public int b23371;
+ public int b23372;
+ public int b23373;
+ public int b23374;
+ public int b23375;
+ public int b23376;
+ public int b23377;
+ public int b23378;
+ public int b23379;
+ public int b23380;
+ public int b23381;
+ public int b23382;
+ public int b23383;
+ public int b23384;
+ public int b23385;
+ public int b23386;
+ public int b23387;
+ public int b23388;
+ public int b23389;
+ public int b23390;
+ public int b23391;
+ public int b23392;
+ public int b23393;
+ public int b23394;
+ public int b23395;
+ public int b23396;
+ public int b23397;
+ public int b23398;
+ public int b23399;
+ public int b23400;
+ public int b23401;
+ public int b23402;
+ public int b23403;
+ public int b23404;
+ public int b23405;
+ public int b23406;
+ public int b23407;
+ public int b23408;
+ public int b23409;
+ public int b23410;
+ public int b23411;
+ public int b23412;
+ public int b23413;
+ public int b23414;
+ public int b23415;
+ public int b23416;
+ public int b23417;
+ public int b23418;
+ public int b23419;
+ public int b23420;
+ public int b23421;
+ public int b23422;
+ public int b23423;
+ public int b23424;
+ public int b23425;
+ public int b23426;
+ public int b23427;
+ public int b23428;
+ public int b23429;
+ public int b23430;
+ public int b23431;
+ public int b23432;
+ public int b23433;
+ public int b23434;
+ public int b23435;
+ public int b23436;
+ public int b23437;
+ public int b23438;
+ public int b23439;
+ public int b23440;
+ public int b23441;
+ public int b23442;
+ public int b23443;
+ public int b23444;
+ public int b23445;
+ public int b23446;
+ public int b23447;
+ public int b23448;
+ public int b23449;
+ public int b23450;
+ public int b23451;
+ public int b23452;
+ public int b23453;
+ public int b23454;
+ public int b23455;
+ public int b23456;
+ public int b23457;
+ public int b23458;
+ public int b23459;
+ public int b23460;
+ public int b23461;
+ public int b23462;
+ public int b23463;
+ public int b23464;
+ public int b23465;
+ public int b23466;
+ public int b23467;
+ public int b23468;
+ public int b23469;
+ public int b23470;
+ public int b23471;
+ public int b23472;
+ public int b23473;
+ public int b23474;
+ public int b23475;
+ public int b23476;
+ public int b23477;
+ public int b23478;
+ public int b23479;
+ public int b23480;
+ public int b23481;
+ public int b23482;
+ public int b23483;
+ public int b23484;
+ public int b23485;
+ public int b23486;
+ public int b23487;
+ public int b23488;
+ public int b23489;
+ public int b23490;
+ public int b23491;
+ public int b23492;
+ public int b23493;
+ public int b23494;
+ public int b23495;
+ public int b23496;
+ public int b23497;
+ public int b23498;
+ public int b23499;
+ public int b23500;
+ public int b23501;
+ public int b23502;
+ public int b23503;
+ public int b23504;
+ public int b23505;
+ public int b23506;
+ public int b23507;
+ public int b23508;
+ public int b23509;
+ public int b23510;
+ public int b23511;
+ public int b23512;
+ public int b23513;
+ public int b23514;
+ public int b23515;
+ public int b23516;
+ public int b23517;
+ public int b23518;
+ public int b23519;
+ public int b23520;
+ public int b23521;
+ public int b23522;
+ public int b23523;
+ public int b23524;
+ public int b23525;
+ public int b23526;
+ public int b23527;
+ public int b23528;
+ public int b23529;
+ public int b23530;
+ public int b23531;
+ public int b23532;
+ public int b23533;
+ public int b23534;
+ public int b23535;
+ public int b23536;
+ public int b23537;
+ public int b23538;
+ public int b23539;
+ public int b23540;
+ public int b23541;
+ public int b23542;
+ public int b23543;
+ public int b23544;
+ public int b23545;
+ public int b23546;
+ public int b23547;
+ public int b23548;
+ public int b23549;
+ public int b23550;
+ public int b23551;
+ public int b23552;
+ public int b23553;
+ public int b23554;
+ public int b23555;
+ public int b23556;
+ public int b23557;
+ public int b23558;
+ public int b23559;
+ public int b23560;
+ public int b23561;
+ public int b23562;
+ public int b23563;
+ public int b23564;
+ public int b23565;
+ public int b23566;
+ public int b23567;
+ public int b23568;
+ public int b23569;
+ public int b23570;
+ public int b23571;
+ public int b23572;
+ public int b23573;
+ public int b23574;
+ public int b23575;
+ public int b23576;
+ public int b23577;
+ public int b23578;
+ public int b23579;
+ public int b23580;
+ public int b23581;
+ public int b23582;
+ public int b23583;
+ public int b23584;
+ public int b23585;
+ public int b23586;
+ public int b23587;
+ public int b23588;
+ public int b23589;
+ public int b23590;
+ public int b23591;
+ public int b23592;
+ public int b23593;
+ public int b23594;
+ public int b23595;
+ public int b23596;
+ public int b23597;
+ public int b23598;
+ public int b23599;
+ public int b23600;
+ public int b23601;
+ public int b23602;
+ public int b23603;
+ public int b23604;
+ public int b23605;
+ public int b23606;
+ public int b23607;
+ public int b23608;
+ public int b23609;
+ public int b23610;
+ public int b23611;
+ public int b23612;
+ public int b23613;
+ public int b23614;
+ public int b23615;
+ public int b23616;
+ public int b23617;
+ public int b23618;
+ public int b23619;
+ public int b23620;
+ public int b23621;
+ public int b23622;
+ public int b23623;
+ public int b23624;
+ public int b23625;
+ public int b23626;
+ public int b23627;
+ public int b23628;
+ public int b23629;
+ public int b23630;
+ public int b23631;
+ public int b23632;
+ public int b23633;
+ public int b23634;
+ public int b23635;
+ public int b23636;
+ public int b23637;
+ public int b23638;
+ public int b23639;
+ public int b23640;
+ public int b23641;
+ public int b23642;
+ public int b23643;
+ public int b23644;
+ public int b23645;
+ public int b23646;
+ public int b23647;
+ public int b23648;
+ public int b23649;
+ public int b23650;
+ public int b23651;
+ public int b23652;
+ public int b23653;
+ public int b23654;
+ public int b23655;
+ public int b23656;
+ public int b23657;
+ public int b23658;
+ public int b23659;
+ public int b23660;
+ public int b23661;
+ public int b23662;
+ public int b23663;
+ public int b23664;
+ public int b23665;
+ public int b23666;
+ public int b23667;
+ public int b23668;
+ public int b23669;
+ public int b23670;
+ public int b23671;
+ public int b23672;
+ public int b23673;
+ public int b23674;
+ public int b23675;
+ public int b23676;
+ public int b23677;
+ public int b23678;
+ public int b23679;
+ public int b23680;
+ public int b23681;
+ public int b23682;
+ public int b23683;
+ public int b23684;
+ public int b23685;
+ public int b23686;
+ public int b23687;
+ public int b23688;
+ public int b23689;
+ public int b23690;
+ public int b23691;
+ public int b23692;
+ public int b23693;
+ public int b23694;
+ public int b23695;
+ public int b23696;
+ public int b23697;
+ public int b23698;
+ public int b23699;
+ public int b23700;
+ public int b23701;
+ public int b23702;
+ public int b23703;
+ public int b23704;
+ public int b23705;
+ public int b23706;
+ public int b23707;
+ public int b23708;
+ public int b23709;
+ public int b23710;
+ public int b23711;
+ public int b23712;
+ public int b23713;
+ public int b23714;
+ public int b23715;
+ public int b23716;
+ public int b23717;
+ public int b23718;
+ public int b23719;
+ public int b23720;
+ public int b23721;
+ public int b23722;
+ public int b23723;
+ public int b23724;
+ public int b23725;
+ public int b23726;
+ public int b23727;
+ public int b23728;
+ public int b23729;
+ public int b23730;
+ public int b23731;
+ public int b23732;
+ public int b23733;
+ public int b23734;
+ public int b23735;
+ public int b23736;
+ public int b23737;
+ public int b23738;
+ public int b23739;
+ public int b23740;
+ public int b23741;
+ public int b23742;
+ public int b23743;
+ public int b23744;
+ public int b23745;
+ public int b23746;
+ public int b23747;
+ public int b23748;
+ public int b23749;
+ public int b23750;
+ public int b23751;
+ public int b23752;
+ public int b23753;
+ public int b23754;
+ public int b23755;
+ public int b23756;
+ public int b23757;
+ public int b23758;
+ public int b23759;
+ public int b23760;
+ public int b23761;
+ public int b23762;
+ public int b23763;
+ public int b23764;
+ public int b23765;
+ public int b23766;
+ public int b23767;
+ public int b23768;
+ public int b23769;
+ public int b23770;
+ public int b23771;
+ public int b23772;
+ public int b23773;
+ public int b23774;
+ public int b23775;
+ public int b23776;
+ public int b23777;
+ public int b23778;
+ public int b23779;
+ public int b23780;
+ public int b23781;
+ public int b23782;
+ public int b23783;
+ public int b23784;
+ public int b23785;
+ public int b23786;
+ public int b23787;
+ public int b23788;
+ public int b23789;
+ public int b23790;
+ public int b23791;
+ public int b23792;
+ public int b23793;
+ public int b23794;
+ public int b23795;
+ public int b23796;
+ public int b23797;
+ public int b23798;
+ public int b23799;
+ public int b23800;
+ public int b23801;
+ public int b23802;
+ public int b23803;
+ public int b23804;
+ public int b23805;
+ public int b23806;
+ public int b23807;
+ public int b23808;
+ public int b23809;
+ public int b23810;
+ public int b23811;
+ public int b23812;
+ public int b23813;
+ public int b23814;
+ public int b23815;
+ public int b23816;
+ public int b23817;
+ public int b23818;
+ public int b23819;
+ public int b23820;
+ public int b23821;
+ public int b23822;
+ public int b23823;
+ public int b23824;
+ public int b23825;
+ public int b23826;
+ public int b23827;
+ public int b23828;
+ public int b23829;
+ public int b23830;
+ public int b23831;
+ public int b23832;
+ public int b23833;
+ public int b23834;
+ public int b23835;
+ public int b23836;
+ public int b23837;
+ public int b23838;
+ public int b23839;
+ public int b23840;
+ public int b23841;
+ public int b23842;
+ public int b23843;
+ public int b23844;
+ public int b23845;
+ public int b23846;
+ public int b23847;
+ public int b23848;
+ public int b23849;
+ public int b23850;
+ public int b23851;
+ public int b23852;
+ public int b23853;
+ public int b23854;
+ public int b23855;
+ public int b23856;
+ public int b23857;
+ public int b23858;
+ public int b23859;
+ public int b23860;
+ public int b23861;
+ public int b23862;
+ public int b23863;
+ public int b23864;
+ public int b23865;
+ public int b23866;
+ public int b23867;
+ public int b23868;
+ public int b23869;
+ public int b23870;
+ public int b23871;
+ public int b23872;
+ public int b23873;
+ public int b23874;
+ public int b23875;
+ public int b23876;
+ public int b23877;
+ public int b23878;
+ public int b23879;
+ public int b23880;
+ public int b23881;
+ public int b23882;
+ public int b23883;
+ public int b23884;
+ public int b23885;
+ public int b23886;
+ public int b23887;
+ public int b23888;
+ public int b23889;
+ public int b23890;
+ public int b23891;
+ public int b23892;
+ public int b23893;
+ public int b23894;
+ public int b23895;
+ public int b23896;
+ public int b23897;
+ public int b23898;
+ public int b23899;
+ public int b23900;
+ public int b23901;
+ public int b23902;
+ public int b23903;
+ public int b23904;
+ public int b23905;
+ public int b23906;
+ public int b23907;
+ public int b23908;
+ public int b23909;
+ public int b23910;
+ public int b23911;
+ public int b23912;
+ public int b23913;
+ public int b23914;
+ public int b23915;
+ public int b23916;
+ public int b23917;
+ public int b23918;
+ public int b23919;
+ public int b23920;
+ public int b23921;
+ public int b23922;
+ public int b23923;
+ public int b23924;
+ public int b23925;
+ public int b23926;
+ public int b23927;
+ public int b23928;
+ public int b23929;
+ public int b23930;
+ public int b23931;
+ public int b23932;
+ public int b23933;
+ public int b23934;
+ public int b23935;
+ public int b23936;
+ public int b23937;
+ public int b23938;
+ public int b23939;
+ public int b23940;
+ public int b23941;
+ public int b23942;
+ public int b23943;
+ public int b23944;
+ public int b23945;
+ public int b23946;
+ public int b23947;
+ public int b23948;
+ public int b23949;
+ public int b23950;
+ public int b23951;
+ public int b23952;
+ public int b23953;
+ public int b23954;
+ public int b23955;
+ public int b23956;
+ public int b23957;
+ public int b23958;
+ public int b23959;
+ public int b23960;
+ public int b23961;
+ public int b23962;
+ public int b23963;
+ public int b23964;
+ public int b23965;
+ public int b23966;
+ public int b23967;
+ public int b23968;
+ public int b23969;
+ public int b23970;
+ public int b23971;
+ public int b23972;
+ public int b23973;
+ public int b23974;
+ public int b23975;
+ public int b23976;
+ public int b23977;
+ public int b23978;
+ public int b23979;
+ public int b23980;
+ public int b23981;
+ public int b23982;
+ public int b23983;
+ public int b23984;
+ public int b23985;
+ public int b23986;
+ public int b23987;
+ public int b23988;
+ public int b23989;
+ public int b23990;
+ public int b23991;
+ public int b23992;
+ public int b23993;
+ public int b23994;
+ public int b23995;
+ public int b23996;
+ public int b23997;
+ public int b23998;
+ public int b23999;
+ public int b24000;
+ public int b24001;
+ public int b24002;
+ public int b24003;
+ public int b24004;
+ public int b24005;
+ public int b24006;
+ public int b24007;
+ public int b24008;
+ public int b24009;
+ public int b24010;
+ public int b24011;
+ public int b24012;
+ public int b24013;
+ public int b24014;
+ public int b24015;
+ public int b24016;
+ public int b24017;
+ public int b24018;
+ public int b24019;
+ public int b24020;
+ public int b24021;
+ public int b24022;
+ public int b24023;
+ public int b24024;
+ public int b24025;
+ public int b24026;
+ public int b24027;
+ public int b24028;
+ public int b24029;
+ public int b24030;
+ public int b24031;
+ public int b24032;
+ public int b24033;
+ public int b24034;
+ public int b24035;
+ public int b24036;
+ public int b24037;
+ public int b24038;
+ public int b24039;
+ public int b24040;
+ public int b24041;
+ public int b24042;
+ public int b24043;
+ public int b24044;
+ public int b24045;
+ public int b24046;
+ public int b24047;
+ public int b24048;
+ public int b24049;
+ public int b24050;
+ public int b24051;
+ public int b24052;
+ public int b24053;
+ public int b24054;
+ public int b24055;
+ public int b24056;
+ public int b24057;
+ public int b24058;
+ public int b24059;
+ public int b24060;
+ public int b24061;
+ public int b24062;
+ public int b24063;
+ public int b24064;
+ public int b24065;
+ public int b24066;
+ public int b24067;
+ public int b24068;
+ public int b24069;
+ public int b24070;
+ public int b24071;
+ public int b24072;
+ public int b24073;
+ public int b24074;
+ public int b24075;
+ public int b24076;
+ public int b24077;
+ public int b24078;
+ public int b24079;
+ public int b24080;
+ public int b24081;
+ public int b24082;
+ public int b24083;
+ public int b24084;
+ public int b24085;
+ public int b24086;
+ public int b24087;
+ public int b24088;
+ public int b24089;
+ public int b24090;
+ public int b24091;
+ public int b24092;
+ public int b24093;
+ public int b24094;
+ public int b24095;
+ public int b24096;
+ public int b24097;
+ public int b24098;
+ public int b24099;
+ public int b24100;
+ public int b24101;
+ public int b24102;
+ public int b24103;
+ public int b24104;
+ public int b24105;
+ public int b24106;
+ public int b24107;
+ public int b24108;
+ public int b24109;
+ public int b24110;
+ public int b24111;
+ public int b24112;
+ public int b24113;
+ public int b24114;
+ public int b24115;
+ public int b24116;
+ public int b24117;
+ public int b24118;
+ public int b24119;
+ public int b24120;
+ public int b24121;
+ public int b24122;
+ public int b24123;
+ public int b24124;
+ public int b24125;
+ public int b24126;
+ public int b24127;
+ public int b24128;
+ public int b24129;
+ public int b24130;
+ public int b24131;
+ public int b24132;
+ public int b24133;
+ public int b24134;
+ public int b24135;
+ public int b24136;
+ public int b24137;
+ public int b24138;
+ public int b24139;
+ public int b24140;
+ public int b24141;
+ public int b24142;
+ public int b24143;
+ public int b24144;
+ public int b24145;
+ public int b24146;
+ public int b24147;
+ public int b24148;
+ public int b24149;
+ public int b24150;
+ public int b24151;
+ public int b24152;
+ public int b24153;
+ public int b24154;
+ public int b24155;
+ public int b24156;
+ public int b24157;
+ public int b24158;
+ public int b24159;
+ public int b24160;
+ public int b24161;
+ public int b24162;
+ public int b24163;
+ public int b24164;
+ public int b24165;
+ public int b24166;
+ public int b24167;
+ public int b24168;
+ public int b24169;
+ public int b24170;
+ public int b24171;
+ public int b24172;
+ public int b24173;
+ public int b24174;
+ public int b24175;
+ public int b24176;
+ public int b24177;
+ public int b24178;
+ public int b24179;
+ public int b24180;
+ public int b24181;
+ public int b24182;
+ public int b24183;
+ public int b24184;
+ public int b24185;
+ public int b24186;
+ public int b24187;
+ public int b24188;
+ public int b24189;
+ public int b24190;
+ public int b24191;
+ public int b24192;
+ public int b24193;
+ public int b24194;
+ public int b24195;
+ public int b24196;
+ public int b24197;
+ public int b24198;
+ public int b24199;
+ public int b24200;
+ public int b24201;
+ public int b24202;
+ public int b24203;
+ public int b24204;
+ public int b24205;
+ public int b24206;
+ public int b24207;
+ public int b24208;
+ public int b24209;
+ public int b24210;
+ public int b24211;
+ public int b24212;
+ public int b24213;
+ public int b24214;
+ public int b24215;
+ public int b24216;
+ public int b24217;
+ public int b24218;
+ public int b24219;
+ public int b24220;
+ public int b24221;
+ public int b24222;
+ public int b24223;
+ public int b24224;
+ public int b24225;
+ public int b24226;
+ public int b24227;
+ public int b24228;
+ public int b24229;
+ public int b24230;
+ public int b24231;
+ public int b24232;
+ public int b24233;
+ public int b24234;
+ public int b24235;
+ public int b24236;
+ public int b24237;
+ public int b24238;
+ public int b24239;
+ public int b24240;
+ public int b24241;
+ public int b24242;
+ public int b24243;
+ public int b24244;
+ public int b24245;
+ public int b24246;
+ public int b24247;
+ public int b24248;
+ public int b24249;
+ public int b24250;
+ public int b24251;
+ public int b24252;
+ public int b24253;
+ public int b24254;
+ public int b24255;
+ public int b24256;
+ public int b24257;
+ public int b24258;
+ public int b24259;
+ public int b24260;
+ public int b24261;
+ public int b24262;
+ public int b24263;
+ public int b24264;
+ public int b24265;
+ public int b24266;
+ public int b24267;
+ public int b24268;
+ public int b24269;
+ public int b24270;
+ public int b24271;
+ public int b24272;
+ public int b24273;
+ public int b24274;
+ public int b24275;
+ public int b24276;
+ public int b24277;
+ public int b24278;
+ public int b24279;
+ public int b24280;
+ public int b24281;
+ public int b24282;
+ public int b24283;
+ public int b24284;
+ public int b24285;
+ public int b24286;
+ public int b24287;
+ public int b24288;
+ public int b24289;
+ public int b24290;
+ public int b24291;
+ public int b24292;
+ public int b24293;
+ public int b24294;
+ public int b24295;
+ public int b24296;
+ public int b24297;
+ public int b24298;
+ public int b24299;
+ public int b24300;
+ public int b24301;
+ public int b24302;
+ public int b24303;
+ public int b24304;
+ public int b24305;
+ public int b24306;
+ public int b24307;
+ public int b24308;
+ public int b24309;
+ public int b24310;
+ public int b24311;
+ public int b24312;
+ public int b24313;
+ public int b24314;
+ public int b24315;
+ public int b24316;
+ public int b24317;
+ public int b24318;
+ public int b24319;
+ public int b24320;
+ public int b24321;
+ public int b24322;
+ public int b24323;
+ public int b24324;
+ public int b24325;
+ public int b24326;
+ public int b24327;
+ public int b24328;
+ public int b24329;
+ public int b24330;
+ public int b24331;
+ public int b24332;
+ public int b24333;
+ public int b24334;
+ public int b24335;
+ public int b24336;
+ public int b24337;
+ public int b24338;
+ public int b24339;
+ public int b24340;
+ public int b24341;
+ public int b24342;
+ public int b24343;
+ public int b24344;
+ public int b24345;
+ public int b24346;
+ public int b24347;
+ public int b24348;
+ public int b24349;
+ public int b24350;
+ public int b24351;
+ public int b24352;
+ public int b24353;
+ public int b24354;
+ public int b24355;
+ public int b24356;
+ public int b24357;
+ public int b24358;
+ public int b24359;
+ public int b24360;
+ public int b24361;
+ public int b24362;
+ public int b24363;
+ public int b24364;
+ public int b24365;
+ public int b24366;
+ public int b24367;
+ public int b24368;
+ public int b24369;
+ public int b24370;
+ public int b24371;
+ public int b24372;
+ public int b24373;
+ public int b24374;
+ public int b24375;
+ public int b24376;
+ public int b24377;
+ public int b24378;
+ public int b24379;
+ public int b24380;
+ public int b24381;
+ public int b24382;
+ public int b24383;
+ public int b24384;
+ public int b24385;
+ public int b24386;
+ public int b24387;
+ public int b24388;
+ public int b24389;
+ public int b24390;
+ public int b24391;
+ public int b24392;
+ public int b24393;
+ public int b24394;
+ public int b24395;
+ public int b24396;
+ public int b24397;
+ public int b24398;
+ public int b24399;
+ public int b24400;
+ public int b24401;
+ public int b24402;
+ public int b24403;
+ public int b24404;
+ public int b24405;
+ public int b24406;
+ public int b24407;
+ public int b24408;
+ public int b24409;
+ public int b24410;
+ public int b24411;
+ public int b24412;
+ public int b24413;
+ public int b24414;
+ public int b24415;
+ public int b24416;
+ public int b24417;
+ public int b24418;
+ public int b24419;
+ public int b24420;
+ public int b24421;
+ public int b24422;
+ public int b24423;
+ public int b24424;
+ public int b24425;
+ public int b24426;
+ public int b24427;
+ public int b24428;
+ public int b24429;
+ public int b24430;
+ public int b24431;
+ public int b24432;
+ public int b24433;
+ public int b24434;
+ public int b24435;
+ public int b24436;
+ public int b24437;
+ public int b24438;
+ public int b24439;
+ public int b24440;
+ public int b24441;
+ public int b24442;
+ public int b24443;
+ public int b24444;
+ public int b24445;
+ public int b24446;
+ public int b24447;
+ public int b24448;
+ public int b24449;
+ public int b24450;
+ public int b24451;
+ public int b24452;
+ public int b24453;
+ public int b24454;
+ public int b24455;
+ public int b24456;
+ public int b24457;
+ public int b24458;
+ public int b24459;
+ public int b24460;
+ public int b24461;
+ public int b24462;
+ public int b24463;
+ public int b24464;
+ public int b24465;
+ public int b24466;
+ public int b24467;
+ public int b24468;
+ public int b24469;
+ public int b24470;
+ public int b24471;
+ public int b24472;
+ public int b24473;
+ public int b24474;
+ public int b24475;
+ public int b24476;
+ public int b24477;
+ public int b24478;
+ public int b24479;
+ public int b24480;
+ public int b24481;
+ public int b24482;
+ public int b24483;
+ public int b24484;
+ public int b24485;
+ public int b24486;
+ public int b24487;
+ public int b24488;
+ public int b24489;
+ public int b24490;
+ public int b24491;
+ public int b24492;
+ public int b24493;
+ public int b24494;
+ public int b24495;
+ public int b24496;
+ public int b24497;
+ public int b24498;
+ public int b24499;
+ public int b24500;
+ public int b24501;
+ public int b24502;
+ public int b24503;
+ public int b24504;
+ public int b24505;
+ public int b24506;
+ public int b24507;
+ public int b24508;
+ public int b24509;
+ public int b24510;
+ public int b24511;
+ public int b24512;
+ public int b24513;
+ public int b24514;
+ public int b24515;
+ public int b24516;
+ public int b24517;
+ public int b24518;
+ public int b24519;
+ public int b24520;
+ public int b24521;
+ public int b24522;
+ public int b24523;
+ public int b24524;
+ public int b24525;
+ public int b24526;
+ public int b24527;
+ public int b24528;
+ public int b24529;
+ public int b24530;
+ public int b24531;
+ public int b24532;
+ public int b24533;
+ public int b24534;
+ public int b24535;
+ public int b24536;
+ public int b24537;
+ public int b24538;
+ public int b24539;
+ public int b24540;
+ public int b24541;
+ public int b24542;
+ public int b24543;
+ public int b24544;
+ public int b24545;
+ public int b24546;
+ public int b24547;
+ public int b24548;
+ public int b24549;
+ public int b24550;
+ public int b24551;
+ public int b24552;
+ public int b24553;
+ public int b24554;
+ public int b24555;
+ public int b24556;
+ public int b24557;
+ public int b24558;
+ public int b24559;
+ public int b24560;
+ public int b24561;
+ public int b24562;
+ public int b24563;
+ public int b24564;
+ public int b24565;
+ public int b24566;
+ public int b24567;
+ public int b24568;
+ public int b24569;
+ public int b24570;
+ public int b24571;
+ public int b24572;
+ public int b24573;
+ public int b24574;
+ public int b24575;
+ public int b24576;
+ public int b24577;
+ public int b24578;
+ public int b24579;
+ public int b24580;
+ public int b24581;
+ public int b24582;
+ public int b24583;
+ public int b24584;
+ public int b24585;
+ public int b24586;
+ public int b24587;
+ public int b24588;
+ public int b24589;
+ public int b24590;
+ public int b24591;
+ public int b24592;
+ public int b24593;
+ public int b24594;
+ public int b24595;
+ public int b24596;
+ public int b24597;
+ public int b24598;
+ public int b24599;
+ public int b24600;
+ public int b24601;
+ public int b24602;
+ public int b24603;
+ public int b24604;
+ public int b24605;
+ public int b24606;
+ public int b24607;
+ public int b24608;
+ public int b24609;
+ public int b24610;
+ public int b24611;
+ public int b24612;
+ public int b24613;
+ public int b24614;
+ public int b24615;
+ public int b24616;
+ public int b24617;
+ public int b24618;
+ public int b24619;
+ public int b24620;
+ public int b24621;
+ public int b24622;
+ public int b24623;
+ public int b24624;
+ public int b24625;
+ public int b24626;
+ public int b24627;
+ public int b24628;
+ public int b24629;
+ public int b24630;
+ public int b24631;
+ public int b24632;
+ public int b24633;
+ public int b24634;
+ public int b24635;
+ public int b24636;
+ public int b24637;
+ public int b24638;
+ public int b24639;
+ public int b24640;
+ public int b24641;
+ public int b24642;
+ public int b24643;
+ public int b24644;
+ public int b24645;
+ public int b24646;
+ public int b24647;
+ public int b24648;
+ public int b24649;
+ public int b24650;
+ public int b24651;
+ public int b24652;
+ public int b24653;
+ public int b24654;
+ public int b24655;
+ public int b24656;
+ public int b24657;
+ public int b24658;
+ public int b24659;
+ public int b24660;
+ public int b24661;
+ public int b24662;
+ public int b24663;
+ public int b24664;
+ public int b24665;
+ public int b24666;
+ public int b24667;
+ public int b24668;
+ public int b24669;
+ public int b24670;
+ public int b24671;
+ public int b24672;
+ public int b24673;
+ public int b24674;
+ public int b24675;
+ public int b24676;
+ public int b24677;
+ public int b24678;
+ public int b24679;
+ public int b24680;
+ public int b24681;
+ public int b24682;
+ public int b24683;
+ public int b24684;
+ public int b24685;
+ public int b24686;
+ public int b24687;
+ public int b24688;
+ public int b24689;
+ public int b24690;
+ public int b24691;
+ public int b24692;
+ public int b24693;
+ public int b24694;
+ public int b24695;
+ public int b24696;
+ public int b24697;
+ public int b24698;
+ public int b24699;
+ public int b24700;
+ public int b24701;
+ public int b24702;
+ public int b24703;
+ public int b24704;
+ public int b24705;
+ public int b24706;
+ public int b24707;
+ public int b24708;
+ public int b24709;
+ public int b24710;
+ public int b24711;
+ public int b24712;
+ public int b24713;
+ public int b24714;
+ public int b24715;
+ public int b24716;
+ public int b24717;
+ public int b24718;
+ public int b24719;
+ public int b24720;
+ public int b24721;
+ public int b24722;
+ public int b24723;
+ public int b24724;
+ public int b24725;
+ public int b24726;
+ public int b24727;
+ public int b24728;
+ public int b24729;
+ public int b24730;
+ public int b24731;
+ public int b24732;
+ public int b24733;
+ public int b24734;
+ public int b24735;
+ public int b24736;
+ public int b24737;
+ public int b24738;
+ public int b24739;
+ public int b24740;
+ public int b24741;
+ public int b24742;
+ public int b24743;
+ public int b24744;
+ public int b24745;
+ public int b24746;
+ public int b24747;
+ public int b24748;
+ public int b24749;
+ public int b24750;
+ public int b24751;
+ public int b24752;
+ public int b24753;
+ public int b24754;
+ public int b24755;
+ public int b24756;
+ public int b24757;
+ public int b24758;
+ public int b24759;
+ public int b24760;
+ public int b24761;
+ public int b24762;
+ public int b24763;
+ public int b24764;
+ public int b24765;
+ public int b24766;
+ public int b24767;
+ public int b24768;
+ public int b24769;
+ public int b24770;
+ public int b24771;
+ public int b24772;
+ public int b24773;
+ public int b24774;
+ public int b24775;
+ public int b24776;
+ public int b24777;
+ public int b24778;
+ public int b24779;
+ public int b24780;
+ public int b24781;
+ public int b24782;
+ public int b24783;
+ public int b24784;
+ public int b24785;
+ public int b24786;
+ public int b24787;
+ public int b24788;
+ public int b24789;
+ public int b24790;
+ public int b24791;
+ public int b24792;
+ public int b24793;
+ public int b24794;
+ public int b24795;
+ public int b24796;
+ public int b24797;
+ public int b24798;
+ public int b24799;
+ public int b24800;
+ public int b24801;
+ public int b24802;
+ public int b24803;
+ public int b24804;
+ public int b24805;
+ public int b24806;
+ public int b24807;
+ public int b24808;
+ public int b24809;
+ public int b24810;
+ public int b24811;
+ public int b24812;
+ public int b24813;
+ public int b24814;
+ public int b24815;
+ public int b24816;
+ public int b24817;
+ public int b24818;
+ public int b24819;
+ public int b24820;
+ public int b24821;
+ public int b24822;
+ public int b24823;
+ public int b24824;
+ public int b24825;
+ public int b24826;
+ public int b24827;
+ public int b24828;
+ public int b24829;
+ public int b24830;
+ public int b24831;
+ public int b24832;
+ public int b24833;
+ public int b24834;
+ public int b24835;
+ public int b24836;
+ public int b24837;
+ public int b24838;
+ public int b24839;
+ public int b24840;
+ public int b24841;
+ public int b24842;
+ public int b24843;
+ public int b24844;
+ public int b24845;
+ public int b24846;
+ public int b24847;
+ public int b24848;
+ public int b24849;
+ public int b24850;
+ public int b24851;
+ public int b24852;
+ public int b24853;
+ public int b24854;
+ public int b24855;
+ public int b24856;
+ public int b24857;
+ public int b24858;
+ public int b24859;
+ public int b24860;
+ public int b24861;
+ public int b24862;
+ public int b24863;
+ public int b24864;
+ public int b24865;
+ public int b24866;
+ public int b24867;
+ public int b24868;
+ public int b24869;
+ public int b24870;
+ public int b24871;
+ public int b24872;
+ public int b24873;
+ public int b24874;
+ public int b24875;
+ public int b24876;
+ public int b24877;
+ public int b24878;
+ public int b24879;
+ public int b24880;
+ public int b24881;
+ public int b24882;
+ public int b24883;
+ public int b24884;
+ public int b24885;
+ public int b24886;
+ public int b24887;
+ public int b24888;
+ public int b24889;
+ public int b24890;
+ public int b24891;
+ public int b24892;
+ public int b24893;
+ public int b24894;
+ public int b24895;
+ public int b24896;
+ public int b24897;
+ public int b24898;
+ public int b24899;
+ public int b24900;
+ public int b24901;
+ public int b24902;
+ public int b24903;
+ public int b24904;
+ public int b24905;
+ public int b24906;
+ public int b24907;
+ public int b24908;
+ public int b24909;
+ public int b24910;
+ public int b24911;
+ public int b24912;
+ public int b24913;
+ public int b24914;
+ public int b24915;
+ public int b24916;
+ public int b24917;
+ public int b24918;
+ public int b24919;
+ public int b24920;
+ public int b24921;
+ public int b24922;
+ public int b24923;
+ public int b24924;
+ public int b24925;
+ public int b24926;
+ public int b24927;
+ public int b24928;
+ public int b24929;
+ public int b24930;
+ public int b24931;
+ public int b24932;
+ public int b24933;
+ public int b24934;
+ public int b24935;
+ public int b24936;
+ public int b24937;
+ public int b24938;
+ public int b24939;
+ public int b24940;
+ public int b24941;
+ public int b24942;
+ public int b24943;
+ public int b24944;
+ public int b24945;
+ public int b24946;
+ public int b24947;
+ public int b24948;
+ public int b24949;
+ public int b24950;
+ public int b24951;
+ public int b24952;
+ public int b24953;
+ public int b24954;
+ public int b24955;
+ public int b24956;
+ public int b24957;
+ public int b24958;
+ public int b24959;
+ public int b24960;
+ public int b24961;
+ public int b24962;
+ public int b24963;
+ public int b24964;
+ public int b24965;
+ public int b24966;
+ public int b24967;
+ public int b24968;
+ public int b24969;
+ public int b24970;
+ public int b24971;
+ public int b24972;
+ public int b24973;
+ public int b24974;
+ public int b24975;
+ public int b24976;
+ public int b24977;
+ public int b24978;
+ public int b24979;
+ public int b24980;
+ public int b24981;
+ public int b24982;
+ public int b24983;
+ public int b24984;
+ public int b24985;
+ public int b24986;
+ public int b24987;
+ public int b24988;
+ public int b24989;
+ public int b24990;
+ public int b24991;
+ public int b24992;
+ public int b24993;
+ public int b24994;
+ public int b24995;
+ public int b24996;
+ public int b24997;
+ public int b24998;
+ public int b24999;
+ public int b25000;
+ public int b25001;
+ public int b25002;
+ public int b25003;
+ public int b25004;
+ public int b25005;
+ public int b25006;
+ public int b25007;
+ public int b25008;
+ public int b25009;
+ public int b25010;
+ public int b25011;
+ public int b25012;
+ public int b25013;
+ public int b25014;
+ public int b25015;
+ public int b25016;
+ public int b25017;
+ public int b25018;
+ public int b25019;
+ public int b25020;
+ public int b25021;
+ public int b25022;
+ public int b25023;
+ public int b25024;
+ public int b25025;
+ public int b25026;
+ public int b25027;
+ public int b25028;
+ public int b25029;
+ public int b25030;
+ public int b25031;
+ public int b25032;
+ public int b25033;
+ public int b25034;
+ public int b25035;
+ public int b25036;
+ public int b25037;
+ public int b25038;
+ public int b25039;
+ public int b25040;
+ public int b25041;
+ public int b25042;
+ public int b25043;
+ public int b25044;
+ public int b25045;
+ public int b25046;
+ public int b25047;
+ public int b25048;
+ public int b25049;
+ public int b25050;
+ public int b25051;
+ public int b25052;
+ public int b25053;
+ public int b25054;
+ public int b25055;
+ public int b25056;
+ public int b25057;
+ public int b25058;
+ public int b25059;
+ public int b25060;
+ public int b25061;
+ public int b25062;
+ public int b25063;
+ public int b25064;
+ public int b25065;
+ public int b25066;
+ public int b25067;
+ public int b25068;
+ public int b25069;
+ public int b25070;
+ public int b25071;
+ public int b25072;
+ public int b25073;
+ public int b25074;
+ public int b25075;
+ public int b25076;
+ public int b25077;
+ public int b25078;
+ public int b25079;
+ public int b25080;
+ public int b25081;
+ public int b25082;
+ public int b25083;
+ public int b25084;
+ public int b25085;
+ public int b25086;
+ public int b25087;
+ public int b25088;
+ public int b25089;
+ public int b25090;
+ public int b25091;
+ public int b25092;
+ public int b25093;
+ public int b25094;
+ public int b25095;
+ public int b25096;
+ public int b25097;
+ public int b25098;
+ public int b25099;
+ public int b25100;
+ public int b25101;
+ public int b25102;
+ public int b25103;
+ public int b25104;
+ public int b25105;
+ public int b25106;
+ public int b25107;
+ public int b25108;
+ public int b25109;
+ public int b25110;
+ public int b25111;
+ public int b25112;
+ public int b25113;
+ public int b25114;
+ public int b25115;
+ public int b25116;
+ public int b25117;
+ public int b25118;
+ public int b25119;
+ public int b25120;
+ public int b25121;
+ public int b25122;
+ public int b25123;
+ public int b25124;
+ public int b25125;
+ public int b25126;
+ public int b25127;
+ public int b25128;
+ public int b25129;
+ public int b25130;
+ public int b25131;
+ public int b25132;
+ public int b25133;
+ public int b25134;
+ public int b25135;
+ public int b25136;
+ public int b25137;
+ public int b25138;
+ public int b25139;
+ public int b25140;
+ public int b25141;
+ public int b25142;
+ public int b25143;
+ public int b25144;
+ public int b25145;
+ public int b25146;
+ public int b25147;
+ public int b25148;
+ public int b25149;
+ public int b25150;
+ public int b25151;
+ public int b25152;
+ public int b25153;
+ public int b25154;
+ public int b25155;
+ public int b25156;
+ public int b25157;
+ public int b25158;
+ public int b25159;
+ public int b25160;
+ public int b25161;
+ public int b25162;
+ public int b25163;
+ public int b25164;
+ public int b25165;
+ public int b25166;
+ public int b25167;
+ public int b25168;
+ public int b25169;
+ public int b25170;
+ public int b25171;
+ public int b25172;
+ public int b25173;
+ public int b25174;
+ public int b25175;
+ public int b25176;
+ public int b25177;
+ public int b25178;
+ public int b25179;
+ public int b25180;
+ public int b25181;
+ public int b25182;
+ public int b25183;
+ public int b25184;
+ public int b25185;
+ public int b25186;
+ public int b25187;
+ public int b25188;
+ public int b25189;
+ public int b25190;
+ public int b25191;
+ public int b25192;
+ public int b25193;
+ public int b25194;
+ public int b25195;
+ public int b25196;
+ public int b25197;
+ public int b25198;
+ public int b25199;
+ public int b25200;
+ public int b25201;
+ public int b25202;
+ public int b25203;
+ public int b25204;
+ public int b25205;
+ public int b25206;
+ public int b25207;
+ public int b25208;
+ public int b25209;
+ public int b25210;
+ public int b25211;
+ public int b25212;
+ public int b25213;
+ public int b25214;
+ public int b25215;
+ public int b25216;
+ public int b25217;
+ public int b25218;
+ public int b25219;
+ public int b25220;
+ public int b25221;
+ public int b25222;
+ public int b25223;
+ public int b25224;
+ public int b25225;
+ public int b25226;
+ public int b25227;
+ public int b25228;
+ public int b25229;
+ public int b25230;
+ public int b25231;
+ public int b25232;
+ public int b25233;
+ public int b25234;
+ public int b25235;
+ public int b25236;
+ public int b25237;
+ public int b25238;
+ public int b25239;
+ public int b25240;
+ public int b25241;
+ public int b25242;
+ public int b25243;
+ public int b25244;
+ public int b25245;
+ public int b25246;
+ public int b25247;
+ public int b25248;
+ public int b25249;
+ public int b25250;
+ public int b25251;
+ public int b25252;
+ public int b25253;
+ public int b25254;
+ public int b25255;
+ public int b25256;
+ public int b25257;
+ public int b25258;
+ public int b25259;
+ public int b25260;
+ public int b25261;
+ public int b25262;
+ public int b25263;
+ public int b25264;
+ public int b25265;
+ public int b25266;
+ public int b25267;
+ public int b25268;
+ public int b25269;
+ public int b25270;
+ public int b25271;
+ public int b25272;
+ public int b25273;
+ public int b25274;
+ public int b25275;
+ public int b25276;
+ public int b25277;
+ public int b25278;
+ public int b25279;
+ public int b25280;
+ public int b25281;
+ public int b25282;
+ public int b25283;
+ public int b25284;
+ public int b25285;
+ public int b25286;
+ public int b25287;
+ public int b25288;
+ public int b25289;
+ public int b25290;
+ public int b25291;
+ public int b25292;
+ public int b25293;
+ public int b25294;
+ public int b25295;
+ public int b25296;
+ public int b25297;
+ public int b25298;
+ public int b25299;
+ public int b25300;
+ public int b25301;
+ public int b25302;
+ public int b25303;
+ public int b25304;
+ public int b25305;
+ public int b25306;
+ public int b25307;
+ public int b25308;
+ public int b25309;
+ public int b25310;
+ public int b25311;
+ public int b25312;
+ public int b25313;
+ public int b25314;
+ public int b25315;
+ public int b25316;
+ public int b25317;
+ public int b25318;
+ public int b25319;
+ public int b25320;
+ public int b25321;
+ public int b25322;
+ public int b25323;
+ public int b25324;
+ public int b25325;
+ public int b25326;
+ public int b25327;
+ public int b25328;
+ public int b25329;
+ public int b25330;
+ public int b25331;
+ public int b25332;
+ public int b25333;
+ public int b25334;
+ public int b25335;
+ public int b25336;
+ public int b25337;
+ public int b25338;
+ public int b25339;
+ public int b25340;
+ public int b25341;
+ public int b25342;
+ public int b25343;
+ public int b25344;
+ public int b25345;
+ public int b25346;
+ public int b25347;
+ public int b25348;
+ public int b25349;
+ public int b25350;
+ public int b25351;
+ public int b25352;
+ public int b25353;
+ public int b25354;
+ public int b25355;
+ public int b25356;
+ public int b25357;
+ public int b25358;
+ public int b25359;
+ public int b25360;
+ public int b25361;
+ public int b25362;
+ public int b25363;
+ public int b25364;
+ public int b25365;
+ public int b25366;
+ public int b25367;
+ public int b25368;
+ public int b25369;
+ public int b25370;
+ public int b25371;
+ public int b25372;
+ public int b25373;
+ public int b25374;
+ public int b25375;
+ public int b25376;
+ public int b25377;
+ public int b25378;
+ public int b25379;
+ public int b25380;
+ public int b25381;
+ public int b25382;
+ public int b25383;
+ public int b25384;
+ public int b25385;
+ public int b25386;
+ public int b25387;
+ public int b25388;
+ public int b25389;
+ public int b25390;
+ public int b25391;
+ public int b25392;
+ public int b25393;
+ public int b25394;
+ public int b25395;
+ public int b25396;
+ public int b25397;
+ public int b25398;
+ public int b25399;
+ public int b25400;
+ public int b25401;
+ public int b25402;
+ public int b25403;
+ public int b25404;
+ public int b25405;
+ public int b25406;
+ public int b25407;
+ public int b25408;
+ public int b25409;
+ public int b25410;
+ public int b25411;
+ public int b25412;
+ public int b25413;
+ public int b25414;
+ public int b25415;
+ public int b25416;
+ public int b25417;
+ public int b25418;
+ public int b25419;
+ public int b25420;
+ public int b25421;
+ public int b25422;
+ public int b25423;
+ public int b25424;
+ public int b25425;
+ public int b25426;
+ public int b25427;
+ public int b25428;
+ public int b25429;
+ public int b25430;
+ public int b25431;
+ public int b25432;
+ public int b25433;
+ public int b25434;
+ public int b25435;
+ public int b25436;
+ public int b25437;
+ public int b25438;
+ public int b25439;
+ public int b25440;
+ public int b25441;
+ public int b25442;
+ public int b25443;
+ public int b25444;
+ public int b25445;
+ public int b25446;
+ public int b25447;
+ public int b25448;
+ public int b25449;
+ public int b25450;
+ public int b25451;
+ public int b25452;
+ public int b25453;
+ public int b25454;
+ public int b25455;
+ public int b25456;
+ public int b25457;
+ public int b25458;
+ public int b25459;
+ public int b25460;
+ public int b25461;
+ public int b25462;
+ public int b25463;
+ public int b25464;
+ public int b25465;
+ public int b25466;
+ public int b25467;
+ public int b25468;
+ public int b25469;
+ public int b25470;
+ public int b25471;
+ public int b25472;
+ public int b25473;
+ public int b25474;
+ public int b25475;
+ public int b25476;
+ public int b25477;
+ public int b25478;
+ public int b25479;
+ public int b25480;
+ public int b25481;
+ public int b25482;
+ public int b25483;
+ public int b25484;
+ public int b25485;
+ public int b25486;
+ public int b25487;
+ public int b25488;
+ public int b25489;
+ public int b25490;
+ public int b25491;
+ public int b25492;
+ public int b25493;
+ public int b25494;
+ public int b25495;
+ public int b25496;
+ public int b25497;
+ public int b25498;
+ public int b25499;
+ public int b25500;
+ public int b25501;
+ public int b25502;
+ public int b25503;
+ public int b25504;
+ public int b25505;
+ public int b25506;
+ public int b25507;
+ public int b25508;
+ public int b25509;
+ public int b25510;
+ public int b25511;
+ public int b25512;
+ public int b25513;
+ public int b25514;
+ public int b25515;
+ public int b25516;
+ public int b25517;
+ public int b25518;
+ public int b25519;
+ public int b25520;
+ public int b25521;
+ public int b25522;
+ public int b25523;
+ public int b25524;
+ public int b25525;
+ public int b25526;
+ public int b25527;
+ public int b25528;
+ public int b25529;
+ public int b25530;
+ public int b25531;
+ public int b25532;
+ public int b25533;
+ public int b25534;
+ public int b25535;
+ public int b25536;
+ public int b25537;
+ public int b25538;
+ public int b25539;
+ public int b25540;
+ public int b25541;
+ public int b25542;
+ public int b25543;
+ public int b25544;
+ public int b25545;
+ public int b25546;
+ public int b25547;
+ public int b25548;
+ public int b25549;
+ public int b25550;
+ public int b25551;
+ public int b25552;
+ public int b25553;
+ public int b25554;
+ public int b25555;
+ public int b25556;
+ public int b25557;
+ public int b25558;
+ public int b25559;
+ public int b25560;
+ public int b25561;
+ public int b25562;
+ public int b25563;
+ public int b25564;
+ public int b25565;
+ public int b25566;
+ public int b25567;
+ public int b25568;
+ public int b25569;
+ public int b25570;
+ public int b25571;
+ public int b25572;
+ public int b25573;
+ public int b25574;
+ public int b25575;
+ public int b25576;
+ public int b25577;
+ public int b25578;
+ public int b25579;
+ public int b25580;
+ public int b25581;
+ public int b25582;
+ public int b25583;
+ public int b25584;
+ public int b25585;
+ public int b25586;
+ public int b25587;
+ public int b25588;
+ public int b25589;
+ public int b25590;
+ public int b25591;
+ public int b25592;
+ public int b25593;
+ public int b25594;
+ public int b25595;
+ public int b25596;
+ public int b25597;
+ public int b25598;
+ public int b25599;
+ public int b25600;
+ public int b25601;
+ public int b25602;
+ public int b25603;
+ public int b25604;
+ public int b25605;
+ public int b25606;
+ public int b25607;
+ public int b25608;
+ public int b25609;
+ public int b25610;
+ public int b25611;
+ public int b25612;
+ public int b25613;
+ public int b25614;
+ public int b25615;
+ public int b25616;
+ public int b25617;
+ public int b25618;
+ public int b25619;
+ public int b25620;
+ public int b25621;
+ public int b25622;
+ public int b25623;
+ public int b25624;
+ public int b25625;
+ public int b25626;
+ public int b25627;
+ public int b25628;
+ public int b25629;
+ public int b25630;
+ public int b25631;
+ public int b25632;
+ public int b25633;
+ public int b25634;
+ public int b25635;
+ public int b25636;
+ public int b25637;
+ public int b25638;
+ public int b25639;
+ public int b25640;
+ public int b25641;
+ public int b25642;
+ public int b25643;
+ public int b25644;
+ public int b25645;
+ public int b25646;
+ public int b25647;
+ public int b25648;
+ public int b25649;
+ public int b25650;
+ public int b25651;
+ public int b25652;
+ public int b25653;
+ public int b25654;
+ public int b25655;
+ public int b25656;
+ public int b25657;
+ public int b25658;
+ public int b25659;
+ public int b25660;
+ public int b25661;
+ public int b25662;
+ public int b25663;
+ public int b25664;
+ public int b25665;
+ public int b25666;
+ public int b25667;
+ public int b25668;
+ public int b25669;
+ public int b25670;
+ public int b25671;
+ public int b25672;
+ public int b25673;
+ public int b25674;
+ public int b25675;
+ public int b25676;
+ public int b25677;
+ public int b25678;
+ public int b25679;
+ public int b25680;
+ public int b25681;
+ public int b25682;
+ public int b25683;
+ public int b25684;
+ public int b25685;
+ public int b25686;
+ public int b25687;
+ public int b25688;
+ public int b25689;
+ public int b25690;
+ public int b25691;
+ public int b25692;
+ public int b25693;
+ public int b25694;
+ public int b25695;
+ public int b25696;
+ public int b25697;
+ public int b25698;
+ public int b25699;
+ public int b25700;
+ public int b25701;
+ public int b25702;
+ public int b25703;
+ public int b25704;
+ public int b25705;
+ public int b25706;
+ public int b25707;
+ public int b25708;
+ public int b25709;
+ public int b25710;
+ public int b25711;
+ public int b25712;
+ public int b25713;
+ public int b25714;
+ public int b25715;
+ public int b25716;
+ public int b25717;
+ public int b25718;
+ public int b25719;
+ public int b25720;
+ public int b25721;
+ public int b25722;
+ public int b25723;
+ public int b25724;
+ public int b25725;
+ public int b25726;
+ public int b25727;
+ public int b25728;
+ public int b25729;
+ public int b25730;
+ public int b25731;
+ public int b25732;
+ public int b25733;
+ public int b25734;
+ public int b25735;
+ public int b25736;
+ public int b25737;
+ public int b25738;
+ public int b25739;
+ public int b25740;
+ public int b25741;
+ public int b25742;
+ public int b25743;
+ public int b25744;
+ public int b25745;
+ public int b25746;
+ public int b25747;
+ public int b25748;
+ public int b25749;
+ public int b25750;
+ public int b25751;
+ public int b25752;
+ public int b25753;
+ public int b25754;
+ public int b25755;
+ public int b25756;
+ public int b25757;
+ public int b25758;
+ public int b25759;
+ public int b25760;
+ public int b25761;
+ public int b25762;
+ public int b25763;
+ public int b25764;
+ public int b25765;
+ public int b25766;
+ public int b25767;
+ public int b25768;
+ public int b25769;
+ public int b25770;
+ public int b25771;
+ public int b25772;
+ public int b25773;
+ public int b25774;
+ public int b25775;
+ public int b25776;
+ public int b25777;
+ public int b25778;
+ public int b25779;
+ public int b25780;
+ public int b25781;
+ public int b25782;
+ public int b25783;
+ public int b25784;
+ public int b25785;
+ public int b25786;
+ public int b25787;
+ public int b25788;
+ public int b25789;
+ public int b25790;
+ public int b25791;
+ public int b25792;
+ public int b25793;
+ public int b25794;
+ public int b25795;
+ public int b25796;
+ public int b25797;
+ public int b25798;
+ public int b25799;
+ public int b25800;
+ public int b25801;
+ public int b25802;
+ public int b25803;
+ public int b25804;
+ public int b25805;
+ public int b25806;
+ public int b25807;
+ public int b25808;
+ public int b25809;
+ public int b25810;
+ public int b25811;
+ public int b25812;
+ public int b25813;
+ public int b25814;
+ public int b25815;
+ public int b25816;
+ public int b25817;
+ public int b25818;
+ public int b25819;
+ public int b25820;
+ public int b25821;
+ public int b25822;
+ public int b25823;
+ public int b25824;
+ public int b25825;
+ public int b25826;
+ public int b25827;
+ public int b25828;
+ public int b25829;
+ public int b25830;
+ public int b25831;
+ public int b25832;
+ public int b25833;
+ public int b25834;
+ public int b25835;
+ public int b25836;
+ public int b25837;
+ public int b25838;
+ public int b25839;
+ public int b25840;
+ public int b25841;
+ public int b25842;
+ public int b25843;
+ public int b25844;
+ public int b25845;
+ public int b25846;
+ public int b25847;
+ public int b25848;
+ public int b25849;
+ public int b25850;
+ public int b25851;
+ public int b25852;
+ public int b25853;
+ public int b25854;
+ public int b25855;
+ public int b25856;
+ public int b25857;
+ public int b25858;
+ public int b25859;
+ public int b25860;
+ public int b25861;
+ public int b25862;
+ public int b25863;
+ public int b25864;
+ public int b25865;
+ public int b25866;
+ public int b25867;
+ public int b25868;
+ public int b25869;
+ public int b25870;
+ public int b25871;
+ public int b25872;
+ public int b25873;
+ public int b25874;
+ public int b25875;
+ public int b25876;
+ public int b25877;
+ public int b25878;
+ public int b25879;
+ public int b25880;
+ public int b25881;
+ public int b25882;
+ public int b25883;
+ public int b25884;
+ public int b25885;
+ public int b25886;
+ public int b25887;
+ public int b25888;
+ public int b25889;
+ public int b25890;
+ public int b25891;
+ public int b25892;
+ public int b25893;
+ public int b25894;
+ public int b25895;
+ public int b25896;
+ public int b25897;
+ public int b25898;
+ public int b25899;
+ public int b25900;
+ public int b25901;
+ public int b25902;
+ public int b25903;
+ public int b25904;
+ public int b25905;
+ public int b25906;
+ public int b25907;
+ public int b25908;
+ public int b25909;
+ public int b25910;
+ public int b25911;
+ public int b25912;
+ public int b25913;
+ public int b25914;
+ public int b25915;
+ public int b25916;
+ public int b25917;
+ public int b25918;
+ public int b25919;
+ public int b25920;
+ public int b25921;
+ public int b25922;
+ public int b25923;
+ public int b25924;
+ public int b25925;
+ public int b25926;
+ public int b25927;
+ public int b25928;
+ public int b25929;
+ public int b25930;
+ public int b25931;
+ public int b25932;
+ public int b25933;
+ public int b25934;
+ public int b25935;
+ public int b25936;
+ public int b25937;
+ public int b25938;
+ public int b25939;
+ public int b25940;
+ public int b25941;
+ public int b25942;
+ public int b25943;
+ public int b25944;
+ public int b25945;
+ public int b25946;
+ public int b25947;
+ public int b25948;
+ public int b25949;
+ public int b25950;
+ public int b25951;
+ public int b25952;
+ public int b25953;
+ public int b25954;
+ public int b25955;
+ public int b25956;
+ public int b25957;
+ public int b25958;
+ public int b25959;
+ public int b25960;
+ public int b25961;
+ public int b25962;
+ public int b25963;
+ public int b25964;
+ public int b25965;
+ public int b25966;
+ public int b25967;
+ public int b25968;
+ public int b25969;
+ public int b25970;
+ public int b25971;
+ public int b25972;
+ public int b25973;
+ public int b25974;
+ public int b25975;
+ public int b25976;
+ public int b25977;
+ public int b25978;
+ public int b25979;
+ public int b25980;
+ public int b25981;
+ public int b25982;
+ public int b25983;
+ public int b25984;
+ public int b25985;
+ public int b25986;
+ public int b25987;
+ public int b25988;
+ public int b25989;
+ public int b25990;
+ public int b25991;
+ public int b25992;
+ public int b25993;
+ public int b25994;
+ public int b25995;
+ public int b25996;
+ public int b25997;
+ public int b25998;
+ public int b25999;
+ public int b26000;
+ public int b26001;
+ public int b26002;
+ public int b26003;
+ public int b26004;
+ public int b26005;
+ public int b26006;
+ public int b26007;
+ public int b26008;
+ public int b26009;
+ public int b26010;
+ public int b26011;
+ public int b26012;
+ public int b26013;
+ public int b26014;
+ public int b26015;
+ public int b26016;
+ public int b26017;
+ public int b26018;
+ public int b26019;
+ public int b26020;
+ public int b26021;
+ public int b26022;
+ public int b26023;
+ public int b26024;
+ public int b26025;
+ public int b26026;
+ public int b26027;
+ public int b26028;
+ public int b26029;
+ public int b26030;
+ public int b26031;
+ public int b26032;
+ public int b26033;
+ public int b26034;
+ public int b26035;
+ public int b26036;
+ public int b26037;
+ public int b26038;
+ public int b26039;
+ public int b26040;
+ public int b26041;
+ public int b26042;
+ public int b26043;
+ public int b26044;
+ public int b26045;
+ public int b26046;
+ public int b26047;
+ public int b26048;
+ public int b26049;
+ public int b26050;
+ public int b26051;
+ public int b26052;
+ public int b26053;
+ public int b26054;
+ public int b26055;
+ public int b26056;
+ public int b26057;
+ public int b26058;
+ public int b26059;
+ public int b26060;
+ public int b26061;
+ public int b26062;
+ public int b26063;
+ public int b26064;
+ public int b26065;
+ public int b26066;
+ public int b26067;
+ public int b26068;
+ public int b26069;
+ public int b26070;
+ public int b26071;
+ public int b26072;
+ public int b26073;
+ public int b26074;
+ public int b26075;
+ public int b26076;
+ public int b26077;
+ public int b26078;
+ public int b26079;
+ public int b26080;
+ public int b26081;
+ public int b26082;
+ public int b26083;
+ public int b26084;
+ public int b26085;
+ public int b26086;
+ public int b26087;
+ public int b26088;
+ public int b26089;
+ public int b26090;
+ public int b26091;
+ public int b26092;
+ public int b26093;
+ public int b26094;
+ public int b26095;
+ public int b26096;
+ public int b26097;
+ public int b26098;
+ public int b26099;
+ public int b26100;
+ public int b26101;
+ public int b26102;
+ public int b26103;
+ public int b26104;
+ public int b26105;
+ public int b26106;
+ public int b26107;
+ public int b26108;
+ public int b26109;
+ public int b26110;
+ public int b26111;
+ public int b26112;
+ public int b26113;
+ public int b26114;
+ public int b26115;
+ public int b26116;
+ public int b26117;
+ public int b26118;
+ public int b26119;
+ public int b26120;
+ public int b26121;
+ public int b26122;
+ public int b26123;
+ public int b26124;
+ public int b26125;
+ public int b26126;
+ public int b26127;
+ public int b26128;
+ public int b26129;
+ public int b26130;
+ public int b26131;
+ public int b26132;
+ public int b26133;
+ public int b26134;
+ public int b26135;
+ public int b26136;
+ public int b26137;
+ public int b26138;
+ public int b26139;
+ public int b26140;
+ public int b26141;
+ public int b26142;
+ public int b26143;
+ public int b26144;
+ public int b26145;
+ public int b26146;
+ public int b26147;
+ public int b26148;
+ public int b26149;
+ public int b26150;
+ public int b26151;
+ public int b26152;
+ public int b26153;
+ public int b26154;
+ public int b26155;
+ public int b26156;
+ public int b26157;
+ public int b26158;
+ public int b26159;
+ public int b26160;
+ public int b26161;
+ public int b26162;
+ public int b26163;
+ public int b26164;
+ public int b26165;
+ public int b26166;
+ public int b26167;
+ public int b26168;
+ public int b26169;
+ public int b26170;
+ public int b26171;
+ public int b26172;
+ public int b26173;
+ public int b26174;
+ public int b26175;
+ public int b26176;
+ public int b26177;
+ public int b26178;
+ public int b26179;
+ public int b26180;
+ public int b26181;
+ public int b26182;
+ public int b26183;
+ public int b26184;
+ public int b26185;
+ public int b26186;
+ public int b26187;
+ public int b26188;
+ public int b26189;
+ public int b26190;
+ public int b26191;
+ public int b26192;
+ public int b26193;
+ public int b26194;
+ public int b26195;
+ public int b26196;
+ public int b26197;
+ public int b26198;
+ public int b26199;
+ public int b26200;
+ public int b26201;
+ public int b26202;
+ public int b26203;
+ public int b26204;
+ public int b26205;
+ public int b26206;
+ public int b26207;
+ public int b26208;
+ public int b26209;
+ public int b26210;
+ public int b26211;
+ public int b26212;
+ public int b26213;
+ public int b26214;
+ public int b26215;
+ public int b26216;
+ public int b26217;
+ public int b26218;
+ public int b26219;
+ public int b26220;
+ public int b26221;
+ public int b26222;
+ public int b26223;
+ public int b26224;
+ public int b26225;
+ public int b26226;
+ public int b26227;
+ public int b26228;
+ public int b26229;
+ public int b26230;
+ public int b26231;
+ public int b26232;
+ public int b26233;
+ public int b26234;
+ public int b26235;
+ public int b26236;
+ public int b26237;
+ public int b26238;
+ public int b26239;
+ public int b26240;
+ public int b26241;
+ public int b26242;
+ public int b26243;
+ public int b26244;
+ public int b26245;
+ public int b26246;
+ public int b26247;
+ public int b26248;
+ public int b26249;
+ public int b26250;
+ public int b26251;
+ public int b26252;
+ public int b26253;
+ public int b26254;
+ public int b26255;
+ public int b26256;
+ public int b26257;
+ public int b26258;
+ public int b26259;
+ public int b26260;
+ public int b26261;
+ public int b26262;
+ public int b26263;
+ public int b26264;
+ public int b26265;
+ public int b26266;
+ public int b26267;
+ public int b26268;
+ public int b26269;
+ public int b26270;
+ public int b26271;
+ public int b26272;
+ public int b26273;
+ public int b26274;
+ public int b26275;
+ public int b26276;
+ public int b26277;
+ public int b26278;
+ public int b26279;
+ public int b26280;
+ public int b26281;
+ public int b26282;
+ public int b26283;
+ public int b26284;
+ public int b26285;
+ public int b26286;
+ public int b26287;
+ public int b26288;
+ public int b26289;
+ public int b26290;
+ public int b26291;
+ public int b26292;
+ public int b26293;
+ public int b26294;
+ public int b26295;
+ public int b26296;
+ public int b26297;
+ public int b26298;
+ public int b26299;
+ public int b26300;
+ public int b26301;
+ public int b26302;
+ public int b26303;
+ public int b26304;
+ public int b26305;
+ public int b26306;
+ public int b26307;
+ public int b26308;
+ public int b26309;
+ public int b26310;
+ public int b26311;
+ public int b26312;
+ public int b26313;
+ public int b26314;
+ public int b26315;
+ public int b26316;
+ public int b26317;
+ public int b26318;
+ public int b26319;
+ public int b26320;
+ public int b26321;
+ public int b26322;
+ public int b26323;
+ public int b26324;
+ public int b26325;
+ public int b26326;
+ public int b26327;
+ public int b26328;
+ public int b26329;
+ public int b26330;
+ public int b26331;
+ public int b26332;
+ public int b26333;
+ public int b26334;
+ public int b26335;
+ public int b26336;
+ public int b26337;
+ public int b26338;
+ public int b26339;
+ public int b26340;
+ public int b26341;
+ public int b26342;
+ public int b26343;
+ public int b26344;
+ public int b26345;
+ public int b26346;
+ public int b26347;
+ public int b26348;
+ public int b26349;
+ public int b26350;
+ public int b26351;
+ public int b26352;
+ public int b26353;
+ public int b26354;
+ public int b26355;
+ public int b26356;
+ public int b26357;
+ public int b26358;
+ public int b26359;
+ public int b26360;
+ public int b26361;
+ public int b26362;
+ public int b26363;
+ public int b26364;
+ public int b26365;
+ public int b26366;
+ public int b26367;
+ public int b26368;
+ public int b26369;
+ public int b26370;
+ public int b26371;
+ public int b26372;
+ public int b26373;
+ public int b26374;
+ public int b26375;
+ public int b26376;
+ public int b26377;
+ public int b26378;
+ public int b26379;
+ public int b26380;
+ public int b26381;
+ public int b26382;
+ public int b26383;
+ public int b26384;
+ public int b26385;
+ public int b26386;
+ public int b26387;
+ public int b26388;
+ public int b26389;
+ public int b26390;
+ public int b26391;
+ public int b26392;
+ public int b26393;
+ public int b26394;
+ public int b26395;
+ public int b26396;
+ public int b26397;
+ public int b26398;
+ public int b26399;
+ public int b26400;
+ public int b26401;
+ public int b26402;
+ public int b26403;
+ public int b26404;
+ public int b26405;
+ public int b26406;
+ public int b26407;
+ public int b26408;
+ public int b26409;
+ public int b26410;
+ public int b26411;
+ public int b26412;
+ public int b26413;
+ public int b26414;
+ public int b26415;
+ public int b26416;
+ public int b26417;
+ public int b26418;
+ public int b26419;
+ public int b26420;
+ public int b26421;
+ public int b26422;
+ public int b26423;
+ public int b26424;
+ public int b26425;
+ public int b26426;
+ public int b26427;
+ public int b26428;
+ public int b26429;
+ public int b26430;
+ public int b26431;
+ public int b26432;
+ public int b26433;
+ public int b26434;
+ public int b26435;
+ public int b26436;
+ public int b26437;
+ public int b26438;
+ public int b26439;
+ public int b26440;
+ public int b26441;
+ public int b26442;
+ public int b26443;
+ public int b26444;
+ public int b26445;
+ public int b26446;
+ public int b26447;
+ public int b26448;
+ public int b26449;
+ public int b26450;
+ public int b26451;
+ public int b26452;
+ public int b26453;
+ public int b26454;
+ public int b26455;
+ public int b26456;
+ public int b26457;
+ public int b26458;
+ public int b26459;
+ public int b26460;
+ public int b26461;
+ public int b26462;
+ public int b26463;
+ public int b26464;
+ public int b26465;
+ public int b26466;
+ public int b26467;
+ public int b26468;
+ public int b26469;
+ public int b26470;
+ public int b26471;
+ public int b26472;
+ public int b26473;
+ public int b26474;
+ public int b26475;
+ public int b26476;
+ public int b26477;
+ public int b26478;
+ public int b26479;
+ public int b26480;
+ public int b26481;
+ public int b26482;
+ public int b26483;
+ public int b26484;
+ public int b26485;
+ public int b26486;
+ public int b26487;
+ public int b26488;
+ public int b26489;
+ public int b26490;
+ public int b26491;
+ public int b26492;
+ public int b26493;
+ public int b26494;
+ public int b26495;
+ public int b26496;
+ public int b26497;
+ public int b26498;
+ public int b26499;
+ public int b26500;
+ public int b26501;
+ public int b26502;
+ public int b26503;
+ public int b26504;
+ public int b26505;
+ public int b26506;
+ public int b26507;
+ public int b26508;
+ public int b26509;
+ public int b26510;
+ public int b26511;
+ public int b26512;
+ public int b26513;
+ public int b26514;
+ public int b26515;
+ public int b26516;
+ public int b26517;
+ public int b26518;
+ public int b26519;
+ public int b26520;
+ public int b26521;
+ public int b26522;
+ public int b26523;
+ public int b26524;
+ public int b26525;
+ public int b26526;
+ public int b26527;
+ public int b26528;
+ public int b26529;
+ public int b26530;
+ public int b26531;
+ public int b26532;
+ public int b26533;
+ public int b26534;
+ public int b26535;
+ public int b26536;
+ public int b26537;
+ public int b26538;
+ public int b26539;
+ public int b26540;
+ public int b26541;
+ public int b26542;
+ public int b26543;
+ public int b26544;
+ public int b26545;
+ public int b26546;
+ public int b26547;
+ public int b26548;
+ public int b26549;
+ public int b26550;
+ public int b26551;
+ public int b26552;
+ public int b26553;
+ public int b26554;
+ public int b26555;
+ public int b26556;
+ public int b26557;
+ public int b26558;
+ public int b26559;
+ public int b26560;
+ public int b26561;
+ public int b26562;
+ public int b26563;
+ public int b26564;
+ public int b26565;
+ public int b26566;
+ public int b26567;
+ public int b26568;
+ public int b26569;
+ public int b26570;
+ public int b26571;
+ public int b26572;
+ public int b26573;
+ public int b26574;
+ public int b26575;
+ public int b26576;
+ public int b26577;
+ public int b26578;
+ public int b26579;
+ public int b26580;
+ public int b26581;
+ public int b26582;
+ public int b26583;
+ public int b26584;
+ public int b26585;
+ public int b26586;
+ public int b26587;
+ public int b26588;
+ public int b26589;
+ public int b26590;
+ public int b26591;
+ public int b26592;
+ public int b26593;
+ public int b26594;
+ public int b26595;
+ public int b26596;
+ public int b26597;
+ public int b26598;
+ public int b26599;
+ public int b26600;
+ public int b26601;
+ public int b26602;
+ public int b26603;
+ public int b26604;
+ public int b26605;
+ public int b26606;
+ public int b26607;
+ public int b26608;
+ public int b26609;
+ public int b26610;
+ public int b26611;
+ public int b26612;
+ public int b26613;
+ public int b26614;
+ public int b26615;
+ public int b26616;
+ public int b26617;
+ public int b26618;
+ public int b26619;
+ public int b26620;
+ public int b26621;
+ public int b26622;
+ public int b26623;
+ public int b26624;
+ public int b26625;
+ public int b26626;
+ public int b26627;
+ public int b26628;
+ public int b26629;
+ public int b26630;
+ public int b26631;
+ public int b26632;
+ public int b26633;
+ public int b26634;
+ public int b26635;
+ public int b26636;
+ public int b26637;
+ public int b26638;
+ public int b26639;
+ public int b26640;
+ public int b26641;
+ public int b26642;
+ public int b26643;
+ public int b26644;
+ public int b26645;
+ public int b26646;
+ public int b26647;
+ public int b26648;
+ public int b26649;
+ public int b26650;
+ public int b26651;
+ public int b26652;
+ public int b26653;
+ public int b26654;
+ public int b26655;
+ public int b26656;
+ public int b26657;
+ public int b26658;
+ public int b26659;
+ public int b26660;
+ public int b26661;
+ public int b26662;
+ public int b26663;
+ public int b26664;
+ public int b26665;
+ public int b26666;
+ public int b26667;
+ public int b26668;
+ public int b26669;
+ public int b26670;
+ public int b26671;
+ public int b26672;
+ public int b26673;
+ public int b26674;
+ public int b26675;
+ public int b26676;
+ public int b26677;
+ public int b26678;
+ public int b26679;
+ public int b26680;
+ public int b26681;
+ public int b26682;
+ public int b26683;
+ public int b26684;
+ public int b26685;
+ public int b26686;
+ public int b26687;
+ public int b26688;
+ public int b26689;
+ public int b26690;
+ public int b26691;
+ public int b26692;
+ public int b26693;
+ public int b26694;
+ public int b26695;
+ public int b26696;
+ public int b26697;
+ public int b26698;
+ public int b26699;
+ public int b26700;
+ public int b26701;
+ public int b26702;
+ public int b26703;
+ public int b26704;
+ public int b26705;
+ public int b26706;
+ public int b26707;
+ public int b26708;
+ public int b26709;
+ public int b26710;
+ public int b26711;
+ public int b26712;
+ public int b26713;
+ public int b26714;
+ public int b26715;
+ public int b26716;
+ public int b26717;
+ public int b26718;
+ public int b26719;
+ public int b26720;
+ public int b26721;
+ public int b26722;
+ public int b26723;
+ public int b26724;
+ public int b26725;
+ public int b26726;
+ public int b26727;
+ public int b26728;
+ public int b26729;
+ public int b26730;
+ public int b26731;
+ public int b26732;
+ public int b26733;
+ public int b26734;
+ public int b26735;
+ public int b26736;
+ public int b26737;
+ public int b26738;
+ public int b26739;
+ public int b26740;
+ public int b26741;
+ public int b26742;
+ public int b26743;
+ public int b26744;
+ public int b26745;
+ public int b26746;
+ public int b26747;
+ public int b26748;
+ public int b26749;
+ public int b26750;
+ public int b26751;
+ public int b26752;
+ public int b26753;
+ public int b26754;
+ public int b26755;
+ public int b26756;
+ public int b26757;
+ public int b26758;
+ public int b26759;
+ public int b26760;
+ public int b26761;
+ public int b26762;
+ public int b26763;
+ public int b26764;
+ public int b26765;
+ public int b26766;
+ public int b26767;
+ public int b26768;
+ public int b26769;
+ public int b26770;
+ public int b26771;
+ public int b26772;
+ public int b26773;
+ public int b26774;
+ public int b26775;
+ public int b26776;
+ public int b26777;
+ public int b26778;
+ public int b26779;
+ public int b26780;
+ public int b26781;
+ public int b26782;
+ public int b26783;
+ public int b26784;
+ public int b26785;
+ public int b26786;
+ public int b26787;
+ public int b26788;
+ public int b26789;
+ public int b26790;
+ public int b26791;
+ public int b26792;
+ public int b26793;
+ public int b26794;
+ public int b26795;
+ public int b26796;
+ public int b26797;
+ public int b26798;
+ public int b26799;
+ public int b26800;
+ public int b26801;
+ public int b26802;
+ public int b26803;
+ public int b26804;
+ public int b26805;
+ public int b26806;
+ public int b26807;
+ public int b26808;
+ public int b26809;
+ public int b26810;
+ public int b26811;
+ public int b26812;
+ public int b26813;
+ public int b26814;
+ public int b26815;
+ public int b26816;
+ public int b26817;
+ public int b26818;
+ public int b26819;
+ public int b26820;
+ public int b26821;
+ public int b26822;
+ public int b26823;
+ public int b26824;
+ public int b26825;
+ public int b26826;
+ public int b26827;
+ public int b26828;
+ public int b26829;
+ public int b26830;
+ public int b26831;
+ public int b26832;
+ public int b26833;
+ public int b26834;
+ public int b26835;
+ public int b26836;
+ public int b26837;
+ public int b26838;
+ public int b26839;
+ public int b26840;
+ public int b26841;
+ public int b26842;
+ public int b26843;
+ public int b26844;
+ public int b26845;
+ public int b26846;
+ public int b26847;
+ public int b26848;
+ public int b26849;
+ public int b26850;
+ public int b26851;
+ public int b26852;
+ public int b26853;
+ public int b26854;
+ public int b26855;
+ public int b26856;
+ public int b26857;
+ public int b26858;
+ public int b26859;
+ public int b26860;
+ public int b26861;
+ public int b26862;
+ public int b26863;
+ public int b26864;
+ public int b26865;
+ public int b26866;
+ public int b26867;
+ public int b26868;
+ public int b26869;
+ public int b26870;
+ public int b26871;
+ public int b26872;
+ public int b26873;
+ public int b26874;
+ public int b26875;
+ public int b26876;
+ public int b26877;
+ public int b26878;
+ public int b26879;
+ public int b26880;
+ public int b26881;
+ public int b26882;
+ public int b26883;
+ public int b26884;
+ public int b26885;
+ public int b26886;
+ public int b26887;
+ public int b26888;
+ public int b26889;
+ public int b26890;
+ public int b26891;
+ public int b26892;
+ public int b26893;
+ public int b26894;
+ public int b26895;
+ public int b26896;
+ public int b26897;
+ public int b26898;
+ public int b26899;
+ public int b26900;
+ public int b26901;
+ public int b26902;
+ public int b26903;
+ public int b26904;
+ public int b26905;
+ public int b26906;
+ public int b26907;
+ public int b26908;
+ public int b26909;
+ public int b26910;
+ public int b26911;
+ public int b26912;
+ public int b26913;
+ public int b26914;
+ public int b26915;
+ public int b26916;
+ public int b26917;
+ public int b26918;
+ public int b26919;
+ public int b26920;
+ public int b26921;
+ public int b26922;
+ public int b26923;
+ public int b26924;
+ public int b26925;
+ public int b26926;
+ public int b26927;
+ public int b26928;
+ public int b26929;
+ public int b26930;
+ public int b26931;
+ public int b26932;
+ public int b26933;
+ public int b26934;
+ public int b26935;
+ public int b26936;
+ public int b26937;
+ public int b26938;
+ public int b26939;
+ public int b26940;
+ public int b26941;
+ public int b26942;
+ public int b26943;
+ public int b26944;
+ public int b26945;
+ public int b26946;
+ public int b26947;
+ public int b26948;
+ public int b26949;
+ public int b26950;
+ public int b26951;
+ public int b26952;
+ public int b26953;
+ public int b26954;
+ public int b26955;
+ public int b26956;
+ public int b26957;
+ public int b26958;
+ public int b26959;
+ public int b26960;
+ public int b26961;
+ public int b26962;
+ public int b26963;
+ public int b26964;
+ public int b26965;
+ public int b26966;
+ public int b26967;
+ public int b26968;
+ public int b26969;
+ public int b26970;
+ public int b26971;
+ public int b26972;
+ public int b26973;
+ public int b26974;
+ public int b26975;
+ public int b26976;
+ public int b26977;
+ public int b26978;
+ public int b26979;
+ public int b26980;
+ public int b26981;
+ public int b26982;
+ public int b26983;
+ public int b26984;
+ public int b26985;
+ public int b26986;
+ public int b26987;
+ public int b26988;
+ public int b26989;
+ public int b26990;
+ public int b26991;
+ public int b26992;
+ public int b26993;
+ public int b26994;
+ public int b26995;
+ public int b26996;
+ public int b26997;
+ public int b26998;
+ public int b26999;
+ public int b27000;
+ public int b27001;
+ public int b27002;
+ public int b27003;
+ public int b27004;
+ public int b27005;
+ public int b27006;
+ public int b27007;
+ public int b27008;
+ public int b27009;
+ public int b27010;
+ public int b27011;
+ public int b27012;
+ public int b27013;
+ public int b27014;
+ public int b27015;
+ public int b27016;
+ public int b27017;
+ public int b27018;
+ public int b27019;
+ public int b27020;
+ public int b27021;
+ public int b27022;
+ public int b27023;
+ public int b27024;
+ public int b27025;
+ public int b27026;
+ public int b27027;
+ public int b27028;
+ public int b27029;
+ public int b27030;
+ public int b27031;
+ public int b27032;
+ public int b27033;
+ public int b27034;
+ public int b27035;
+ public int b27036;
+ public int b27037;
+ public int b27038;
+ public int b27039;
+ public int b27040;
+ public int b27041;
+ public int b27042;
+ public int b27043;
+ public int b27044;
+ public int b27045;
+ public int b27046;
+ public int b27047;
+ public int b27048;
+ public int b27049;
+ public int b27050;
+ public int b27051;
+ public int b27052;
+ public int b27053;
+ public int b27054;
+ public int b27055;
+ public int b27056;
+ public int b27057;
+ public int b27058;
+ public int b27059;
+ public int b27060;
+ public int b27061;
+ public int b27062;
+ public int b27063;
+ public int b27064;
+ public int b27065;
+ public int b27066;
+ public int b27067;
+ public int b27068;
+ public int b27069;
+ public int b27070;
+ public int b27071;
+ public int b27072;
+ public int b27073;
+ public int b27074;
+ public int b27075;
+ public int b27076;
+ public int b27077;
+ public int b27078;
+ public int b27079;
+ public int b27080;
+ public int b27081;
+ public int b27082;
+ public int b27083;
+ public int b27084;
+ public int b27085;
+ public int b27086;
+ public int b27087;
+ public int b27088;
+ public int b27089;
+ public int b27090;
+ public int b27091;
+ public int b27092;
+ public int b27093;
+ public int b27094;
+ public int b27095;
+ public int b27096;
+ public int b27097;
+ public int b27098;
+ public int b27099;
+ public int b27100;
+ public int b27101;
+ public int b27102;
+ public int b27103;
+ public int b27104;
+ public int b27105;
+ public int b27106;
+ public int b27107;
+ public int b27108;
+ public int b27109;
+ public int b27110;
+ public int b27111;
+ public int b27112;
+ public int b27113;
+ public int b27114;
+ public int b27115;
+ public int b27116;
+ public int b27117;
+ public int b27118;
+ public int b27119;
+ public int b27120;
+ public int b27121;
+ public int b27122;
+ public int b27123;
+ public int b27124;
+ public int b27125;
+ public int b27126;
+ public int b27127;
+ public int b27128;
+ public int b27129;
+ public int b27130;
+ public int b27131;
+ public int b27132;
+ public int b27133;
+ public int b27134;
+ public int b27135;
+ public int b27136;
+ public int b27137;
+ public int b27138;
+ public int b27139;
+ public int b27140;
+ public int b27141;
+ public int b27142;
+ public int b27143;
+ public int b27144;
+ public int b27145;
+ public int b27146;
+ public int b27147;
+ public int b27148;
+ public int b27149;
+ public int b27150;
+ public int b27151;
+ public int b27152;
+ public int b27153;
+ public int b27154;
+ public int b27155;
+ public int b27156;
+ public int b27157;
+ public int b27158;
+ public int b27159;
+ public int b27160;
+ public int b27161;
+ public int b27162;
+ public int b27163;
+ public int b27164;
+ public int b27165;
+ public int b27166;
+ public int b27167;
+ public int b27168;
+ public int b27169;
+ public int b27170;
+ public int b27171;
+ public int b27172;
+ public int b27173;
+ public int b27174;
+ public int b27175;
+ public int b27176;
+ public int b27177;
+ public int b27178;
+ public int b27179;
+ public int b27180;
+ public int b27181;
+ public int b27182;
+ public int b27183;
+ public int b27184;
+ public int b27185;
+ public int b27186;
+ public int b27187;
+ public int b27188;
+ public int b27189;
+ public int b27190;
+ public int b27191;
+ public int b27192;
+ public int b27193;
+ public int b27194;
+ public int b27195;
+ public int b27196;
+ public int b27197;
+ public int b27198;
+ public int b27199;
+ public int b27200;
+ public int b27201;
+ public int b27202;
+ public int b27203;
+ public int b27204;
+ public int b27205;
+ public int b27206;
+ public int b27207;
+ public int b27208;
+ public int b27209;
+ public int b27210;
+ public int b27211;
+ public int b27212;
+ public int b27213;
+ public int b27214;
+ public int b27215;
+ public int b27216;
+ public int b27217;
+ public int b27218;
+ public int b27219;
+ public int b27220;
+ public int b27221;
+ public int b27222;
+ public int b27223;
+ public int b27224;
+ public int b27225;
+ public int b27226;
+ public int b27227;
+ public int b27228;
+ public int b27229;
+ public int b27230;
+ public int b27231;
+ public int b27232;
+ public int b27233;
+ public int b27234;
+ public int b27235;
+ public int b27236;
+ public int b27237;
+ public int b27238;
+ public int b27239;
+ public int b27240;
+ public int b27241;
+ public int b27242;
+ public int b27243;
+ public int b27244;
+ public int b27245;
+ public int b27246;
+ public int b27247;
+ public int b27248;
+ public int b27249;
+ public int b27250;
+ public int b27251;
+ public int b27252;
+ public int b27253;
+ public int b27254;
+ public int b27255;
+ public int b27256;
+ public int b27257;
+ public int b27258;
+ public int b27259;
+ public int b27260;
+ public int b27261;
+ public int b27262;
+ public int b27263;
+ public int b27264;
+ public int b27265;
+ public int b27266;
+ public int b27267;
+ public int b27268;
+ public int b27269;
+ public int b27270;
+ public int b27271;
+ public int b27272;
+ public int b27273;
+ public int b27274;
+ public int b27275;
+ public int b27276;
+ public int b27277;
+ public int b27278;
+ public int b27279;
+ public int b27280;
+ public int b27281;
+ public int b27282;
+ public int b27283;
+ public int b27284;
+ public int b27285;
+ public int b27286;
+ public int b27287;
+ public int b27288;
+ public int b27289;
+ public int b27290;
+ public int b27291;
+ public int b27292;
+ public int b27293;
+ public int b27294;
+ public int b27295;
+ public int b27296;
+ public int b27297;
+ public int b27298;
+ public int b27299;
+ public int b27300;
+ public int b27301;
+ public int b27302;
+ public int b27303;
+ public int b27304;
+ public int b27305;
+ public int b27306;
+ public int b27307;
+ public int b27308;
+ public int b27309;
+ public int b27310;
+ public int b27311;
+ public int b27312;
+ public int b27313;
+ public int b27314;
+ public int b27315;
+ public int b27316;
+ public int b27317;
+ public int b27318;
+ public int b27319;
+ public int b27320;
+ public int b27321;
+ public int b27322;
+ public int b27323;
+ public int b27324;
+ public int b27325;
+ public int b27326;
+ public int b27327;
+ public int b27328;
+ public int b27329;
+ public int b27330;
+ public int b27331;
+ public int b27332;
+ public int b27333;
+ public int b27334;
+ public int b27335;
+ public int b27336;
+ public int b27337;
+ public int b27338;
+ public int b27339;
+ public int b27340;
+ public int b27341;
+ public int b27342;
+ public int b27343;
+ public int b27344;
+ public int b27345;
+ public int b27346;
+ public int b27347;
+ public int b27348;
+ public int b27349;
+ public int b27350;
+ public int b27351;
+ public int b27352;
+ public int b27353;
+ public int b27354;
+ public int b27355;
+ public int b27356;
+ public int b27357;
+ public int b27358;
+ public int b27359;
+ public int b27360;
+ public int b27361;
+ public int b27362;
+ public int b27363;
+ public int b27364;
+ public int b27365;
+ public int b27366;
+ public int b27367;
+ public int b27368;
+ public int b27369;
+ public int b27370;
+ public int b27371;
+ public int b27372;
+ public int b27373;
+ public int b27374;
+ public int b27375;
+ public int b27376;
+ public int b27377;
+ public int b27378;
+ public int b27379;
+ public int b27380;
+ public int b27381;
+ public int b27382;
+ public int b27383;
+ public int b27384;
+ public int b27385;
+ public int b27386;
+ public int b27387;
+ public int b27388;
+ public int b27389;
+ public int b27390;
+ public int b27391;
+ public int b27392;
+ public int b27393;
+ public int b27394;
+ public int b27395;
+ public int b27396;
+ public int b27397;
+ public int b27398;
+ public int b27399;
+ public int b27400;
+ public int b27401;
+ public int b27402;
+ public int b27403;
+ public int b27404;
+ public int b27405;
+ public int b27406;
+ public int b27407;
+ public int b27408;
+ public int b27409;
+ public int b27410;
+ public int b27411;
+ public int b27412;
+ public int b27413;
+ public int b27414;
+ public int b27415;
+ public int b27416;
+ public int b27417;
+ public int b27418;
+ public int b27419;
+ public int b27420;
+ public int b27421;
+ public int b27422;
+ public int b27423;
+ public int b27424;
+ public int b27425;
+ public int b27426;
+ public int b27427;
+ public int b27428;
+ public int b27429;
+ public int b27430;
+ public int b27431;
+ public int b27432;
+ public int b27433;
+ public int b27434;
+ public int b27435;
+ public int b27436;
+ public int b27437;
+ public int b27438;
+ public int b27439;
+ public int b27440;
+ public int b27441;
+ public int b27442;
+ public int b27443;
+ public int b27444;
+ public int b27445;
+ public int b27446;
+ public int b27447;
+ public int b27448;
+ public int b27449;
+ public int b27450;
+ public int b27451;
+ public int b27452;
+ public int b27453;
+ public int b27454;
+ public int b27455;
+ public int b27456;
+ public int b27457;
+ public int b27458;
+ public int b27459;
+ public int b27460;
+ public int b27461;
+ public int b27462;
+ public int b27463;
+ public int b27464;
+ public int b27465;
+ public int b27466;
+ public int b27467;
+ public int b27468;
+ public int b27469;
+ public int b27470;
+ public int b27471;
+ public int b27472;
+ public int b27473;
+ public int b27474;
+ public int b27475;
+ public int b27476;
+ public int b27477;
+ public int b27478;
+ public int b27479;
+ public int b27480;
+ public int b27481;
+ public int b27482;
+ public int b27483;
+ public int b27484;
+ public int b27485;
+ public int b27486;
+ public int b27487;
+ public int b27488;
+ public int b27489;
+ public int b27490;
+ public int b27491;
+ public int b27492;
+ public int b27493;
+ public int b27494;
+ public int b27495;
+ public int b27496;
+ public int b27497;
+ public int b27498;
+ public int b27499;
+ public int b27500;
+ public int b27501;
+ public int b27502;
+ public int b27503;
+ public int b27504;
+ public int b27505;
+ public int b27506;
+ public int b27507;
+ public int b27508;
+ public int b27509;
+ public int b27510;
+ public int b27511;
+ public int b27512;
+ public int b27513;
+ public int b27514;
+ public int b27515;
+ public int b27516;
+ public int b27517;
+ public int b27518;
+ public int b27519;
+ public int b27520;
+ public int b27521;
+ public int b27522;
+ public int b27523;
+ public int b27524;
+ public int b27525;
+ public int b27526;
+ public int b27527;
+ public int b27528;
+ public int b27529;
+ public int b27530;
+ public int b27531;
+ public int b27532;
+ public int b27533;
+ public int b27534;
+ public int b27535;
+ public int b27536;
+ public int b27537;
+ public int b27538;
+ public int b27539;
+ public int b27540;
+ public int b27541;
+ public int b27542;
+ public int b27543;
+ public int b27544;
+ public int b27545;
+ public int b27546;
+ public int b27547;
+ public int b27548;
+ public int b27549;
+ public int b27550;
+ public int b27551;
+ public int b27552;
+ public int b27553;
+ public int b27554;
+ public int b27555;
+ public int b27556;
+ public int b27557;
+ public int b27558;
+ public int b27559;
+ public int b27560;
+ public int b27561;
+ public int b27562;
+ public int b27563;
+ public int b27564;
+ public int b27565;
+ public int b27566;
+ public int b27567;
+ public int b27568;
+ public int b27569;
+ public int b27570;
+ public int b27571;
+ public int b27572;
+ public int b27573;
+ public int b27574;
+ public int b27575;
+ public int b27576;
+ public int b27577;
+ public int b27578;
+ public int b27579;
+ public int b27580;
+ public int b27581;
+ public int b27582;
+ public int b27583;
+ public int b27584;
+ public int b27585;
+ public int b27586;
+ public int b27587;
+ public int b27588;
+ public int b27589;
+ public int b27590;
+ public int b27591;
+ public int b27592;
+ public int b27593;
+ public int b27594;
+ public int b27595;
+ public int b27596;
+ public int b27597;
+ public int b27598;
+ public int b27599;
+ public int b27600;
+ public int b27601;
+ public int b27602;
+ public int b27603;
+ public int b27604;
+ public int b27605;
+ public int b27606;
+ public int b27607;
+ public int b27608;
+ public int b27609;
+ public int b27610;
+ public int b27611;
+ public int b27612;
+ public int b27613;
+ public int b27614;
+ public int b27615;
+ public int b27616;
+ public int b27617;
+ public int b27618;
+ public int b27619;
+ public int b27620;
+ public int b27621;
+ public int b27622;
+ public int b27623;
+ public int b27624;
+ public int b27625;
+ public int b27626;
+ public int b27627;
+ public int b27628;
+ public int b27629;
+ public int b27630;
+ public int b27631;
+ public int b27632;
+ public int b27633;
+ public int b27634;
+ public int b27635;
+ public int b27636;
+ public int b27637;
+ public int b27638;
+ public int b27639;
+ public int b27640;
+ public int b27641;
+ public int b27642;
+ public int b27643;
+ public int b27644;
+ public int b27645;
+ public int b27646;
+ public int b27647;
+ public int b27648;
+ public int b27649;
+ public int b27650;
+ public int b27651;
+ public int b27652;
+ public int b27653;
+ public int b27654;
+ public int b27655;
+ public int b27656;
+ public int b27657;
+ public int b27658;
+ public int b27659;
+ public int b27660;
+ public int b27661;
+ public int b27662;
+ public int b27663;
+ public int b27664;
+ public int b27665;
+ public int b27666;
+ public int b27667;
+ public int b27668;
+ public int b27669;
+ public int b27670;
+ public int b27671;
+ public int b27672;
+ public int b27673;
+ public int b27674;
+ public int b27675;
+ public int b27676;
+ public int b27677;
+ public int b27678;
+ public int b27679;
+ public int b27680;
+ public int b27681;
+ public int b27682;
+ public int b27683;
+ public int b27684;
+ public int b27685;
+ public int b27686;
+ public int b27687;
+ public int b27688;
+ public int b27689;
+ public int b27690;
+ public int b27691;
+ public int b27692;
+ public int b27693;
+ public int b27694;
+ public int b27695;
+ public int b27696;
+ public int b27697;
+ public int b27698;
+ public int b27699;
+ public int b27700;
+ public int b27701;
+ public int b27702;
+ public int b27703;
+ public int b27704;
+ public int b27705;
+ public int b27706;
+ public int b27707;
+ public int b27708;
+ public int b27709;
+ public int b27710;
+ public int b27711;
+ public int b27712;
+ public int b27713;
+ public int b27714;
+ public int b27715;
+ public int b27716;
+ public int b27717;
+ public int b27718;
+ public int b27719;
+ public int b27720;
+ public int b27721;
+ public int b27722;
+ public int b27723;
+ public int b27724;
+ public int b27725;
+ public int b27726;
+ public int b27727;
+ public int b27728;
+ public int b27729;
+ public int b27730;
+ public int b27731;
+ public int b27732;
+ public int b27733;
+ public int b27734;
+ public int b27735;
+ public int b27736;
+ public int b27737;
+ public int b27738;
+ public int b27739;
+ public int b27740;
+ public int b27741;
+ public int b27742;
+ public int b27743;
+ public int b27744;
+ public int b27745;
+ public int b27746;
+ public int b27747;
+ public int b27748;
+ public int b27749;
+ public int b27750;
+ public int b27751;
+ public int b27752;
+ public int b27753;
+ public int b27754;
+ public int b27755;
+ public int b27756;
+ public int b27757;
+ public int b27758;
+ public int b27759;
+ public int b27760;
+ public int b27761;
+ public int b27762;
+ public int b27763;
+ public int b27764;
+ public int b27765;
+ public int b27766;
+ public int b27767;
+ public int b27768;
+ public int b27769;
+ public int b27770;
+ public int b27771;
+ public int b27772;
+ public int b27773;
+ public int b27774;
+ public int b27775;
+ public int b27776;
+ public int b27777;
+ public int b27778;
+ public int b27779;
+ public int b27780;
+ public int b27781;
+ public int b27782;
+ public int b27783;
+ public int b27784;
+ public int b27785;
+ public int b27786;
+ public int b27787;
+ public int b27788;
+ public int b27789;
+ public int b27790;
+ public int b27791;
+ public int b27792;
+ public int b27793;
+ public int b27794;
+ public int b27795;
+ public int b27796;
+ public int b27797;
+ public int b27798;
+ public int b27799;
+ public int b27800;
+ public int b27801;
+ public int b27802;
+ public int b27803;
+ public int b27804;
+ public int b27805;
+ public int b27806;
+ public int b27807;
+ public int b27808;
+ public int b27809;
+ public int b27810;
+ public int b27811;
+ public int b27812;
+ public int b27813;
+ public int b27814;
+ public int b27815;
+ public int b27816;
+ public int b27817;
+ public int b27818;
+ public int b27819;
+ public int b27820;
+ public int b27821;
+ public int b27822;
+ public int b27823;
+ public int b27824;
+ public int b27825;
+ public int b27826;
+ public int b27827;
+ public int b27828;
+ public int b27829;
+ public int b27830;
+ public int b27831;
+ public int b27832;
+ public int b27833;
+ public int b27834;
+ public int b27835;
+ public int b27836;
+ public int b27837;
+ public int b27838;
+ public int b27839;
+ public int b27840;
+ public int b27841;
+ public int b27842;
+ public int b27843;
+ public int b27844;
+ public int b27845;
+ public int b27846;
+ public int b27847;
+ public int b27848;
+ public int b27849;
+ public int b27850;
+ public int b27851;
+ public int b27852;
+ public int b27853;
+ public int b27854;
+ public int b27855;
+ public int b27856;
+ public int b27857;
+ public int b27858;
+ public int b27859;
+ public int b27860;
+ public int b27861;
+ public int b27862;
+ public int b27863;
+ public int b27864;
+ public int b27865;
+ public int b27866;
+ public int b27867;
+ public int b27868;
+ public int b27869;
+ public int b27870;
+ public int b27871;
+ public int b27872;
+ public int b27873;
+ public int b27874;
+ public int b27875;
+ public int b27876;
+ public int b27877;
+ public int b27878;
+ public int b27879;
+ public int b27880;
+ public int b27881;
+ public int b27882;
+ public int b27883;
+ public int b27884;
+ public int b27885;
+ public int b27886;
+ public int b27887;
+ public int b27888;
+ public int b27889;
+ public int b27890;
+ public int b27891;
+ public int b27892;
+ public int b27893;
+ public int b27894;
+ public int b27895;
+ public int b27896;
+ public int b27897;
+ public int b27898;
+ public int b27899;
+ public int b27900;
+ public int b27901;
+ public int b27902;
+ public int b27903;
+ public int b27904;
+ public int b27905;
+ public int b27906;
+ public int b27907;
+ public int b27908;
+ public int b27909;
+ public int b27910;
+ public int b27911;
+ public int b27912;
+ public int b27913;
+ public int b27914;
+ public int b27915;
+ public int b27916;
+ public int b27917;
+ public int b27918;
+ public int b27919;
+ public int b27920;
+ public int b27921;
+ public int b27922;
+ public int b27923;
+ public int b27924;
+ public int b27925;
+ public int b27926;
+ public int b27927;
+ public int b27928;
+ public int b27929;
+ public int b27930;
+ public int b27931;
+ public int b27932;
+ public int b27933;
+ public int b27934;
+ public int b27935;
+ public int b27936;
+ public int b27937;
+ public int b27938;
+ public int b27939;
+ public int b27940;
+ public int b27941;
+ public int b27942;
+ public int b27943;
+ public int b27944;
+ public int b27945;
+ public int b27946;
+ public int b27947;
+ public int b27948;
+ public int b27949;
+ public int b27950;
+ public int b27951;
+ public int b27952;
+ public int b27953;
+ public int b27954;
+ public int b27955;
+ public int b27956;
+ public int b27957;
+ public int b27958;
+ public int b27959;
+ public int b27960;
+ public int b27961;
+ public int b27962;
+ public int b27963;
+ public int b27964;
+ public int b27965;
+ public int b27966;
+ public int b27967;
+ public int b27968;
+ public int b27969;
+ public int b27970;
+ public int b27971;
+ public int b27972;
+ public int b27973;
+ public int b27974;
+ public int b27975;
+ public int b27976;
+ public int b27977;
+ public int b27978;
+ public int b27979;
+ public int b27980;
+ public int b27981;
+ public int b27982;
+ public int b27983;
+ public int b27984;
+ public int b27985;
+ public int b27986;
+ public int b27987;
+ public int b27988;
+ public int b27989;
+ public int b27990;
+ public int b27991;
+ public int b27992;
+ public int b27993;
+ public int b27994;
+ public int b27995;
+ public int b27996;
+ public int b27997;
+ public int b27998;
+ public int b27999;
+ public int b28000;
+ public int b28001;
+ public int b28002;
+ public int b28003;
+ public int b28004;
+ public int b28005;
+ public int b28006;
+ public int b28007;
+ public int b28008;
+ public int b28009;
+ public int b28010;
+ public int b28011;
+ public int b28012;
+ public int b28013;
+ public int b28014;
+ public int b28015;
+ public int b28016;
+ public int b28017;
+ public int b28018;
+ public int b28019;
+ public int b28020;
+ public int b28021;
+ public int b28022;
+ public int b28023;
+ public int b28024;
+ public int b28025;
+ public int b28026;
+ public int b28027;
+ public int b28028;
+ public int b28029;
+ public int b28030;
+ public int b28031;
+ public int b28032;
+ public int b28033;
+ public int b28034;
+ public int b28035;
+ public int b28036;
+ public int b28037;
+ public int b28038;
+ public int b28039;
+ public int b28040;
+ public int b28041;
+ public int b28042;
+ public int b28043;
+ public int b28044;
+ public int b28045;
+ public int b28046;
+ public int b28047;
+ public int b28048;
+ public int b28049;
+ public int b28050;
+ public int b28051;
+ public int b28052;
+ public int b28053;
+ public int b28054;
+ public int b28055;
+ public int b28056;
+ public int b28057;
+ public int b28058;
+ public int b28059;
+ public int b28060;
+ public int b28061;
+ public int b28062;
+ public int b28063;
+ public int b28064;
+ public int b28065;
+ public int b28066;
+ public int b28067;
+ public int b28068;
+ public int b28069;
+ public int b28070;
+ public int b28071;
+ public int b28072;
+ public int b28073;
+ public int b28074;
+ public int b28075;
+ public int b28076;
+ public int b28077;
+ public int b28078;
+ public int b28079;
+ public int b28080;
+ public int b28081;
+ public int b28082;
+ public int b28083;
+ public int b28084;
+ public int b28085;
+ public int b28086;
+ public int b28087;
+ public int b28088;
+ public int b28089;
+ public int b28090;
+ public int b28091;
+ public int b28092;
+ public int b28093;
+ public int b28094;
+ public int b28095;
+ public int b28096;
+ public int b28097;
+ public int b28098;
+ public int b28099;
+ public int b28100;
+ public int b28101;
+ public int b28102;
+ public int b28103;
+ public int b28104;
+ public int b28105;
+ public int b28106;
+ public int b28107;
+ public int b28108;
+ public int b28109;
+ public int b28110;
+ public int b28111;
+ public int b28112;
+ public int b28113;
+ public int b28114;
+ public int b28115;
+ public int b28116;
+ public int b28117;
+ public int b28118;
+ public int b28119;
+ public int b28120;
+ public int b28121;
+ public int b28122;
+ public int b28123;
+ public int b28124;
+ public int b28125;
+ public int b28126;
+ public int b28127;
+ public int b28128;
+ public int b28129;
+ public int b28130;
+ public int b28131;
+ public int b28132;
+ public int b28133;
+ public int b28134;
+ public int b28135;
+ public int b28136;
+ public int b28137;
+ public int b28138;
+ public int b28139;
+ public int b28140;
+ public int b28141;
+ public int b28142;
+ public int b28143;
+ public int b28144;
+ public int b28145;
+ public int b28146;
+ public int b28147;
+ public int b28148;
+ public int b28149;
+ public int b28150;
+ public int b28151;
+ public int b28152;
+ public int b28153;
+ public int b28154;
+ public int b28155;
+ public int b28156;
+ public int b28157;
+ public int b28158;
+ public int b28159;
+ public int b28160;
+ public int b28161;
+ public int b28162;
+ public int b28163;
+ public int b28164;
+ public int b28165;
+ public int b28166;
+ public int b28167;
+ public int b28168;
+ public int b28169;
+ public int b28170;
+ public int b28171;
+ public int b28172;
+ public int b28173;
+ public int b28174;
+ public int b28175;
+ public int b28176;
+ public int b28177;
+ public int b28178;
+ public int b28179;
+ public int b28180;
+ public int b28181;
+ public int b28182;
+ public int b28183;
+ public int b28184;
+ public int b28185;
+ public int b28186;
+ public int b28187;
+ public int b28188;
+ public int b28189;
+ public int b28190;
+ public int b28191;
+ public int b28192;
+ public int b28193;
+ public int b28194;
+ public int b28195;
+ public int b28196;
+ public int b28197;
+ public int b28198;
+ public int b28199;
+ public int b28200;
+ public int b28201;
+ public int b28202;
+ public int b28203;
+ public int b28204;
+ public int b28205;
+ public int b28206;
+ public int b28207;
+ public int b28208;
+ public int b28209;
+ public int b28210;
+ public int b28211;
+ public int b28212;
+ public int b28213;
+ public int b28214;
+ public int b28215;
+ public int b28216;
+ public int b28217;
+ public int b28218;
+ public int b28219;
+ public int b28220;
+ public int b28221;
+ public int b28222;
+ public int b28223;
+ public int b28224;
+ public int b28225;
+ public int b28226;
+ public int b28227;
+ public int b28228;
+ public int b28229;
+ public int b28230;
+ public int b28231;
+ public int b28232;
+ public int b28233;
+ public int b28234;
+ public int b28235;
+ public int b28236;
+ public int b28237;
+ public int b28238;
+ public int b28239;
+ public int b28240;
+ public int b28241;
+ public int b28242;
+ public int b28243;
+ public int b28244;
+ public int b28245;
+ public int b28246;
+ public int b28247;
+ public int b28248;
+ public int b28249;
+ public int b28250;
+ public int b28251;
+ public int b28252;
+ public int b28253;
+ public int b28254;
+ public int b28255;
+ public int b28256;
+ public int b28257;
+ public int b28258;
+ public int b28259;
+ public int b28260;
+ public int b28261;
+ public int b28262;
+ public int b28263;
+ public int b28264;
+ public int b28265;
+ public int b28266;
+ public int b28267;
+ public int b28268;
+ public int b28269;
+ public int b28270;
+ public int b28271;
+ public int b28272;
+ public int b28273;
+ public int b28274;
+ public int b28275;
+ public int b28276;
+ public int b28277;
+ public int b28278;
+ public int b28279;
+ public int b28280;
+ public int b28281;
+ public int b28282;
+ public int b28283;
+ public int b28284;
+ public int b28285;
+ public int b28286;
+ public int b28287;
+ public int b28288;
+ public int b28289;
+ public int b28290;
+ public int b28291;
+ public int b28292;
+ public int b28293;
+ public int b28294;
+ public int b28295;
+ public int b28296;
+ public int b28297;
+ public int b28298;
+ public int b28299;
+ public int b28300;
+ public int b28301;
+ public int b28302;
+ public int b28303;
+ public int b28304;
+ public int b28305;
+ public int b28306;
+ public int b28307;
+ public int b28308;
+ public int b28309;
+ public int b28310;
+ public int b28311;
+ public int b28312;
+ public int b28313;
+ public int b28314;
+ public int b28315;
+ public int b28316;
+ public int b28317;
+ public int b28318;
+ public int b28319;
+ public int b28320;
+ public int b28321;
+ public int b28322;
+ public int b28323;
+ public int b28324;
+ public int b28325;
+ public int b28326;
+ public int b28327;
+ public int b28328;
+ public int b28329;
+ public int b28330;
+ public int b28331;
+ public int b28332;
+ public int b28333;
+ public int b28334;
+ public int b28335;
+ public int b28336;
+ public int b28337;
+ public int b28338;
+ public int b28339;
+ public int b28340;
+ public int b28341;
+ public int b28342;
+ public int b28343;
+ public int b28344;
+ public int b28345;
+ public int b28346;
+ public int b28347;
+ public int b28348;
+ public int b28349;
+ public int b28350;
+ public int b28351;
+ public int b28352;
+ public int b28353;
+ public int b28354;
+ public int b28355;
+ public int b28356;
+ public int b28357;
+ public int b28358;
+ public int b28359;
+ public int b28360;
+ public int b28361;
+ public int b28362;
+ public int b28363;
+ public int b28364;
+ public int b28365;
+ public int b28366;
+ public int b28367;
+ public int b28368;
+ public int b28369;
+ public int b28370;
+ public int b28371;
+ public int b28372;
+ public int b28373;
+ public int b28374;
+ public int b28375;
+ public int b28376;
+ public int b28377;
+ public int b28378;
+ public int b28379;
+ public int b28380;
+ public int b28381;
+ public int b28382;
+ public int b28383;
+ public int b28384;
+ public int b28385;
+ public int b28386;
+ public int b28387;
+ public int b28388;
+ public int b28389;
+ public int b28390;
+ public int b28391;
+ public int b28392;
+ public int b28393;
+ public int b28394;
+ public int b28395;
+ public int b28396;
+ public int b28397;
+ public int b28398;
+ public int b28399;
+ public int b28400;
+ public int b28401;
+ public int b28402;
+ public int b28403;
+ public int b28404;
+ public int b28405;
+ public int b28406;
+ public int b28407;
+ public int b28408;
+ public int b28409;
+ public int b28410;
+ public int b28411;
+ public int b28412;
+ public int b28413;
+ public int b28414;
+ public int b28415;
+ public int b28416;
+ public int b28417;
+ public int b28418;
+ public int b28419;
+ public int b28420;
+ public int b28421;
+ public int b28422;
+ public int b28423;
+ public int b28424;
+ public int b28425;
+ public int b28426;
+ public int b28427;
+ public int b28428;
+ public int b28429;
+ public int b28430;
+ public int b28431;
+ public int b28432;
+ public int b28433;
+ public int b28434;
+ public int b28435;
+ public int b28436;
+ public int b28437;
+ public int b28438;
+ public int b28439;
+ public int b28440;
+ public int b28441;
+ public int b28442;
+ public int b28443;
+ public int b28444;
+ public int b28445;
+ public int b28446;
+ public int b28447;
+ public int b28448;
+ public int b28449;
+ public int b28450;
+ public int b28451;
+ public int b28452;
+ public int b28453;
+ public int b28454;
+ public int b28455;
+ public int b28456;
+ public int b28457;
+ public int b28458;
+ public int b28459;
+ public int b28460;
+ public int b28461;
+ public int b28462;
+ public int b28463;
+ public int b28464;
+ public int b28465;
+ public int b28466;
+ public int b28467;
+ public int b28468;
+ public int b28469;
+ public int b28470;
+ public int b28471;
+ public int b28472;
+ public int b28473;
+ public int b28474;
+ public int b28475;
+ public int b28476;
+ public int b28477;
+ public int b28478;
+ public int b28479;
+ public int b28480;
+ public int b28481;
+ public int b28482;
+ public int b28483;
+ public int b28484;
+ public int b28485;
+ public int b28486;
+ public int b28487;
+ public int b28488;
+ public int b28489;
+ public int b28490;
+ public int b28491;
+ public int b28492;
+ public int b28493;
+ public int b28494;
+ public int b28495;
+ public int b28496;
+ public int b28497;
+ public int b28498;
+ public int b28499;
+ public int b28500;
+ public int b28501;
+ public int b28502;
+ public int b28503;
+ public int b28504;
+ public int b28505;
+ public int b28506;
+ public int b28507;
+ public int b28508;
+ public int b28509;
+ public int b28510;
+ public int b28511;
+ public int b28512;
+ public int b28513;
+ public int b28514;
+ public int b28515;
+ public int b28516;
+ public int b28517;
+ public int b28518;
+ public int b28519;
+ public int b28520;
+ public int b28521;
+ public int b28522;
+ public int b28523;
+ public int b28524;
+ public int b28525;
+ public int b28526;
+ public int b28527;
+ public int b28528;
+ public int b28529;
+ public int b28530;
+ public int b28531;
+ public int b28532;
+ public int b28533;
+ public int b28534;
+ public int b28535;
+ public int b28536;
+ public int b28537;
+ public int b28538;
+ public int b28539;
+ public int b28540;
+ public int b28541;
+ public int b28542;
+ public int b28543;
+ public int b28544;
+ public int b28545;
+ public int b28546;
+ public int b28547;
+ public int b28548;
+ public int b28549;
+ public int b28550;
+ public int b28551;
+ public int b28552;
+ public int b28553;
+ public int b28554;
+ public int b28555;
+ public int b28556;
+ public int b28557;
+ public int b28558;
+ public int b28559;
+ public int b28560;
+ public int b28561;
+ public int b28562;
+ public int b28563;
+ public int b28564;
+ public int b28565;
+ public int b28566;
+ public int b28567;
+ public int b28568;
+ public int b28569;
+ public int b28570;
+ public int b28571;
+ public int b28572;
+ public int b28573;
+ public int b28574;
+ public int b28575;
+ public int b28576;
+ public int b28577;
+ public int b28578;
+ public int b28579;
+ public int b28580;
+ public int b28581;
+ public int b28582;
+ public int b28583;
+ public int b28584;
+ public int b28585;
+ public int b28586;
+ public int b28587;
+ public int b28588;
+ public int b28589;
+ public int b28590;
+ public int b28591;
+ public int b28592;
+ public int b28593;
+ public int b28594;
+ public int b28595;
+ public int b28596;
+ public int b28597;
+ public int b28598;
+ public int b28599;
+ public int b28600;
+ public int b28601;
+ public int b28602;
+ public int b28603;
+ public int b28604;
+ public int b28605;
+ public int b28606;
+ public int b28607;
+ public int b28608;
+ public int b28609;
+ public int b28610;
+ public int b28611;
+ public int b28612;
+ public int b28613;
+ public int b28614;
+ public int b28615;
+ public int b28616;
+ public int b28617;
+ public int b28618;
+ public int b28619;
+ public int b28620;
+ public int b28621;
+ public int b28622;
+ public int b28623;
+ public int b28624;
+ public int b28625;
+ public int b28626;
+ public int b28627;
+ public int b28628;
+ public int b28629;
+ public int b28630;
+ public int b28631;
+ public int b28632;
+ public int b28633;
+ public int b28634;
+ public int b28635;
+ public int b28636;
+ public int b28637;
+ public int b28638;
+ public int b28639;
+ public int b28640;
+ public int b28641;
+ public int b28642;
+ public int b28643;
+ public int b28644;
+ public int b28645;
+ public int b28646;
+ public int b28647;
+ public int b28648;
+ public int b28649;
+ public int b28650;
+ public int b28651;
+ public int b28652;
+ public int b28653;
+ public int b28654;
+ public int b28655;
+ public int b28656;
+ public int b28657;
+ public int b28658;
+ public int b28659;
+ public int b28660;
+ public int b28661;
+ public int b28662;
+ public int b28663;
+ public int b28664;
+ public int b28665;
+ public int b28666;
+ public int b28667;
+ public int b28668;
+ public int b28669;
+ public int b28670;
+ public int b28671;
+ public int b28672;
+ public int b28673;
+ public int b28674;
+ public int b28675;
+ public int b28676;
+ public int b28677;
+ public int b28678;
+ public int b28679;
+ public int b28680;
+ public int b28681;
+ public int b28682;
+ public int b28683;
+ public int b28684;
+ public int b28685;
+ public int b28686;
+ public int b28687;
+ public int b28688;
+ public int b28689;
+ public int b28690;
+ public int b28691;
+ public int b28692;
+ public int b28693;
+ public int b28694;
+ public int b28695;
+ public int b28696;
+ public int b28697;
+ public int b28698;
+ public int b28699;
+ public int b28700;
+ public int b28701;
+ public int b28702;
+ public int b28703;
+ public int b28704;
+ public int b28705;
+ public int b28706;
+ public int b28707;
+ public int b28708;
+ public int b28709;
+ public int b28710;
+ public int b28711;
+ public int b28712;
+ public int b28713;
+ public int b28714;
+ public int b28715;
+ public int b28716;
+ public int b28717;
+ public int b28718;
+ public int b28719;
+ public int b28720;
+ public int b28721;
+ public int b28722;
+ public int b28723;
+ public int b28724;
+ public int b28725;
+ public int b28726;
+ public int b28727;
+ public int b28728;
+ public int b28729;
+ public int b28730;
+ public int b28731;
+ public int b28732;
+ public int b28733;
+ public int b28734;
+ public int b28735;
+ public int b28736;
+ public int b28737;
+ public int b28738;
+ public int b28739;
+ public int b28740;
+ public int b28741;
+ public int b28742;
+ public int b28743;
+ public int b28744;
+ public int b28745;
+ public int b28746;
+ public int b28747;
+ public int b28748;
+ public int b28749;
+ public int b28750;
+ public int b28751;
+ public int b28752;
+ public int b28753;
+ public int b28754;
+ public int b28755;
+ public int b28756;
+ public int b28757;
+ public int b28758;
+ public int b28759;
+ public int b28760;
+ public int b28761;
+ public int b28762;
+ public int b28763;
+ public int b28764;
+ public int b28765;
+ public int b28766;
+ public int b28767;
+ public int b28768;
+ public int b28769;
+ public int b28770;
+ public int b28771;
+ public int b28772;
+ public int b28773;
+ public int b28774;
+ public int b28775;
+ public int b28776;
+ public int b28777;
+ public int b28778;
+ public int b28779;
+ public int b28780;
+ public int b28781;
+ public int b28782;
+ public int b28783;
+ public int b28784;
+ public int b28785;
+ public int b28786;
+ public int b28787;
+ public int b28788;
+ public int b28789;
+ public int b28790;
+ public int b28791;
+ public int b28792;
+ public int b28793;
+ public int b28794;
+ public int b28795;
+ public int b28796;
+ public int b28797;
+ public int b28798;
+ public int b28799;
+ public int b28800;
+ public int b28801;
+ public int b28802;
+ public int b28803;
+ public int b28804;
+ public int b28805;
+ public int b28806;
+ public int b28807;
+ public int b28808;
+ public int b28809;
+ public int b28810;
+ public int b28811;
+ public int b28812;
+ public int b28813;
+ public int b28814;
+ public int b28815;
+ public int b28816;
+ public int b28817;
+ public int b28818;
+ public int b28819;
+ public int b28820;
+ public int b28821;
+ public int b28822;
+ public int b28823;
+ public int b28824;
+ public int b28825;
+ public int b28826;
+ public int b28827;
+ public int b28828;
+ public int b28829;
+ public int b28830;
+ public int b28831;
+ public int b28832;
+ public int b28833;
+ public int b28834;
+ public int b28835;
+ public int b28836;
+ public int b28837;
+ public int b28838;
+ public int b28839;
+ public int b28840;
+ public int b28841;
+ public int b28842;
+ public int b28843;
+ public int b28844;
+ public int b28845;
+ public int b28846;
+ public int b28847;
+ public int b28848;
+ public int b28849;
+ public int b28850;
+ public int b28851;
+ public int b28852;
+ public int b28853;
+ public int b28854;
+ public int b28855;
+ public int b28856;
+ public int b28857;
+ public int b28858;
+ public int b28859;
+ public int b28860;
+ public int b28861;
+ public int b28862;
+ public int b28863;
+ public int b28864;
+ public int b28865;
+ public int b28866;
+ public int b28867;
+ public int b28868;
+ public int b28869;
+ public int b28870;
+ public int b28871;
+ public int b28872;
+ public int b28873;
+ public int b28874;
+ public int b28875;
+ public int b28876;
+ public int b28877;
+ public int b28878;
+ public int b28879;
+ public int b28880;
+ public int b28881;
+ public int b28882;
+ public int b28883;
+ public int b28884;
+ public int b28885;
+ public int b28886;
+ public int b28887;
+ public int b28888;
+ public int b28889;
+ public int b28890;
+ public int b28891;
+ public int b28892;
+ public int b28893;
+ public int b28894;
+ public int b28895;
+ public int b28896;
+ public int b28897;
+ public int b28898;
+ public int b28899;
+ public int b28900;
+ public int b28901;
+ public int b28902;
+ public int b28903;
+ public int b28904;
+ public int b28905;
+ public int b28906;
+ public int b28907;
+ public int b28908;
+ public int b28909;
+ public int b28910;
+ public int b28911;
+ public int b28912;
+ public int b28913;
+ public int b28914;
+ public int b28915;
+ public int b28916;
+ public int b28917;
+ public int b28918;
+ public int b28919;
+ public int b28920;
+ public int b28921;
+ public int b28922;
+ public int b28923;
+ public int b28924;
+ public int b28925;
+ public int b28926;
+ public int b28927;
+ public int b28928;
+ public int b28929;
+ public int b28930;
+ public int b28931;
+ public int b28932;
+ public int b28933;
+ public int b28934;
+ public int b28935;
+ public int b28936;
+ public int b28937;
+ public int b28938;
+ public int b28939;
+ public int b28940;
+ public int b28941;
+ public int b28942;
+ public int b28943;
+ public int b28944;
+ public int b28945;
+ public int b28946;
+ public int b28947;
+ public int b28948;
+ public int b28949;
+ public int b28950;
+ public int b28951;
+ public int b28952;
+ public int b28953;
+ public int b28954;
+ public int b28955;
+ public int b28956;
+ public int b28957;
+ public int b28958;
+ public int b28959;
+ public int b28960;
+ public int b28961;
+ public int b28962;
+ public int b28963;
+ public int b28964;
+ public int b28965;
+ public int b28966;
+ public int b28967;
+ public int b28968;
+ public int b28969;
+ public int b28970;
+ public int b28971;
+ public int b28972;
+ public int b28973;
+ public int b28974;
+ public int b28975;
+ public int b28976;
+ public int b28977;
+ public int b28978;
+ public int b28979;
+ public int b28980;
+ public int b28981;
+ public int b28982;
+ public int b28983;
+ public int b28984;
+ public int b28985;
+ public int b28986;
+ public int b28987;
+ public int b28988;
+ public int b28989;
+ public int b28990;
+ public int b28991;
+ public int b28992;
+ public int b28993;
+ public int b28994;
+ public int b28995;
+ public int b28996;
+ public int b28997;
+ public int b28998;
+ public int b28999;
+ public int b29000;
+ public int b29001;
+ public int b29002;
+ public int b29003;
+ public int b29004;
+ public int b29005;
+ public int b29006;
+ public int b29007;
+ public int b29008;
+ public int b29009;
+ public int b29010;
+ public int b29011;
+ public int b29012;
+ public int b29013;
+ public int b29014;
+ public int b29015;
+ public int b29016;
+ public int b29017;
+ public int b29018;
+ public int b29019;
+ public int b29020;
+ public int b29021;
+ public int b29022;
+ public int b29023;
+ public int b29024;
+ public int b29025;
+ public int b29026;
+ public int b29027;
+ public int b29028;
+ public int b29029;
+ public int b29030;
+ public int b29031;
+ public int b29032;
+ public int b29033;
+ public int b29034;
+ public int b29035;
+ public int b29036;
+ public int b29037;
+ public int b29038;
+ public int b29039;
+ public int b29040;
+ public int b29041;
+ public int b29042;
+ public int b29043;
+ public int b29044;
+ public int b29045;
+ public int b29046;
+ public int b29047;
+ public int b29048;
+ public int b29049;
+ public int b29050;
+ public int b29051;
+ public int b29052;
+ public int b29053;
+ public int b29054;
+ public int b29055;
+ public int b29056;
+ public int b29057;
+ public int b29058;
+ public int b29059;
+ public int b29060;
+ public int b29061;
+ public int b29062;
+ public int b29063;
+ public int b29064;
+ public int b29065;
+ public int b29066;
+ public int b29067;
+ public int b29068;
+ public int b29069;
+ public int b29070;
+ public int b29071;
+ public int b29072;
+ public int b29073;
+ public int b29074;
+ public int b29075;
+ public int b29076;
+ public int b29077;
+ public int b29078;
+ public int b29079;
+ public int b29080;
+ public int b29081;
+ public int b29082;
+ public int b29083;
+ public int b29084;
+ public int b29085;
+ public int b29086;
+ public int b29087;
+ public int b29088;
+ public int b29089;
+ public int b29090;
+ public int b29091;
+ public int b29092;
+ public int b29093;
+ public int b29094;
+ public int b29095;
+ public int b29096;
+ public int b29097;
+ public int b29098;
+ public int b29099;
+ public int b29100;
+ public int b29101;
+ public int b29102;
+ public int b29103;
+ public int b29104;
+ public int b29105;
+ public int b29106;
+ public int b29107;
+ public int b29108;
+ public int b29109;
+ public int b29110;
+ public int b29111;
+ public int b29112;
+ public int b29113;
+ public int b29114;
+ public int b29115;
+ public int b29116;
+ public int b29117;
+ public int b29118;
+ public int b29119;
+ public int b29120;
+ public int b29121;
+ public int b29122;
+ public int b29123;
+ public int b29124;
+ public int b29125;
+ public int b29126;
+ public int b29127;
+ public int b29128;
+ public int b29129;
+ public int b29130;
+ public int b29131;
+ public int b29132;
+ public int b29133;
+ public int b29134;
+ public int b29135;
+ public int b29136;
+ public int b29137;
+ public int b29138;
+ public int b29139;
+ public int b29140;
+ public int b29141;
+ public int b29142;
+ public int b29143;
+ public int b29144;
+ public int b29145;
+ public int b29146;
+ public int b29147;
+ public int b29148;
+ public int b29149;
+ public int b29150;
+ public int b29151;
+ public int b29152;
+ public int b29153;
+ public int b29154;
+ public int b29155;
+ public int b29156;
+ public int b29157;
+ public int b29158;
+ public int b29159;
+ public int b29160;
+ public int b29161;
+ public int b29162;
+ public int b29163;
+ public int b29164;
+ public int b29165;
+ public int b29166;
+ public int b29167;
+ public int b29168;
+ public int b29169;
+ public int b29170;
+ public int b29171;
+ public int b29172;
+ public int b29173;
+ public int b29174;
+ public int b29175;
+ public int b29176;
+ public int b29177;
+ public int b29178;
+ public int b29179;
+ public int b29180;
+ public int b29181;
+ public int b29182;
+ public int b29183;
+ public int b29184;
+ public int b29185;
+ public int b29186;
+ public int b29187;
+ public int b29188;
+ public int b29189;
+ public int b29190;
+ public int b29191;
+ public int b29192;
+ public int b29193;
+ public int b29194;
+ public int b29195;
+ public int b29196;
+ public int b29197;
+ public int b29198;
+ public int b29199;
+ public int b29200;
+ public int b29201;
+ public int b29202;
+ public int b29203;
+ public int b29204;
+ public int b29205;
+ public int b29206;
+ public int b29207;
+ public int b29208;
+ public int b29209;
+ public int b29210;
+ public int b29211;
+ public int b29212;
+ public int b29213;
+ public int b29214;
+ public int b29215;
+ public int b29216;
+ public int b29217;
+ public int b29218;
+ public int b29219;
+ public int b29220;
+ public int b29221;
+ public int b29222;
+ public int b29223;
+ public int b29224;
+ public int b29225;
+ public int b29226;
+ public int b29227;
+ public int b29228;
+ public int b29229;
+ public int b29230;
+ public int b29231;
+ public int b29232;
+ public int b29233;
+ public int b29234;
+ public int b29235;
+ public int b29236;
+ public int b29237;
+ public int b29238;
+ public int b29239;
+ public int b29240;
+ public int b29241;
+ public int b29242;
+ public int b29243;
+ public int b29244;
+ public int b29245;
+ public int b29246;
+ public int b29247;
+ public int b29248;
+ public int b29249;
+ public int b29250;
+ public int b29251;
+ public int b29252;
+ public int b29253;
+ public int b29254;
+ public int b29255;
+ public int b29256;
+ public int b29257;
+ public int b29258;
+ public int b29259;
+ public int b29260;
+ public int b29261;
+ public int b29262;
+ public int b29263;
+ public int b29264;
+ public int b29265;
+ public int b29266;
+ public int b29267;
+ public int b29268;
+ public int b29269;
+ public int b29270;
+ public int b29271;
+ public int b29272;
+ public int b29273;
+ public int b29274;
+ public int b29275;
+ public int b29276;
+ public int b29277;
+ public int b29278;
+ public int b29279;
+ public int b29280;
+ public int b29281;
+ public int b29282;
+ public int b29283;
+ public int b29284;
+ public int b29285;
+ public int b29286;
+ public int b29287;
+ public int b29288;
+ public int b29289;
+ public int b29290;
+ public int b29291;
+ public int b29292;
+ public int b29293;
+ public int b29294;
+ public int b29295;
+ public int b29296;
+ public int b29297;
+ public int b29298;
+ public int b29299;
+ public int b29300;
+ public int b29301;
+ public int b29302;
+ public int b29303;
+ public int b29304;
+ public int b29305;
+ public int b29306;
+ public int b29307;
+ public int b29308;
+ public int b29309;
+ public int b29310;
+ public int b29311;
+ public int b29312;
+ public int b29313;
+ public int b29314;
+ public int b29315;
+ public int b29316;
+ public int b29317;
+ public int b29318;
+ public int b29319;
+ public int b29320;
+ public int b29321;
+ public int b29322;
+ public int b29323;
+ public int b29324;
+ public int b29325;
+ public int b29326;
+ public int b29327;
+ public int b29328;
+ public int b29329;
+ public int b29330;
+ public int b29331;
+ public int b29332;
+ public int b29333;
+ public int b29334;
+ public int b29335;
+ public int b29336;
+ public int b29337;
+ public int b29338;
+ public int b29339;
+ public int b29340;
+ public int b29341;
+ public int b29342;
+ public int b29343;
+ public int b29344;
+ public int b29345;
+ public int b29346;
+ public int b29347;
+ public int b29348;
+ public int b29349;
+ public int b29350;
+ public int b29351;
+ public int b29352;
+ public int b29353;
+ public int b29354;
+ public int b29355;
+ public int b29356;
+ public int b29357;
+ public int b29358;
+ public int b29359;
+ public int b29360;
+ public int b29361;
+ public int b29362;
+ public int b29363;
+ public int b29364;
+ public int b29365;
+ public int b29366;
+ public int b29367;
+ public int b29368;
+ public int b29369;
+ public int b29370;
+ public int b29371;
+ public int b29372;
+ public int b29373;
+ public int b29374;
+ public int b29375;
+ public int b29376;
+ public int b29377;
+ public int b29378;
+ public int b29379;
+ public int b29380;
+ public int b29381;
+ public int b29382;
+ public int b29383;
+ public int b29384;
+ public int b29385;
+ public int b29386;
+ public int b29387;
+ public int b29388;
+ public int b29389;
+ public int b29390;
+ public int b29391;
+ public int b29392;
+ public int b29393;
+ public int b29394;
+ public int b29395;
+ public int b29396;
+ public int b29397;
+ public int b29398;
+ public int b29399;
+ public int b29400;
+ public int b29401;
+ public int b29402;
+ public int b29403;
+ public int b29404;
+ public int b29405;
+ public int b29406;
+ public int b29407;
+ public int b29408;
+ public int b29409;
+ public int b29410;
+ public int b29411;
+ public int b29412;
+ public int b29413;
+ public int b29414;
+ public int b29415;
+ public int b29416;
+ public int b29417;
+ public int b29418;
+ public int b29419;
+ public int b29420;
+ public int b29421;
+ public int b29422;
+ public int b29423;
+ public int b29424;
+ public int b29425;
+ public int b29426;
+ public int b29427;
+ public int b29428;
+ public int b29429;
+ public int b29430;
+ public int b29431;
+ public int b29432;
+ public int b29433;
+ public int b29434;
+ public int b29435;
+ public int b29436;
+ public int b29437;
+ public int b29438;
+ public int b29439;
+ public int b29440;
+ public int b29441;
+ public int b29442;
+ public int b29443;
+ public int b29444;
+ public int b29445;
+ public int b29446;
+ public int b29447;
+ public int b29448;
+ public int b29449;
+ public int b29450;
+ public int b29451;
+ public int b29452;
+ public int b29453;
+ public int b29454;
+ public int b29455;
+ public int b29456;
+ public int b29457;
+ public int b29458;
+ public int b29459;
+ public int b29460;
+ public int b29461;
+ public int b29462;
+ public int b29463;
+ public int b29464;
+ public int b29465;
+ public int b29466;
+ public int b29467;
+ public int b29468;
+ public int b29469;
+ public int b29470;
+ public int b29471;
+ public int b29472;
+ public int b29473;
+ public int b29474;
+ public int b29475;
+ public int b29476;
+ public int b29477;
+ public int b29478;
+ public int b29479;
+ public int b29480;
+ public int b29481;
+ public int b29482;
+ public int b29483;
+ public int b29484;
+ public int b29485;
+ public int b29486;
+ public int b29487;
+ public int b29488;
+ public int b29489;
+ public int b29490;
+ public int b29491;
+ public int b29492;
+ public int b29493;
+ public int b29494;
+ public int b29495;
+ public int b29496;
+ public int b29497;
+ public int b29498;
+ public int b29499;
+ public int b29500;
+ public int b29501;
+ public int b29502;
+ public int b29503;
+ public int b29504;
+ public int b29505;
+ public int b29506;
+ public int b29507;
+ public int b29508;
+ public int b29509;
+ public int b29510;
+ public int b29511;
+ public int b29512;
+ public int b29513;
+ public int b29514;
+ public int b29515;
+ public int b29516;
+ public int b29517;
+ public int b29518;
+ public int b29519;
+ public int b29520;
+ public int b29521;
+ public int b29522;
+ public int b29523;
+ public int b29524;
+ public int b29525;
+ public int b29526;
+ public int b29527;
+ public int b29528;
+ public int b29529;
+ public int b29530;
+ public int b29531;
+ public int b29532;
+ public int b29533;
+ public int b29534;
+ public int b29535;
+ public int b29536;
+ public int b29537;
+ public int b29538;
+ public int b29539;
+ public int b29540;
+ public int b29541;
+ public int b29542;
+ public int b29543;
+ public int b29544;
+ public int b29545;
+ public int b29546;
+ public int b29547;
+ public int b29548;
+ public int b29549;
+ public int b29550;
+ public int b29551;
+ public int b29552;
+ public int b29553;
+ public int b29554;
+ public int b29555;
+ public int b29556;
+ public int b29557;
+ public int b29558;
+ public int b29559;
+ public int b29560;
+ public int b29561;
+ public int b29562;
+ public int b29563;
+ public int b29564;
+ public int b29565;
+ public int b29566;
+ public int b29567;
+ public int b29568;
+ public int b29569;
+ public int b29570;
+ public int b29571;
+ public int b29572;
+ public int b29573;
+ public int b29574;
+ public int b29575;
+ public int b29576;
+ public int b29577;
+ public int b29578;
+ public int b29579;
+ public int b29580;
+ public int b29581;
+ public int b29582;
+ public int b29583;
+ public int b29584;
+ public int b29585;
+ public int b29586;
+ public int b29587;
+ public int b29588;
+ public int b29589;
+ public int b29590;
+ public int b29591;
+ public int b29592;
+ public int b29593;
+ public int b29594;
+ public int b29595;
+ public int b29596;
+ public int b29597;
+ public int b29598;
+ public int b29599;
+ public int b29600;
+ public int b29601;
+ public int b29602;
+ public int b29603;
+ public int b29604;
+ public int b29605;
+ public int b29606;
+ public int b29607;
+ public int b29608;
+ public int b29609;
+ public int b29610;
+ public int b29611;
+ public int b29612;
+ public int b29613;
+ public int b29614;
+ public int b29615;
+ public int b29616;
+ public int b29617;
+ public int b29618;
+ public int b29619;
+ public int b29620;
+ public int b29621;
+ public int b29622;
+ public int b29623;
+ public int b29624;
+ public int b29625;
+ public int b29626;
+ public int b29627;
+ public int b29628;
+ public int b29629;
+ public int b29630;
+ public int b29631;
+ public int b29632;
+ public int b29633;
+ public int b29634;
+ public int b29635;
+ public int b29636;
+ public int b29637;
+ public int b29638;
+ public int b29639;
+ public int b29640;
+ public int b29641;
+ public int b29642;
+ public int b29643;
+ public int b29644;
+ public int b29645;
+ public int b29646;
+ public int b29647;
+ public int b29648;
+ public int b29649;
+ public int b29650;
+ public int b29651;
+ public int b29652;
+ public int b29653;
+ public int b29654;
+ public int b29655;
+ public int b29656;
+ public int b29657;
+ public int b29658;
+ public int b29659;
+ public int b29660;
+ public int b29661;
+ public int b29662;
+ public int b29663;
+ public int b29664;
+ public int b29665;
+ public int b29666;
+ public int b29667;
+ public int b29668;
+ public int b29669;
+ public int b29670;
+ public int b29671;
+ public int b29672;
+ public int b29673;
+ public int b29674;
+ public int b29675;
+ public int b29676;
+ public int b29677;
+ public int b29678;
+ public int b29679;
+ public int b29680;
+ public int b29681;
+ public int b29682;
+ public int b29683;
+ public int b29684;
+ public int b29685;
+ public int b29686;
+ public int b29687;
+ public int b29688;
+ public int b29689;
+ public int b29690;
+ public int b29691;
+ public int b29692;
+ public int b29693;
+ public int b29694;
+ public int b29695;
+ public int b29696;
+ public int b29697;
+ public int b29698;
+ public int b29699;
+ public int b29700;
+ public int b29701;
+ public int b29702;
+ public int b29703;
+ public int b29704;
+ public int b29705;
+ public int b29706;
+ public int b29707;
+ public int b29708;
+ public int b29709;
+ public int b29710;
+ public int b29711;
+ public int b29712;
+ public int b29713;
+ public int b29714;
+ public int b29715;
+ public int b29716;
+ public int b29717;
+ public int b29718;
+ public int b29719;
+ public int b29720;
+ public int b29721;
+ public int b29722;
+ public int b29723;
+ public int b29724;
+ public int b29725;
+ public int b29726;
+ public int b29727;
+ public int b29728;
+ public int b29729;
+ public int b29730;
+ public int b29731;
+ public int b29732;
+ public int b29733;
+ public int b29734;
+ public int b29735;
+ public int b29736;
+ public int b29737;
+ public int b29738;
+ public int b29739;
+ public int b29740;
+ public int b29741;
+ public int b29742;
+ public int b29743;
+ public int b29744;
+ public int b29745;
+ public int b29746;
+ public int b29747;
+ public int b29748;
+ public int b29749;
+ public int b29750;
+ public int b29751;
+ public int b29752;
+ public int b29753;
+ public int b29754;
+ public int b29755;
+ public int b29756;
+ public int b29757;
+ public int b29758;
+ public int b29759;
+ public int b29760;
+ public int b29761;
+ public int b29762;
+ public int b29763;
+ public int b29764;
+ public int b29765;
+ public int b29766;
+ public int b29767;
+ public int b29768;
+ public int b29769;
+ public int b29770;
+ public int b29771;
+ public int b29772;
+ public int b29773;
+ public int b29774;
+ public int b29775;
+ public int b29776;
+ public int b29777;
+ public int b29778;
+ public int b29779;
+ public int b29780;
+ public int b29781;
+ public int b29782;
+ public int b29783;
+ public int b29784;
+ public int b29785;
+ public int b29786;
+ public int b29787;
+ public int b29788;
+ public int b29789;
+ public int b29790;
+ public int b29791;
+ public int b29792;
+ public int b29793;
+ public int b29794;
+ public int b29795;
+ public int b29796;
+ public int b29797;
+ public int b29798;
+ public int b29799;
+ public int b29800;
+ public int b29801;
+ public int b29802;
+ public int b29803;
+ public int b29804;
+ public int b29805;
+ public int b29806;
+ public int b29807;
+ public int b29808;
+ public int b29809;
+ public int b29810;
+ public int b29811;
+ public int b29812;
+ public int b29813;
+ public int b29814;
+ public int b29815;
+ public int b29816;
+ public int b29817;
+ public int b29818;
+ public int b29819;
+ public int b29820;
+ public int b29821;
+ public int b29822;
+ public int b29823;
+ public int b29824;
+ public int b29825;
+ public int b29826;
+ public int b29827;
+ public int b29828;
+ public int b29829;
+ public int b29830;
+ public int b29831;
+ public int b29832;
+ public int b29833;
+ public int b29834;
+ public int b29835;
+ public int b29836;
+ public int b29837;
+ public int b29838;
+ public int b29839;
+ public int b29840;
+ public int b29841;
+ public int b29842;
+ public int b29843;
+ public int b29844;
+ public int b29845;
+ public int b29846;
+ public int b29847;
+ public int b29848;
+ public int b29849;
+ public int b29850;
+ public int b29851;
+ public int b29852;
+ public int b29853;
+ public int b29854;
+ public int b29855;
+ public int b29856;
+ public int b29857;
+ public int b29858;
+ public int b29859;
+ public int b29860;
+ public int b29861;
+ public int b29862;
+ public int b29863;
+ public int b29864;
+ public int b29865;
+ public int b29866;
+ public int b29867;
+ public int b29868;
+ public int b29869;
+ public int b29870;
+ public int b29871;
+ public int b29872;
+ public int b29873;
+ public int b29874;
+ public int b29875;
+ public int b29876;
+ public int b29877;
+ public int b29878;
+ public int b29879;
+ public int b29880;
+ public int b29881;
+ public int b29882;
+ public int b29883;
+ public int b29884;
+ public int b29885;
+ public int b29886;
+ public int b29887;
+ public int b29888;
+ public int b29889;
+ public int b29890;
+ public int b29891;
+ public int b29892;
+ public int b29893;
+ public int b29894;
+ public int b29895;
+ public int b29896;
+ public int b29897;
+ public int b29898;
+ public int b29899;
+ public int b29900;
+ public int b29901;
+ public int b29902;
+ public int b29903;
+ public int b29904;
+ public int b29905;
+ public int b29906;
+ public int b29907;
+ public int b29908;
+ public int b29909;
+ public int b29910;
+ public int b29911;
+ public int b29912;
+ public int b29913;
+ public int b29914;
+ public int b29915;
+ public int b29916;
+ public int b29917;
+ public int b29918;
+ public int b29919;
+ public int b29920;
+ public int b29921;
+ public int b29922;
+ public int b29923;
+ public int b29924;
+ public int b29925;
+ public int b29926;
+ public int b29927;
+ public int b29928;
+ public int b29929;
+ public int b29930;
+ public int b29931;
+ public int b29932;
+ public int b29933;
+ public int b29934;
+ public int b29935;
+ public int b29936;
+ public int b29937;
+ public int b29938;
+ public int b29939;
+ public int b29940;
+ public int b29941;
+ public int b29942;
+ public int b29943;
+ public int b29944;
+ public int b29945;
+ public int b29946;
+ public int b29947;
+ public int b29948;
+ public int b29949;
+ public int b29950;
+ public int b29951;
+ public int b29952;
+ public int b29953;
+ public int b29954;
+ public int b29955;
+ public int b29956;
+ public int b29957;
+ public int b29958;
+ public int b29959;
+ public int b29960;
+ public int b29961;
+ public int b29962;
+ public int b29963;
+ public int b29964;
+ public int b29965;
+ public int b29966;
+ public int b29967;
+ public int b29968;
+ public int b29969;
+ public int b29970;
+ public int b29971;
+ public int b29972;
+ public int b29973;
+ public int b29974;
+ public int b29975;
+ public int b29976;
+ public int b29977;
+ public int b29978;
+ public int b29979;
+ public int b29980;
+ public int b29981;
+ public int b29982;
+ public int b29983;
+ public int b29984;
+ public int b29985;
+ public int b29986;
+ public int b29987;
+ public int b29988;
+ public int b29989;
+ public int b29990;
+ public int b29991;
+ public int b29992;
+ public int b29993;
+ public int b29994;
+ public int b29995;
+ public int b29996;
+ public int b29997;
+ public int b29998;
+ public int b29999;
+ public int b30000;
+ public int b30001;
+ public int b30002;
+ public int b30003;
+ public int b30004;
+ public int b30005;
+ public int b30006;
+ public int b30007;
+ public int b30008;
+ public int b30009;
+ public int b30010;
+ public int b30011;
+ public int b30012;
+ public int b30013;
+ public int b30014;
+ public int b30015;
+ public int b30016;
+ public int b30017;
+ public int b30018;
+ public int b30019;
+ public int b30020;
+ public int b30021;
+ public int b30022;
+ public int b30023;
+ public int b30024;
+ public int b30025;
+ public int b30026;
+ public int b30027;
+ public int b30028;
+ public int b30029;
+ public int b30030;
+ public int b30031;
+ public int b30032;
+ public int b30033;
+ public int b30034;
+ public int b30035;
+ public int b30036;
+ public int b30037;
+ public int b30038;
+ public int b30039;
+ public int b30040;
+ public int b30041;
+ public int b30042;
+ public int b30043;
+ public int b30044;
+ public int b30045;
+ public int b30046;
+ public int b30047;
+ public int b30048;
+ public int b30049;
+ public int b30050;
+ public int b30051;
+ public int b30052;
+ public int b30053;
+ public int b30054;
+ public int b30055;
+ public int b30056;
+ public int b30057;
+ public int b30058;
+ public int b30059;
+ public int b30060;
+ public int b30061;
+ public int b30062;
+ public int b30063;
+ public int b30064;
+ public int b30065;
+ public int b30066;
+ public int b30067;
+ public int b30068;
+ public int b30069;
+ public int b30070;
+ public int b30071;
+ public int b30072;
+ public int b30073;
+ public int b30074;
+ public int b30075;
+ public int b30076;
+ public int b30077;
+ public int b30078;
+ public int b30079;
+ public int b30080;
+ public int b30081;
+ public int b30082;
+ public int b30083;
+ public int b30084;
+ public int b30085;
+ public int b30086;
+ public int b30087;
+ public int b30088;
+ public int b30089;
+ public int b30090;
+ public int b30091;
+ public int b30092;
+ public int b30093;
+ public int b30094;
+ public int b30095;
+ public int b30096;
+ public int b30097;
+ public int b30098;
+ public int b30099;
+ public int b30100;
+ public int b30101;
+ public int b30102;
+ public int b30103;
+ public int b30104;
+ public int b30105;
+ public int b30106;
+ public int b30107;
+ public int b30108;
+ public int b30109;
+ public int b30110;
+ public int b30111;
+ public int b30112;
+ public int b30113;
+ public int b30114;
+ public int b30115;
+ public int b30116;
+ public int b30117;
+ public int b30118;
+ public int b30119;
+ public int b30120;
+ public int b30121;
+ public int b30122;
+ public int b30123;
+ public int b30124;
+ public int b30125;
+ public int b30126;
+ public int b30127;
+ public int b30128;
+ public int b30129;
+ public int b30130;
+ public int b30131;
+ public int b30132;
+ public int b30133;
+ public int b30134;
+ public int b30135;
+ public int b30136;
+ public int b30137;
+ public int b30138;
+ public int b30139;
+ public int b30140;
+ public int b30141;
+ public int b30142;
+ public int b30143;
+ public int b30144;
+ public int b30145;
+ public int b30146;
+ public int b30147;
+ public int b30148;
+ public int b30149;
+ public int b30150;
+ public int b30151;
+ public int b30152;
+ public int b30153;
+ public int b30154;
+ public int b30155;
+ public int b30156;
+ public int b30157;
+ public int b30158;
+ public int b30159;
+ public int b30160;
+ public int b30161;
+ public int b30162;
+ public int b30163;
+ public int b30164;
+ public int b30165;
+ public int b30166;
+ public int b30167;
+ public int b30168;
+ public int b30169;
+ public int b30170;
+ public int b30171;
+ public int b30172;
+ public int b30173;
+ public int b30174;
+ public int b30175;
+ public int b30176;
+ public int b30177;
+ public int b30178;
+ public int b30179;
+ public int b30180;
+ public int b30181;
+ public int b30182;
+ public int b30183;
+ public int b30184;
+ public int b30185;
+ public int b30186;
+ public int b30187;
+ public int b30188;
+ public int b30189;
+ public int b30190;
+ public int b30191;
+ public int b30192;
+ public int b30193;
+ public int b30194;
+ public int b30195;
+ public int b30196;
+ public int b30197;
+ public int b30198;
+ public int b30199;
+ public int b30200;
+ public int b30201;
+ public int b30202;
+ public int b30203;
+ public int b30204;
+ public int b30205;
+ public int b30206;
+ public int b30207;
+ public int b30208;
+ public int b30209;
+ public int b30210;
+ public int b30211;
+ public int b30212;
+ public int b30213;
+ public int b30214;
+ public int b30215;
+ public int b30216;
+ public int b30217;
+ public int b30218;
+ public int b30219;
+ public int b30220;
+ public int b30221;
+ public int b30222;
+ public int b30223;
+ public int b30224;
+ public int b30225;
+ public int b30226;
+ public int b30227;
+ public int b30228;
+ public int b30229;
+ public int b30230;
+ public int b30231;
+ public int b30232;
+ public int b30233;
+ public int b30234;
+ public int b30235;
+ public int b30236;
+ public int b30237;
+ public int b30238;
+ public int b30239;
+ public int b30240;
+ public int b30241;
+ public int b30242;
+ public int b30243;
+ public int b30244;
+ public int b30245;
+ public int b30246;
+ public int b30247;
+ public int b30248;
+ public int b30249;
+ public int b30250;
+ public int b30251;
+ public int b30252;
+ public int b30253;
+ public int b30254;
+ public int b30255;
+ public int b30256;
+ public int b30257;
+ public int b30258;
+ public int b30259;
+ public int b30260;
+ public int b30261;
+ public int b30262;
+ public int b30263;
+ public int b30264;
+ public int b30265;
+ public int b30266;
+ public int b30267;
+ public int b30268;
+ public int b30269;
+ public int b30270;
+ public int b30271;
+ public int b30272;
+ public int b30273;
+ public int b30274;
+ public int b30275;
+ public int b30276;
+ public int b30277;
+ public int b30278;
+ public int b30279;
+ public int b30280;
+ public int b30281;
+ public int b30282;
+ public int b30283;
+ public int b30284;
+ public int b30285;
+ public int b30286;
+ public int b30287;
+ public int b30288;
+ public int b30289;
+ public int b30290;
+ public int b30291;
+ public int b30292;
+ public int b30293;
+ public int b30294;
+ public int b30295;
+ public int b30296;
+ public int b30297;
+ public int b30298;
+ public int b30299;
+ public int b30300;
+ public int b30301;
+ public int b30302;
+ public int b30303;
+ public int b30304;
+ public int b30305;
+ public int b30306;
+ public int b30307;
+ public int b30308;
+ public int b30309;
+ public int b30310;
+ public int b30311;
+ public int b30312;
+ public int b30313;
+ public int b30314;
+ public int b30315;
+ public int b30316;
+ public int b30317;
+ public int b30318;
+ public int b30319;
+ public int b30320;
+ public int b30321;
+ public int b30322;
+ public int b30323;
+ public int b30324;
+ public int b30325;
+ public int b30326;
+ public int b30327;
+ public int b30328;
+ public int b30329;
+ public int b30330;
+ public int b30331;
+ public int b30332;
+ public int b30333;
+ public int b30334;
+ public int b30335;
+ public int b30336;
+ public int b30337;
+ public int b30338;
+ public int b30339;
+ public int b30340;
+ public int b30341;
+ public int b30342;
+ public int b30343;
+ public int b30344;
+ public int b30345;
+ public int b30346;
+ public int b30347;
+ public int b30348;
+ public int b30349;
+ public int b30350;
+ public int b30351;
+ public int b30352;
+ public int b30353;
+ public int b30354;
+ public int b30355;
+ public int b30356;
+ public int b30357;
+ public int b30358;
+ public int b30359;
+ public int b30360;
+ public int b30361;
+ public int b30362;
+ public int b30363;
+ public int b30364;
+ public int b30365;
+ public int b30366;
+ public int b30367;
+ public int b30368;
+ public int b30369;
+ public int b30370;
+ public int b30371;
+ public int b30372;
+ public int b30373;
+ public int b30374;
+ public int b30375;
+ public int b30376;
+ public int b30377;
+ public int b30378;
+ public int b30379;
+ public int b30380;
+ public int b30381;
+ public int b30382;
+ public int b30383;
+ public int b30384;
+ public int b30385;
+ public int b30386;
+ public int b30387;
+ public int b30388;
+ public int b30389;
+ public int b30390;
+ public int b30391;
+ public int b30392;
+ public int b30393;
+ public int b30394;
+ public int b30395;
+ public int b30396;
+ public int b30397;
+ public int b30398;
+ public int b30399;
+ public int b30400;
+ public int b30401;
+ public int b30402;
+ public int b30403;
+ public int b30404;
+ public int b30405;
+ public int b30406;
+ public int b30407;
+ public int b30408;
+ public int b30409;
+ public int b30410;
+ public int b30411;
+ public int b30412;
+ public int b30413;
+ public int b30414;
+ public int b30415;
+ public int b30416;
+ public int b30417;
+ public int b30418;
+ public int b30419;
+ public int b30420;
+ public int b30421;
+ public int b30422;
+ public int b30423;
+ public int b30424;
+ public int b30425;
+ public int b30426;
+ public int b30427;
+ public int b30428;
+ public int b30429;
+ public int b30430;
+ public int b30431;
+ public int b30432;
+ public int b30433;
+ public int b30434;
+ public int b30435;
+ public int b30436;
+ public int b30437;
+ public int b30438;
+ public int b30439;
+ public int b30440;
+ public int b30441;
+ public int b30442;
+ public int b30443;
+ public int b30444;
+ public int b30445;
+ public int b30446;
+ public int b30447;
+ public int b30448;
+ public int b30449;
+ public int b30450;
+ public int b30451;
+ public int b30452;
+ public int b30453;
+ public int b30454;
+ public int b30455;
+ public int b30456;
+ public int b30457;
+ public int b30458;
+ public int b30459;
+ public int b30460;
+ public int b30461;
+ public int b30462;
+ public int b30463;
+ public int b30464;
+ public int b30465;
+ public int b30466;
+ public int b30467;
+ public int b30468;
+ public int b30469;
+ public int b30470;
+ public int b30471;
+ public int b30472;
+ public int b30473;
+ public int b30474;
+ public int b30475;
+ public int b30476;
+ public int b30477;
+ public int b30478;
+ public int b30479;
+ public int b30480;
+ public int b30481;
+ public int b30482;
+ public int b30483;
+ public int b30484;
+ public int b30485;
+ public int b30486;
+ public int b30487;
+ public int b30488;
+ public int b30489;
+ public int b30490;
+ public int b30491;
+ public int b30492;
+ public int b30493;
+ public int b30494;
+ public int b30495;
+ public int b30496;
+ public int b30497;
+ public int b30498;
+ public int b30499;
+ public int b30500;
+ public int b30501;
+ public int b30502;
+ public int b30503;
+ public int b30504;
+ public int b30505;
+ public int b30506;
+ public int b30507;
+ public int b30508;
+ public int b30509;
+ public int b30510;
+ public int b30511;
+ public int b30512;
+ public int b30513;
+ public int b30514;
+ public int b30515;
+ public int b30516;
+ public int b30517;
+ public int b30518;
+ public int b30519;
+ public int b30520;
+ public int b30521;
+ public int b30522;
+ public int b30523;
+ public int b30524;
+ public int b30525;
+ public int b30526;
+ public int b30527;
+ public int b30528;
+ public int b30529;
+ public int b30530;
+ public int b30531;
+ public int b30532;
+ public int b30533;
+ public int b30534;
+ public int b30535;
+ public int b30536;
+ public int b30537;
+ public int b30538;
+ public int b30539;
+ public int b30540;
+ public int b30541;
+ public int b30542;
+ public int b30543;
+ public int b30544;
+ public int b30545;
+ public int b30546;
+ public int b30547;
+ public int b30548;
+ public int b30549;
+ public int b30550;
+ public int b30551;
+ public int b30552;
+ public int b30553;
+ public int b30554;
+ public int b30555;
+ public int b30556;
+ public int b30557;
+ public int b30558;
+ public int b30559;
+ public int b30560;
+ public int b30561;
+ public int b30562;
+ public int b30563;
+ public int b30564;
+ public int b30565;
+ public int b30566;
+ public int b30567;
+ public int b30568;
+ public int b30569;
+ public int b30570;
+ public int b30571;
+ public int b30572;
+ public int b30573;
+ public int b30574;
+ public int b30575;
+ public int b30576;
+ public int b30577;
+ public int b30578;
+ public int b30579;
+ public int b30580;
+ public int b30581;
+ public int b30582;
+ public int b30583;
+ public int b30584;
+ public int b30585;
+ public int b30586;
+ public int b30587;
+ public int b30588;
+ public int b30589;
+ public int b30590;
+ public int b30591;
+ public int b30592;
+ public int b30593;
+ public int b30594;
+ public int b30595;
+ public int b30596;
+ public int b30597;
+ public int b30598;
+ public int b30599;
+ public int b30600;
+ public int b30601;
+ public int b30602;
+ public int b30603;
+ public int b30604;
+ public int b30605;
+ public int b30606;
+ public int b30607;
+ public int b30608;
+ public int b30609;
+ public int b30610;
+ public int b30611;
+ public int b30612;
+ public int b30613;
+ public int b30614;
+ public int b30615;
+ public int b30616;
+ public int b30617;
+ public int b30618;
+ public int b30619;
+ public int b30620;
+ public int b30621;
+ public int b30622;
+ public int b30623;
+ public int b30624;
+ public int b30625;
+ public int b30626;
+ public int b30627;
+ public int b30628;
+ public int b30629;
+ public int b30630;
+ public int b30631;
+ public int b30632;
+ public int b30633;
+ public int b30634;
+ public int b30635;
+ public int b30636;
+ public int b30637;
+ public int b30638;
+ public int b30639;
+ public int b30640;
+ public int b30641;
+ public int b30642;
+ public int b30643;
+ public int b30644;
+ public int b30645;
+ public int b30646;
+ public int b30647;
+ public int b30648;
+ public int b30649;
+ public int b30650;
+ public int b30651;
+ public int b30652;
+ public int b30653;
+ public int b30654;
+ public int b30655;
+ public int b30656;
+ public int b30657;
+ public int b30658;
+ public int b30659;
+ public int b30660;
+ public int b30661;
+ public int b30662;
+ public int b30663;
+ public int b30664;
+ public int b30665;
+ public int b30666;
+ public int b30667;
+ public int b30668;
+ public int b30669;
+ public int b30670;
+ public int b30671;
+ public int b30672;
+ public int b30673;
+ public int b30674;
+ public int b30675;
+ public int b30676;
+ public int b30677;
+ public int b30678;
+ public int b30679;
+ public int b30680;
+ public int b30681;
+ public int b30682;
+ public int b30683;
+ public int b30684;
+ public int b30685;
+ public int b30686;
+ public int b30687;
+ public int b30688;
+ public int b30689;
+ public int b30690;
+ public int b30691;
+ public int b30692;
+ public int b30693;
+ public int b30694;
+ public int b30695;
+ public int b30696;
+ public int b30697;
+ public int b30698;
+ public int b30699;
+ public int b30700;
+ public int b30701;
+ public int b30702;
+ public int b30703;
+ public int b30704;
+ public int b30705;
+ public int b30706;
+ public int b30707;
+ public int b30708;
+ public int b30709;
+ public int b30710;
+ public int b30711;
+ public int b30712;
+ public int b30713;
+ public int b30714;
+ public int b30715;
+ public int b30716;
+ public int b30717;
+ public int b30718;
+ public int b30719;
+ public int b30720;
+ public int b30721;
+ public int b30722;
+ public int b30723;
+ public int b30724;
+ public int b30725;
+ public int b30726;
+ public int b30727;
+ public int b30728;
+ public int b30729;
+ public int b30730;
+ public int b30731;
+ public int b30732;
+ public int b30733;
+ public int b30734;
+ public int b30735;
+ public int b30736;
+ public int b30737;
+ public int b30738;
+ public int b30739;
+ public int b30740;
+ public int b30741;
+ public int b30742;
+ public int b30743;
+ public int b30744;
+ public int b30745;
+ public int b30746;
+ public int b30747;
+ public int b30748;
+ public int b30749;
+ public int b30750;
+ public int b30751;
+ public int b30752;
+ public int b30753;
+ public int b30754;
+ public int b30755;
+ public int b30756;
+ public int b30757;
+ public int b30758;
+ public int b30759;
+ public int b30760;
+ public int b30761;
+ public int b30762;
+ public int b30763;
+ public int b30764;
+ public int b30765;
+ public int b30766;
+ public int b30767;
+ public int b30768;
+ public int b30769;
+ public int b30770;
+ public int b30771;
+ public int b30772;
+ public int b30773;
+ public int b30774;
+ public int b30775;
+ public int b30776;
+ public int b30777;
+ public int b30778;
+ public int b30779;
+ public int b30780;
+ public int b30781;
+ public int b30782;
+ public int b30783;
+ public int b30784;
+ public int b30785;
+ public int b30786;
+ public int b30787;
+ public int b30788;
+ public int b30789;
+ public int b30790;
+ public int b30791;
+ public int b30792;
+ public int b30793;
+ public int b30794;
+ public int b30795;
+ public int b30796;
+ public int b30797;
+ public int b30798;
+ public int b30799;
+ public int b30800;
+ public int b30801;
+ public int b30802;
+ public int b30803;
+ public int b30804;
+ public int b30805;
+ public int b30806;
+ public int b30807;
+ public int b30808;
+ public int b30809;
+ public int b30810;
+ public int b30811;
+ public int b30812;
+ public int b30813;
+ public int b30814;
+ public int b30815;
+ public int b30816;
+ public int b30817;
+ public int b30818;
+ public int b30819;
+ public int b30820;
+ public int b30821;
+ public int b30822;
+ public int b30823;
+ public int b30824;
+ public int b30825;
+ public int b30826;
+ public int b30827;
+ public int b30828;
+ public int b30829;
+ public int b30830;
+ public int b30831;
+ public int b30832;
+ public int b30833;
+ public int b30834;
+ public int b30835;
+ public int b30836;
+ public int b30837;
+ public int b30838;
+ public int b30839;
+ public int b30840;
+ public int b30841;
+ public int b30842;
+ public int b30843;
+ public int b30844;
+ public int b30845;
+ public int b30846;
+ public int b30847;
+ public int b30848;
+ public int b30849;
+ public int b30850;
+ public int b30851;
+ public int b30852;
+ public int b30853;
+ public int b30854;
+ public int b30855;
+ public int b30856;
+ public int b30857;
+ public int b30858;
+ public int b30859;
+ public int b30860;
+ public int b30861;
+ public int b30862;
+ public int b30863;
+ public int b30864;
+ public int b30865;
+ public int b30866;
+ public int b30867;
+ public int b30868;
+ public int b30869;
+ public int b30870;
+ public int b30871;
+ public int b30872;
+ public int b30873;
+ public int b30874;
+ public int b30875;
+ public int b30876;
+ public int b30877;
+ public int b30878;
+ public int b30879;
+ public int b30880;
+ public int b30881;
+ public int b30882;
+ public int b30883;
+ public int b30884;
+ public int b30885;
+ public int b30886;
+ public int b30887;
+ public int b30888;
+ public int b30889;
+ public int b30890;
+ public int b30891;
+ public int b30892;
+ public int b30893;
+ public int b30894;
+ public int b30895;
+ public int b30896;
+ public int b30897;
+ public int b30898;
+ public int b30899;
+ public int b30900;
+ public int b30901;
+ public int b30902;
+ public int b30903;
+ public int b30904;
+ public int b30905;
+ public int b30906;
+ public int b30907;
+ public int b30908;
+ public int b30909;
+ public int b30910;
+ public int b30911;
+ public int b30912;
+ public int b30913;
+ public int b30914;
+ public int b30915;
+ public int b30916;
+ public int b30917;
+ public int b30918;
+ public int b30919;
+ public int b30920;
+ public int b30921;
+ public int b30922;
+ public int b30923;
+ public int b30924;
+ public int b30925;
+ public int b30926;
+ public int b30927;
+ public int b30928;
+ public int b30929;
+ public int b30930;
+ public int b30931;
+ public int b30932;
+ public int b30933;
+ public int b30934;
+ public int b30935;
+ public int b30936;
+ public int b30937;
+ public int b30938;
+ public int b30939;
+ public int b30940;
+ public int b30941;
+ public int b30942;
+ public int b30943;
+ public int b30944;
+ public int b30945;
+ public int b30946;
+ public int b30947;
+ public int b30948;
+ public int b30949;
+ public int b30950;
+ public int b30951;
+ public int b30952;
+ public int b30953;
+ public int b30954;
+ public int b30955;
+ public int b30956;
+ public int b30957;
+ public int b30958;
+ public int b30959;
+ public int b30960;
+ public int b30961;
+ public int b30962;
+ public int b30963;
+ public int b30964;
+ public int b30965;
+ public int b30966;
+ public int b30967;
+ public int b30968;
+ public int b30969;
+ public int b30970;
+ public int b30971;
+ public int b30972;
+ public int b30973;
+ public int b30974;
+ public int b30975;
+ public int b30976;
+ public int b30977;
+ public int b30978;
+ public int b30979;
+ public int b30980;
+ public int b30981;
+ public int b30982;
+ public int b30983;
+ public int b30984;
+ public int b30985;
+ public int b30986;
+ public int b30987;
+ public int b30988;
+ public int b30989;
+ public int b30990;
+ public int b30991;
+ public int b30992;
+ public int b30993;
+ public int b30994;
+ public int b30995;
+ public int b30996;
+ public int b30997;
+ public int b30998;
+ public int b30999;
+ public int b31000;
+ public int b31001;
+ public int b31002;
+ public int b31003;
+ public int b31004;
+ public int b31005;
+ public int b31006;
+ public int b31007;
+ public int b31008;
+ public int b31009;
+ public int b31010;
+ public int b31011;
+ public int b31012;
+ public int b31013;
+ public int b31014;
+ public int b31015;
+ public int b31016;
+ public int b31017;
+ public int b31018;
+ public int b31019;
+ public int b31020;
+ public int b31021;
+ public int b31022;
+ public int b31023;
+ public int b31024;
+ public int b31025;
+ public int b31026;
+ public int b31027;
+ public int b31028;
+ public int b31029;
+ public int b31030;
+ public int b31031;
+ public int b31032;
+ public int b31033;
+ public int b31034;
+ public int b31035;
+ public int b31036;
+ public int b31037;
+ public int b31038;
+ public int b31039;
+ public int b31040;
+ public int b31041;
+ public int b31042;
+ public int b31043;
+ public int b31044;
+ public int b31045;
+ public int b31046;
+ public int b31047;
+ public int b31048;
+ public int b31049;
+ public int b31050;
+ public int b31051;
+ public int b31052;
+ public int b31053;
+ public int b31054;
+ public int b31055;
+ public int b31056;
+ public int b31057;
+ public int b31058;
+ public int b31059;
+ public int b31060;
+ public int b31061;
+ public int b31062;
+ public int b31063;
+ public int b31064;
+ public int b31065;
+ public int b31066;
+ public int b31067;
+ public int b31068;
+ public int b31069;
+ public int b31070;
+ public int b31071;
+ public int b31072;
+ public int b31073;
+ public int b31074;
+ public int b31075;
+ public int b31076;
+ public int b31077;
+ public int b31078;
+ public int b31079;
+ public int b31080;
+ public int b31081;
+ public int b31082;
+ public int b31083;
+ public int b31084;
+ public int b31085;
+ public int b31086;
+ public int b31087;
+ public int b31088;
+ public int b31089;
+ public int b31090;
+ public int b31091;
+ public int b31092;
+ public int b31093;
+ public int b31094;
+ public int b31095;
+ public int b31096;
+ public int b31097;
+ public int b31098;
+ public int b31099;
+ public int b31100;
+ public int b31101;
+ public int b31102;
+ public int b31103;
+ public int b31104;
+ public int b31105;
+ public int b31106;
+ public int b31107;
+ public int b31108;
+ public int b31109;
+ public int b31110;
+ public int b31111;
+ public int b31112;
+ public int b31113;
+ public int b31114;
+ public int b31115;
+ public int b31116;
+ public int b31117;
+ public int b31118;
+ public int b31119;
+ public int b31120;
+ public int b31121;
+ public int b31122;
+ public int b31123;
+ public int b31124;
+ public int b31125;
+ public int b31126;
+ public int b31127;
+ public int b31128;
+ public int b31129;
+ public int b31130;
+ public int b31131;
+ public int b31132;
+ public int b31133;
+ public int b31134;
+ public int b31135;
+ public int b31136;
+ public int b31137;
+ public int b31138;
+ public int b31139;
+ public int b31140;
+ public int b31141;
+ public int b31142;
+ public int b31143;
+ public int b31144;
+ public int b31145;
+ public int b31146;
+ public int b31147;
+ public int b31148;
+ public int b31149;
+ public int b31150;
+ public int b31151;
+ public int b31152;
+ public int b31153;
+ public int b31154;
+ public int b31155;
+ public int b31156;
+ public int b31157;
+ public int b31158;
+ public int b31159;
+ public int b31160;
+ public int b31161;
+ public int b31162;
+ public int b31163;
+ public int b31164;
+ public int b31165;
+ public int b31166;
+ public int b31167;
+ public int b31168;
+ public int b31169;
+ public int b31170;
+ public int b31171;
+ public int b31172;
+ public int b31173;
+ public int b31174;
+ public int b31175;
+ public int b31176;
+ public int b31177;
+ public int b31178;
+ public int b31179;
+ public int b31180;
+ public int b31181;
+ public int b31182;
+ public int b31183;
+ public int b31184;
+ public int b31185;
+ public int b31186;
+ public int b31187;
+ public int b31188;
+ public int b31189;
+ public int b31190;
+ public int b31191;
+ public int b31192;
+ public int b31193;
+ public int b31194;
+ public int b31195;
+ public int b31196;
+ public int b31197;
+ public int b31198;
+ public int b31199;
+ public int b31200;
+ public int b31201;
+ public int b31202;
+ public int b31203;
+ public int b31204;
+ public int b31205;
+ public int b31206;
+ public int b31207;
+ public int b31208;
+ public int b31209;
+ public int b31210;
+ public int b31211;
+ public int b31212;
+ public int b31213;
+ public int b31214;
+ public int b31215;
+ public int b31216;
+ public int b31217;
+ public int b31218;
+ public int b31219;
+ public int b31220;
+ public int b31221;
+ public int b31222;
+ public int b31223;
+ public int b31224;
+ public int b31225;
+ public int b31226;
+ public int b31227;
+ public int b31228;
+ public int b31229;
+ public int b31230;
+ public int b31231;
+ public int b31232;
+ public int b31233;
+ public int b31234;
+ public int b31235;
+ public int b31236;
+ public int b31237;
+ public int b31238;
+ public int b31239;
+ public int b31240;
+ public int b31241;
+ public int b31242;
+ public int b31243;
+ public int b31244;
+ public int b31245;
+ public int b31246;
+ public int b31247;
+ public int b31248;
+ public int b31249;
+ public int b31250;
+ public int b31251;
+ public int b31252;
+ public int b31253;
+ public int b31254;
+ public int b31255;
+ public int b31256;
+ public int b31257;
+ public int b31258;
+ public int b31259;
+ public int b31260;
+ public int b31261;
+ public int b31262;
+ public int b31263;
+ public int b31264;
+ public int b31265;
+ public int b31266;
+ public int b31267;
+ public int b31268;
+ public int b31269;
+ public int b31270;
+ public int b31271;
+ public int b31272;
+ public int b31273;
+ public int b31274;
+ public int b31275;
+ public int b31276;
+ public int b31277;
+ public int b31278;
+ public int b31279;
+ public int b31280;
+ public int b31281;
+ public int b31282;
+ public int b31283;
+ public int b31284;
+ public int b31285;
+ public int b31286;
+ public int b31287;
+ public int b31288;
+ public int b31289;
+ public int b31290;
+ public int b31291;
+ public int b31292;
+ public int b31293;
+ public int b31294;
+ public int b31295;
+ public int b31296;
+ public int b31297;
+ public int b31298;
+ public int b31299;
+ public int b31300;
+ public int b31301;
+ public int b31302;
+ public int b31303;
+ public int b31304;
+ public int b31305;
+ public int b31306;
+ public int b31307;
+ public int b31308;
+ public int b31309;
+ public int b31310;
+ public int b31311;
+ public int b31312;
+ public int b31313;
+ public int b31314;
+ public int b31315;
+ public int b31316;
+ public int b31317;
+ public int b31318;
+ public int b31319;
+ public int b31320;
+ public int b31321;
+ public int b31322;
+ public int b31323;
+ public int b31324;
+ public int b31325;
+ public int b31326;
+ public int b31327;
+ public int b31328;
+ public int b31329;
+ public int b31330;
+ public int b31331;
+ public int b31332;
+ public int b31333;
+ public int b31334;
+ public int b31335;
+ public int b31336;
+ public int b31337;
+ public int b31338;
+ public int b31339;
+ public int b31340;
+ public int b31341;
+ public int b31342;
+ public int b31343;
+ public int b31344;
+ public int b31345;
+ public int b31346;
+ public int b31347;
+ public int b31348;
+ public int b31349;
+ public int b31350;
+ public int b31351;
+ public int b31352;
+ public int b31353;
+ public int b31354;
+ public int b31355;
+ public int b31356;
+ public int b31357;
+ public int b31358;
+ public int b31359;
+ public int b31360;
+ public int b31361;
+ public int b31362;
+ public int b31363;
+ public int b31364;
+ public int b31365;
+ public int b31366;
+ public int b31367;
+ public int b31368;
+ public int b31369;
+ public int b31370;
+ public int b31371;
+ public int b31372;
+ public int b31373;
+ public int b31374;
+ public int b31375;
+ public int b31376;
+ public int b31377;
+ public int b31378;
+ public int b31379;
+ public int b31380;
+ public int b31381;
+ public int b31382;
+ public int b31383;
+ public int b31384;
+ public int b31385;
+ public int b31386;
+ public int b31387;
+ public int b31388;
+ public int b31389;
+ public int b31390;
+ public int b31391;
+ public int b31392;
+ public int b31393;
+ public int b31394;
+ public int b31395;
+ public int b31396;
+ public int b31397;
+ public int b31398;
+ public int b31399;
+ public int b31400;
+ public int b31401;
+ public int b31402;
+ public int b31403;
+ public int b31404;
+ public int b31405;
+ public int b31406;
+ public int b31407;
+ public int b31408;
+ public int b31409;
+ public int b31410;
+ public int b31411;
+ public int b31412;
+ public int b31413;
+ public int b31414;
+ public int b31415;
+ public int b31416;
+ public int b31417;
+ public int b31418;
+ public int b31419;
+ public int b31420;
+ public int b31421;
+ public int b31422;
+ public int b31423;
+ public int b31424;
+ public int b31425;
+ public int b31426;
+ public int b31427;
+ public int b31428;
+ public int b31429;
+ public int b31430;
+ public int b31431;
+ public int b31432;
+ public int b31433;
+ public int b31434;
+ public int b31435;
+ public int b31436;
+ public int b31437;
+ public int b31438;
+ public int b31439;
+ public int b31440;
+ public int b31441;
+ public int b31442;
+ public int b31443;
+ public int b31444;
+ public int b31445;
+ public int b31446;
+ public int b31447;
+ public int b31448;
+ public int b31449;
+ public int b31450;
+ public int b31451;
+ public int b31452;
+ public int b31453;
+ public int b31454;
+ public int b31455;
+ public int b31456;
+ public int b31457;
+ public int b31458;
+ public int b31459;
+ public int b31460;
+ public int b31461;
+ public int b31462;
+ public int b31463;
+ public int b31464;
+ public int b31465;
+ public int b31466;
+ public int b31467;
+ public int b31468;
+ public int b31469;
+ public int b31470;
+ public int b31471;
+ public int b31472;
+ public int b31473;
+ public int b31474;
+ public int b31475;
+ public int b31476;
+ public int b31477;
+ public int b31478;
+ public int b31479;
+ public int b31480;
+ public int b31481;
+ public int b31482;
+ public int b31483;
+ public int b31484;
+ public int b31485;
+ public int b31486;
+ public int b31487;
+ public int b31488;
+ public int b31489;
+ public int b31490;
+ public int b31491;
+ public int b31492;
+ public int b31493;
+ public int b31494;
+ public int b31495;
+ public int b31496;
+ public int b31497;
+ public int b31498;
+ public int b31499;
+ public int b31500;
+ public int b31501;
+ public int b31502;
+ public int b31503;
+ public int b31504;
+ public int b31505;
+ public int b31506;
+ public int b31507;
+ public int b31508;
+ public int b31509;
+ public int b31510;
+ public int b31511;
+ public int b31512;
+ public int b31513;
+ public int b31514;
+ public int b31515;
+ public int b31516;
+ public int b31517;
+ public int b31518;
+ public int b31519;
+ public int b31520;
+ public int b31521;
+ public int b31522;
+ public int b31523;
+ public int b31524;
+ public int b31525;
+ public int b31526;
+ public int b31527;
+ public int b31528;
+ public int b31529;
+ public int b31530;
+ public int b31531;
+ public int b31532;
+ public int b31533;
+ public int b31534;
+ public int b31535;
+ public int b31536;
+ public int b31537;
+ public int b31538;
+ public int b31539;
+ public int b31540;
+ public int b31541;
+ public int b31542;
+ public int b31543;
+ public int b31544;
+ public int b31545;
+ public int b31546;
+ public int b31547;
+ public int b31548;
+ public int b31549;
+ public int b31550;
+ public int b31551;
+ public int b31552;
+ public int b31553;
+ public int b31554;
+ public int b31555;
+ public int b31556;
+ public int b31557;
+ public int b31558;
+ public int b31559;
+ public int b31560;
+ public int b31561;
+ public int b31562;
+ public int b31563;
+ public int b31564;
+ public int b31565;
+ public int b31566;
+ public int b31567;
+ public int b31568;
+ public int b31569;
+ public int b31570;
+ public int b31571;
+ public int b31572;
+ public int b31573;
+ public int b31574;
+ public int b31575;
+ public int b31576;
+ public int b31577;
+ public int b31578;
+ public int b31579;
+ public int b31580;
+ public int b31581;
+ public int b31582;
+ public int b31583;
+ public int b31584;
+ public int b31585;
+ public int b31586;
+ public int b31587;
+ public int b31588;
+ public int b31589;
+ public int b31590;
+ public int b31591;
+ public int b31592;
+ public int b31593;
+ public int b31594;
+ public int b31595;
+ public int b31596;
+ public int b31597;
+ public int b31598;
+ public int b31599;
+ public int b31600;
+ public int b31601;
+ public int b31602;
+ public int b31603;
+ public int b31604;
+ public int b31605;
+ public int b31606;
+ public int b31607;
+ public int b31608;
+ public int b31609;
+ public int b31610;
+ public int b31611;
+ public int b31612;
+ public int b31613;
+ public int b31614;
+ public int b31615;
+ public int b31616;
+ public int b31617;
+ public int b31618;
+ public int b31619;
+ public int b31620;
+ public int b31621;
+ public int b31622;
+ public int b31623;
+ public int b31624;
+ public int b31625;
+ public int b31626;
+ public int b31627;
+ public int b31628;
+ public int b31629;
+ public int b31630;
+ public int b31631;
+ public int b31632;
+ public int b31633;
+ public int b31634;
+ public int b31635;
+ public int b31636;
+ public int b31637;
+ public int b31638;
+ public int b31639;
+ public int b31640;
+ public int b31641;
+ public int b31642;
+ public int b31643;
+ public int b31644;
+ public int b31645;
+ public int b31646;
+ public int b31647;
+ public int b31648;
+ public int b31649;
+ public int b31650;
+ public int b31651;
+ public int b31652;
+ public int b31653;
+ public int b31654;
+ public int b31655;
+ public int b31656;
+ public int b31657;
+ public int b31658;
+ public int b31659;
+ public int b31660;
+ public int b31661;
+ public int b31662;
+ public int b31663;
+ public int b31664;
+ public int b31665;
+ public int b31666;
+ public int b31667;
+ public int b31668;
+ public int b31669;
+ public int b31670;
+ public int b31671;
+ public int b31672;
+ public int b31673;
+ public int b31674;
+ public int b31675;
+ public int b31676;
+ public int b31677;
+ public int b31678;
+ public int b31679;
+ public int b31680;
+ public int b31681;
+ public int b31682;
+ public int b31683;
+ public int b31684;
+ public int b31685;
+ public int b31686;
+ public int b31687;
+ public int b31688;
+ public int b31689;
+ public int b31690;
+ public int b31691;
+ public int b31692;
+ public int b31693;
+ public int b31694;
+ public int b31695;
+ public int b31696;
+ public int b31697;
+ public int b31698;
+ public int b31699;
+ public int b31700;
+ public int b31701;
+ public int b31702;
+ public int b31703;
+ public int b31704;
+ public int b31705;
+ public int b31706;
+ public int b31707;
+ public int b31708;
+ public int b31709;
+ public int b31710;
+ public int b31711;
+ public int b31712;
+ public int b31713;
+ public int b31714;
+ public int b31715;
+ public int b31716;
+ public int b31717;
+ public int b31718;
+ public int b31719;
+ public int b31720;
+ public int b31721;
+ public int b31722;
+ public int b31723;
+ public int b31724;
+ public int b31725;
+ public int b31726;
+ public int b31727;
+ public int b31728;
+ public int b31729;
+ public int b31730;
+ public int b31731;
+ public int b31732;
+ public int b31733;
+ public int b31734;
+ public int b31735;
+ public int b31736;
+ public int b31737;
+ public int b31738;
+ public int b31739;
+ public int b31740;
+ public int b31741;
+ public int b31742;
+ public int b31743;
+ public int b31744;
+ public int b31745;
+ public int b31746;
+ public int b31747;
+ public int b31748;
+ public int b31749;
+ public int b31750;
+ public int b31751;
+ public int b31752;
+ public int b31753;
+ public int b31754;
+ public int b31755;
+ public int b31756;
+ public int b31757;
+ public int b31758;
+ public int b31759;
+ public int b31760;
+ public int b31761;
+ public int b31762;
+ public int b31763;
+ public int b31764;
+ public int b31765;
+ public int b31766;
+ public int b31767;
+ public int b31768;
+ public int b31769;
+ public int b31770;
+ public int b31771;
+ public int b31772;
+ public int b31773;
+ public int b31774;
+ public int b31775;
+ public int b31776;
+ public int b31777;
+ public int b31778;
+ public int b31779;
+ public int b31780;
+ public int b31781;
+ public int b31782;
+ public int b31783;
+ public int b31784;
+ public int b31785;
+ public int b31786;
+ public int b31787;
+ public int b31788;
+ public int b31789;
+ public int b31790;
+ public int b31791;
+ public int b31792;
+ public int b31793;
+ public int b31794;
+ public int b31795;
+ public int b31796;
+ public int b31797;
+ public int b31798;
+ public int b31799;
+ public int b31800;
+ public int b31801;
+ public int b31802;
+ public int b31803;
+ public int b31804;
+ public int b31805;
+ public int b31806;
+ public int b31807;
+ public int b31808;
+ public int b31809;
+ public int b31810;
+ public int b31811;
+ public int b31812;
+ public int b31813;
+ public int b31814;
+ public int b31815;
+ public int b31816;
+ public int b31817;
+ public int b31818;
+ public int b31819;
+ public int b31820;
+ public int b31821;
+ public int b31822;
+ public int b31823;
+ public int b31824;
+ public int b31825;
+ public int b31826;
+ public int b31827;
+ public int b31828;
+ public int b31829;
+ public int b31830;
+ public int b31831;
+ public int b31832;
+ public int b31833;
+ public int b31834;
+ public int b31835;
+ public int b31836;
+ public int b31837;
+ public int b31838;
+ public int b31839;
+ public int b31840;
+ public int b31841;
+ public int b31842;
+ public int b31843;
+ public int b31844;
+ public int b31845;
+ public int b31846;
+ public int b31847;
+ public int b31848;
+ public int b31849;
+ public int b31850;
+ public int b31851;
+ public int b31852;
+ public int b31853;
+ public int b31854;
+ public int b31855;
+ public int b31856;
+ public int b31857;
+ public int b31858;
+ public int b31859;
+ public int b31860;
+ public int b31861;
+ public int b31862;
+ public int b31863;
+ public int b31864;
+ public int b31865;
+ public int b31866;
+ public int b31867;
+ public int b31868;
+ public int b31869;
+ public int b31870;
+ public int b31871;
+ public int b31872;
+ public int b31873;
+ public int b31874;
+ public int b31875;
+ public int b31876;
+ public int b31877;
+ public int b31878;
+ public int b31879;
+ public int b31880;
+ public int b31881;
+ public int b31882;
+ public int b31883;
+ public int b31884;
+ public int b31885;
+ public int b31886;
+ public int b31887;
+ public int b31888;
+ public int b31889;
+ public int b31890;
+ public int b31891;
+ public int b31892;
+ public int b31893;
+ public int b31894;
+ public int b31895;
+ public int b31896;
+ public int b31897;
+ public int b31898;
+ public int b31899;
+ public int b31900;
+ public int b31901;
+ public int b31902;
+ public int b31903;
+ public int b31904;
+ public int b31905;
+ public int b31906;
+ public int b31907;
+ public int b31908;
+ public int b31909;
+ public int b31910;
+ public int b31911;
+ public int b31912;
+ public int b31913;
+ public int b31914;
+ public int b31915;
+ public int b31916;
+ public int b31917;
+ public int b31918;
+ public int b31919;
+ public int b31920;
+ public int b31921;
+ public int b31922;
+ public int b31923;
+ public int b31924;
+ public int b31925;
+ public int b31926;
+ public int b31927;
+ public int b31928;
+ public int b31929;
+ public int b31930;
+ public int b31931;
+ public int b31932;
+ public int b31933;
+ public int b31934;
+ public int b31935;
+ public int b31936;
+ public int b31937;
+ public int b31938;
+ public int b31939;
+ public int b31940;
+ public int b31941;
+ public int b31942;
+ public int b31943;
+ public int b31944;
+ public int b31945;
+ public int b31946;
+ public int b31947;
+ public int b31948;
+ public int b31949;
+ public int b31950;
+ public int b31951;
+ public int b31952;
+ public int b31953;
+ public int b31954;
+ public int b31955;
+ public int b31956;
+ public int b31957;
+ public int b31958;
+ public int b31959;
+ public int b31960;
+ public int b31961;
+ public int b31962;
+ public int b31963;
+ public int b31964;
+ public int b31965;
+ public int b31966;
+ public int b31967;
+ public int b31968;
+ public int b31969;
+ public int b31970;
+ public int b31971;
+ public int b31972;
+ public int b31973;
+ public int b31974;
+ public int b31975;
+ public int b31976;
+ public int b31977;
+ public int b31978;
+ public int b31979;
+ public int b31980;
+ public int b31981;
+ public int b31982;
+ public int b31983;
+ public int b31984;
+ public int b31985;
+ public int b31986;
+ public int b31987;
+ public int b31988;
+ public int b31989;
+ public int b31990;
+ public int b31991;
+ public int b31992;
+ public int b31993;
+ public int b31994;
+ public int b31995;
+ public int b31996;
+ public int b31997;
+ public int b31998;
+ public int b31999;
+ public int b32000;
+ public int b32001;
+ public int b32002;
+ public int b32003;
+ public int b32004;
+ public int b32005;
+ public int b32006;
+ public int b32007;
+ public int b32008;
+ public int b32009;
+ public int b32010;
+ public int b32011;
+ public int b32012;
+ public int b32013;
+ public int b32014;
+ public int b32015;
+ public int b32016;
+ public int b32017;
+ public int b32018;
+ public int b32019;
+ public int b32020;
+ public int b32021;
+ public int b32022;
+ public int b32023;
+ public int b32024;
+ public int b32025;
+ public int b32026;
+ public int b32027;
+ public int b32028;
+ public int b32029;
+ public int b32030;
+ public int b32031;
+ public int b32032;
+ public int b32033;
+ public int b32034;
+ public int b32035;
+ public int b32036;
+ public int b32037;
+ public int b32038;
+ public int b32039;
+ public int b32040;
+ public int b32041;
+ public int b32042;
+ public int b32043;
+ public int b32044;
+ public int b32045;
+ public int b32046;
+ public int b32047;
+ public int b32048;
+ public int b32049;
+ public int b32050;
+ public int b32051;
+ public int b32052;
+ public int b32053;
+ public int b32054;
+ public int b32055;
+ public int b32056;
+ public int b32057;
+ public int b32058;
+ public int b32059;
+ public int b32060;
+ public int b32061;
+ public int b32062;
+ public int b32063;
+ public int b32064;
+ public int b32065;
+ public int b32066;
+ public int b32067;
+ public int b32068;
+ public int b32069;
+ public int b32070;
+ public int b32071;
+ public int b32072;
+ public int b32073;
+ public int b32074;
+ public int b32075;
+ public int b32076;
+ public int b32077;
+ public int b32078;
+ public int b32079;
+ public int b32080;
+ public int b32081;
+ public int b32082;
+ public int b32083;
+ public int b32084;
+ public int b32085;
+ public int b32086;
+ public int b32087;
+ public int b32088;
+ public int b32089;
+ public int b32090;
+ public int b32091;
+ public int b32092;
+ public int b32093;
+ public int b32094;
+ public int b32095;
+ public int b32096;
+ public int b32097;
+ public int b32098;
+ public int b32099;
+ public int b32100;
+ public int b32101;
+ public int b32102;
+ public int b32103;
+ public int b32104;
+ public int b32105;
+ public int b32106;
+ public int b32107;
+ public int b32108;
+ public int b32109;
+ public int b32110;
+ public int b32111;
+ public int b32112;
+ public int b32113;
+ public int b32114;
+ public int b32115;
+ public int b32116;
+ public int b32117;
+ public int b32118;
+ public int b32119;
+ public int b32120;
+ public int b32121;
+ public int b32122;
+ public int b32123;
+ public int b32124;
+ public int b32125;
+ public int b32126;
+ public int b32127;
+ public int b32128;
+ public int b32129;
+ public int b32130;
+ public int b32131;
+ public int b32132;
+ public int b32133;
+ public int b32134;
+ public int b32135;
+ public int b32136;
+ public int b32137;
+ public int b32138;
+ public int b32139;
+ public int b32140;
+ public int b32141;
+ public int b32142;
+ public int b32143;
+ public int b32144;
+ public int b32145;
+ public int b32146;
+ public int b32147;
+ public int b32148;
+ public int b32149;
+ public int b32150;
+ public int b32151;
+ public int b32152;
+ public int b32153;
+ public int b32154;
+ public int b32155;
+ public int b32156;
+ public int b32157;
+ public int b32158;
+ public int b32159;
+ public int b32160;
+ public int b32161;
+ public int b32162;
+ public int b32163;
+ public int b32164;
+ public int b32165;
+ public int b32166;
+ public int b32167;
+ public int b32168;
+ public int b32169;
+ public int b32170;
+ public int b32171;
+ public int b32172;
+ public int b32173;
+ public int b32174;
+ public int b32175;
+ public int b32176;
+ public int b32177;
+ public int b32178;
+ public int b32179;
+ public int b32180;
+ public int b32181;
+ public int b32182;
+ public int b32183;
+ public int b32184;
+ public int b32185;
+ public int b32186;
+ public int b32187;
+ public int b32188;
+ public int b32189;
+ public int b32190;
+ public int b32191;
+ public int b32192;
+ public int b32193;
+ public int b32194;
+ public int b32195;
+ public int b32196;
+ public int b32197;
+ public int b32198;
+ public int b32199;
+ public int b32200;
+ public int b32201;
+ public int b32202;
+ public int b32203;
+ public int b32204;
+ public int b32205;
+ public int b32206;
+ public int b32207;
+ public int b32208;
+ public int b32209;
+ public int b32210;
+ public int b32211;
+ public int b32212;
+ public int b32213;
+ public int b32214;
+ public int b32215;
+ public int b32216;
+ public int b32217;
+ public int b32218;
+ public int b32219;
+ public int b32220;
+ public int b32221;
+ public int b32222;
+ public int b32223;
+ public int b32224;
+ public int b32225;
+ public int b32226;
+ public int b32227;
+ public int b32228;
+ public int b32229;
+ public int b32230;
+ public int b32231;
+ public int b32232;
+ public int b32233;
+ public int b32234;
+ public int b32235;
+ public int b32236;
+ public int b32237;
+ public int b32238;
+ public int b32239;
+ public int b32240;
+ public int b32241;
+ public int b32242;
+ public int b32243;
+ public int b32244;
+ public int b32245;
+ public int b32246;
+ public int b32247;
+ public int b32248;
+ public int b32249;
+ public int b32250;
+ public int b32251;
+ public int b32252;
+ public int b32253;
+ public int b32254;
+ public int b32255;
+ public int b32256;
+ public int b32257;
+ public int b32258;
+ public int b32259;
+ public int b32260;
+ public int b32261;
+ public int b32262;
+ public int b32263;
+ public int b32264;
+ public int b32265;
+ public int b32266;
+ public int b32267;
+ public int b32268;
+ public int b32269;
+ public int b32270;
+ public int b32271;
+ public int b32272;
+ public int b32273;
+ public int b32274;
+ public int b32275;
+ public int b32276;
+ public int b32277;
+ public int b32278;
+ public int b32279;
+ public int b32280;
+ public int b32281;
+ public int b32282;
+ public int b32283;
+ public int b32284;
+ public int b32285;
+ public int b32286;
+ public int b32287;
+ public int b32288;
+ public int b32289;
+ public int b32290;
+ public int b32291;
+ public int b32292;
+ public int b32293;
+ public int b32294;
+ public int b32295;
+ public int b32296;
+ public int b32297;
+ public int b32298;
+ public int b32299;
+ public int b32300;
+ public int b32301;
+ public int b32302;
+ public int b32303;
+ public int b32304;
+ public int b32305;
+ public int b32306;
+ public int b32307;
+ public int b32308;
+ public int b32309;
+ public int b32310;
+ public int b32311;
+ public int b32312;
+ public int b32313;
+ public int b32314;
+ public int b32315;
+ public int b32316;
+ public int b32317;
+ public int b32318;
+ public int b32319;
+ public int b32320;
+ public int b32321;
+ public int b32322;
+ public int b32323;
+ public int b32324;
+ public int b32325;
+ public int b32326;
+ public int b32327;
+ public int b32328;
+ public int b32329;
+ public int b32330;
+ public int b32331;
+ public int b32332;
+ public int b32333;
+ public int b32334;
+ public int b32335;
+ public int b32336;
+ public int b32337;
+ public int b32338;
+ public int b32339;
+ public int b32340;
+ public int b32341;
+ public int b32342;
+ public int b32343;
+ public int b32344;
+ public int b32345;
+ public int b32346;
+ public int b32347;
+ public int b32348;
+ public int b32349;
+ public int b32350;
+ public int b32351;
+ public int b32352;
+ public int b32353;
+ public int b32354;
+ public int b32355;
+ public int b32356;
+ public int b32357;
+ public int b32358;
+ public int b32359;
+ public int b32360;
+ public int b32361;
+ public int b32362;
+ public int b32363;
+ public int b32364;
+ public int b32365;
+ public int b32366;
+ public int b32367;
+ public int b32368;
+ public int b32369;
+ public int b32370;
+ public int b32371;
+ public int b32372;
+ public int b32373;
+ public int b32374;
+ public int b32375;
+ public int b32376;
+ public int b32377;
+ public int b32378;
+ public int b32379;
+ public int b32380;
+ public int b32381;
+ public int b32382;
+ public int b32383;
+ public int b32384;
+ public int b32385;
+ public int b32386;
+ public int b32387;
+ public int b32388;
+ public int b32389;
+ public int b32390;
+ public int b32391;
+ public int b32392;
+ public int b32393;
+ public int b32394;
+ public int b32395;
+ public int b32396;
+ public int b32397;
+ public int b32398;
+ public int b32399;
+ public int b32400;
+ public int b32401;
+ public int b32402;
+ public int b32403;
+ public int b32404;
+ public int b32405;
+ public int b32406;
+ public int b32407;
+ public int b32408;
+ public int b32409;
+ public int b32410;
+ public int b32411;
+ public int b32412;
+ public int b32413;
+ public int b32414;
+ public int b32415;
+ public int b32416;
+ public int b32417;
+ public int b32418;
+ public int b32419;
+ public int b32420;
+ public int b32421;
+ public int b32422;
+ public int b32423;
+ public int b32424;
+ public int b32425;
+ public int b32426;
+ public int b32427;
+ public int b32428;
+ public int b32429;
+ public int b32430;
+ public int b32431;
+ public int b32432;
+ public int b32433;
+ public int b32434;
+ public int b32435;
+ public int b32436;
+ public int b32437;
+ public int b32438;
+ public int b32439;
+ public int b32440;
+ public int b32441;
+ public int b32442;
+ public int b32443;
+ public int b32444;
+ public int b32445;
+ public int b32446;
+ public int b32447;
+ public int b32448;
+ public int b32449;
+ public int b32450;
+ public int b32451;
+ public int b32452;
+ public int b32453;
+ public int b32454;
+ public int b32455;
+ public int b32456;
+ public int b32457;
+ public int b32458;
+ public int b32459;
+ public int b32460;
+ public int b32461;
+ public int b32462;
+ public int b32463;
+ public int b32464;
+ public int b32465;
+ public int b32466;
+ public int b32467;
+ public int b32468;
+ public int b32469;
+ public int b32470;
+ public int b32471;
+ public int b32472;
+ public int b32473;
+ public int b32474;
+ public int b32475;
+ public int b32476;
+ public int b32477;
+ public int b32478;
+ public int b32479;
+ public int b32480;
+ public int b32481;
+ public int b32482;
+ public int b32483;
+ public int b32484;
+ public int b32485;
+ public int b32486;
+ public int b32487;
+ public int b32488;
+ public int b32489;
+ public int b32490;
+ public int b32491;
+ public int b32492;
+ public int b32493;
+ public int b32494;
+ public int b32495;
+ public int b32496;
+ public int b32497;
+ public int b32498;
+ public int b32499;
+ public int b32500;
+ public int b32501;
+ public int b32502;
+ public int b32503;
+ public int b32504;
+ public int b32505;
+ public int b32506;
+ public int b32507;
+ public int b32508;
+ public int b32509;
+ public int b32510;
+ public int b32511;
+ public int b32512;
+ public int b32513;
+ public int b32514;
+ public int b32515;
+ public int b32516;
+ public int b32517;
+ public int b32518;
+ public int b32519;
+ public int b32520;
+ public int b32521;
+ public int b32522;
+ public int b32523;
+ public int b32524;
+ public int b32525;
+ public int b32526;
+ public int b32527;
+ public int b32528;
+ public int b32529;
+ public int b32530;
+ public int b32531;
+ public int b32532;
+ public int b32533;
+ public int b32534;
+ public int b32535;
+ public int b32536;
+ public int b32537;
+ public int b32538;
+ public int b32539;
+ public int b32540;
+ public int b32541;
+ public int b32542;
+ public int b32543;
+ public int b32544;
+ public int b32545;
+ public int b32546;
+ public int b32547;
+ public int b32548;
+ public int b32549;
+ public int b32550;
+ public int b32551;
+ public int b32552;
+ public int b32553;
+ public int b32554;
+ public int b32555;
+ public int b32556;
+ public int b32557;
+ public int b32558;
+ public int b32559;
+ public int b32560;
+ public int b32561;
+ public int b32562;
+ public int b32563;
+ public int b32564;
+ public int b32565;
+ public int b32566;
+ public int b32567;
+ public int b32568;
+ public int b32569;
+ public int b32570;
+ public int b32571;
+ public int b32572;
+ public int b32573;
+ public int b32574;
+ public int b32575;
+ public int b32576;
+ public int b32577;
+ public int b32578;
+ public int b32579;
+ public int b32580;
+ public int b32581;
+ public int b32582;
+ public int b32583;
+ public int b32584;
+ public int b32585;
+ public int b32586;
+ public int b32587;
+ public int b32588;
+ public int b32589;
+ public int b32590;
+ public int b32591;
+ public int b32592;
+ public int b32593;
+ public int b32594;
+ public int b32595;
+ public int b32596;
+ public int b32597;
+ public int b32598;
+ public int b32599;
+ public int b32600;
+ public int b32601;
+ public int b32602;
+ public int b32603;
+ public int b32604;
+ public int b32605;
+ public int b32606;
+ public int b32607;
+ public int b32608;
+ public int b32609;
+ public int b32610;
+ public int b32611;
+ public int b32612;
+ public int b32613;
+ public int b32614;
+ public int b32615;
+ public int b32616;
+ public int b32617;
+ public int b32618;
+ public int b32619;
+ public int b32620;
+ public int b32621;
+ public int b32622;
+ public int b32623;
+ public int b32624;
+ public int b32625;
+ public int b32626;
+ public int b32627;
+ public int b32628;
+ public int b32629;
+ public int b32630;
+ public int b32631;
+ public int b32632;
+ public int b32633;
+ public int b32634;
+ public int b32635;
+ public int b32636;
+ public int b32637;
+ public int b32638;
+ public int b32639;
+ public int b32640;
+ public int b32641;
+ public int b32642;
+ public int b32643;
+ public int b32644;
+ public int b32645;
+ public int b32646;
+ public int b32647;
+ public int b32648;
+ public int b32649;
+ public int b32650;
+ public int b32651;
+ public int b32652;
+ public int b32653;
+ public int b32654;
+ public int b32655;
+ public int b32656;
+ public int b32657;
+ public int b32658;
+ public int b32659;
+ public int b32660;
+ public int b32661;
+ public int b32662;
+ public int b32663;
+ public int b32664;
+ public int b32665;
+ public int b32666;
+ public int b32667;
+ public int b32668;
+ public int b32669;
+ public int b32670;
+ public int b32671;
+ public int b32672;
+ public int b32673;
+ public int b32674;
+ public int b32675;
+ public int b32676;
+ public int b32677;
+ public int b32678;
+ public int b32679;
+ public int b32680;
+ public int b32681;
+ public int b32682;
+ public int b32683;
+ public int b32684;
+ public int b32685;
+ public int b32686;
+ public int b32687;
+ public int b32688;
+ public int b32689;
+ public int b32690;
+ public int b32691;
+ public int b32692;
+ public int b32693;
+ public int b32694;
+ public int b32695;
+ public int b32696;
+ public int b32697;
+ public int b32698;
+ public int b32699;
+ public int b32700;
+ public int b32701;
+ public int b32702;
+ public int b32703;
+ public int b32704;
+ public int b32705;
+ public int b32706;
+ public int b32707;
+ public int b32708;
+ public int b32709;
+ public int b32710;
+ public int b32711;
+ public int b32712;
+ public int b32713;
+ public int b32714;
+ public int b32715;
+ public int b32716;
+ public int b32717;
+ public int b32718;
+ public int b32719;
+ public int b32720;
+ public int b32721;
+ public int b32722;
+ public int b32723;
+ public int b32724;
+ public int b32725;
+ public int b32726;
+ public int b32727;
+ public int b32728;
+ public int b32729;
+ public int b32730;
+ public int b32731;
+ public int b32732;
+ public int b32733;
+ public int b32734;
+ public int b32735;
+ public int b32736;
+ public int b32737;
+ public int b32738;
+ public int b32739;
+ public int b32740;
+ public int b32741;
+ public int b32742;
+ public int b32743;
+ public int b32744;
+ public int b32745;
+ public int b32746;
+ public int b32747;
+ public int b32748;
+ public int b32749;
+ public int b32750;
+ public int b32751;
+ public int b32752;
+ public int b32753;
+ public int b32754;
+ public int b32755;
+ public int b32756;
+ public int b32757;
+ public int b32758;
+ public int b32759;
+ public int b32760;
+ public int b32761;
+ public int b32762;
+ public int b32763;
+ public int b32764;
+ public int b32765;
+ public int b32766;
+ public int b32767;
+}
diff --git a/jack-tests/tests/com/android/jack/inner/InnerTests.java b/jack-tests/tests/com/android/jack/inner/InnerTests.java
index 995fbf4..2a9eae1 100644
--- a/jack-tests/tests/com/android/jack/inner/InnerTests.java
+++ b/jack-tests/tests/com/android/jack/inner/InnerTests.java
@@ -17,6 +17,7 @@
package com.android.jack.inner;
import com.android.jack.TestTools;
+import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.test.category.RedundantTests;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.comparator.ComparatorDex;
@@ -371,7 +372,7 @@
@Runtime
public void test026() throws Exception {
new RuntimeTestHelper(TEST026).addIgnoredCandidateToolchain(JillBasedToolchain.class)
- .compileAndRunTest();
+ .addProperty(CodeItemBuilder.DEX_OPTIMIZE.getName(), "true").compileAndRunTest();
}
@Test
diff --git a/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java b/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java
index 0404168..7fed66c 100644
--- a/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java
+++ b/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java
@@ -31,8 +31,6 @@
import com.android.jack.test.toolchain.JillBasedToolchain;
import com.android.sched.util.RunnableHooks;
import com.android.sched.util.config.ThreadConfig;
-import com.android.sched.util.file.FileOrDirectory.ChangePermission;
-import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.InputZipFile;
import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.ReadZipFS;
@@ -177,7 +175,7 @@
/* zipFiles = */ true,
new File(JARJAR004.directory, "lib"));
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
String[] names = {"com.android.jack.jarjar.test004.dontcompile.TestWithRelocatedReference"};
for (RuntimeRunner runner : runnerList) {
Assert.assertEquals(
diff --git a/jack-tests/tests/com/android/jack/java7/EcjMethodHandleTest.java b/jack-tests/tests/com/android/jack/java7/EcjMethodHandleTest.java
index 6407303..029ab2e 100644
--- a/jack-tests/tests/com/android/jack/java7/EcjMethodHandleTest.java
+++ b/jack-tests/tests/com/android/jack/java7/EcjMethodHandleTest.java
@@ -106,7 +106,7 @@
File dexFile = new File(dexOutDir, "classes.dex");
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
((AbstractRuntimeRunner) runner).setOutputStream(out);
diff --git a/jack-tests/tests/com/android/jack/java7/EcjPolymorphicSignatureTest.java b/jack-tests/tests/com/android/jack/java7/EcjPolymorphicSignatureTest.java
index 58348fc..aee81d0 100644
--- a/jack-tests/tests/com/android/jack/java7/EcjPolymorphicSignatureTest.java
+++ b/jack-tests/tests/com/android/jack/java7/EcjPolymorphicSignatureTest.java
@@ -99,7 +99,7 @@
File dexFile = new File(dexOutDir, "classes.dex");
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
((AbstractRuntimeRunner) runner).setOutputStream(out);
diff --git a/jack-tests/tests/com/android/jack/java7/InvokePolymorphicTests.java b/jack-tests/tests/com/android/jack/java7/InvokePolymorphicTests.java
index 349cddf..a4b3f9b 100644
--- a/jack-tests/tests/com/android/jack/java7/InvokePolymorphicTests.java
+++ b/jack-tests/tests/com/android/jack/java7/InvokePolymorphicTests.java
@@ -30,6 +30,7 @@
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.JackApiToolchainBase;
@@ -107,42 +108,42 @@
});
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic001() throws Exception {
run(INVOKE_POLYMORPHIC_001);
}
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic002() throws Exception {
run(INVOKE_POLYMORPHIC_002);
}
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic003() throws Exception {
run(INVOKE_POLYMORPHIC_003);
}
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic004() throws Exception {
run(INVOKE_POLYMORPHIC_004);
}
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic005() throws Exception {
run(INVOKE_POLYMORPHIC_005);
}
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic006() throws Exception {
run(INVOKE_POLYMORPHIC_006);
@@ -198,7 +199,7 @@
}
@Test
- @Runtime
+ @Runtime(from=RuntimeVersion.O)
@KnownIssue
public void testInvokePolymorphic007() throws Exception {
run(INVOKE_POLYMORPHIC_007);
diff --git a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test001/test.properties b/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test001/test.properties
deleted file mode 100644
index f2a3478..0000000
--- a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test001/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rt.args.ArtRunnerHost=-Xexperimental:method-handles
-rt.args.ArtRunnerDevice=-Xexperimental:method-handles
diff --git a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test002/test.properties b/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test002/test.properties
deleted file mode 100644
index f2a3478..0000000
--- a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test002/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rt.args.ArtRunnerHost=-Xexperimental:method-handles
-rt.args.ArtRunnerDevice=-Xexperimental:method-handles
diff --git a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test003/test.properties b/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test003/test.properties
deleted file mode 100644
index f2a3478..0000000
--- a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test003/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rt.args.ArtRunnerHost=-Xexperimental:method-handles
-rt.args.ArtRunnerDevice=-Xexperimental:method-handles
diff --git a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test004/test.properties b/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test004/test.properties
deleted file mode 100644
index f2a3478..0000000
--- a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test004/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rt.args.ArtRunnerHost=-Xexperimental:method-handles
-rt.args.ArtRunnerDevice=-Xexperimental:method-handles
diff --git a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test005/test.properties b/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test005/test.properties
deleted file mode 100644
index f2a3478..0000000
--- a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test005/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rt.args.ArtRunnerHost=-Xexperimental:method-handles
-rt.args.ArtRunnerDevice=-Xexperimental:method-handles
diff --git a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test006/test.properties b/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test006/test.properties
deleted file mode 100644
index f2a3478..0000000
--- a/jack-tests/tests/com/android/jack/java7/invokepolymorphic/test006/test.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-rt.args.ArtRunnerHost=-Xexperimental:method-handles
-rt.args.ArtRunnerDevice=-Xexperimental:method-handles
diff --git a/jack-tests/tests/com/android/jack/java8/AnnotationTest.java b/jack-tests/tests/com/android/jack/java8/AnnotationTest.java
index ee84d6d..f479aae 100644
--- a/jack-tests/tests/com/android/jack/java8/AnnotationTest.java
+++ b/jack-tests/tests/com/android/jack/java8/AnnotationTest.java
@@ -175,7 +175,7 @@
@Nonnull
private void run(@Nonnull String mainClass, @Nonnull File[] dexFiles) throws Exception {
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
Assert.assertEquals(0, runner.runJUnit(new String[0], AbstractTestTools.JUNIT_RUNNER_NAME,
new String[] {mainClass}, dexFiles));
diff --git a/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java b/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java
index c12275d..2676061 100644
--- a/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java
+++ b/jack-tests/tests/com/android/jack/java8/BridgeTestPostM.java
@@ -18,7 +18,6 @@
import com.android.jack.JackAbortException;
import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
@@ -57,8 +56,7 @@
public void testBridge002() throws Exception {
new RuntimeTestHelper(BRIDGE002)
.setSourceLevel(SourceLevel.JAVA_8)
- .addProperty(Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.addIgnoredCandidateToolchain(JackApiV01.class).compileAndRunTest();
}
@@ -94,12 +92,11 @@
toolchain instanceof JackApiV03Toolchain);
File lib23 =
AbstractTestTools.createTempFile("lib23", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
- .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
- .setSourceLevel(SourceLevel.JAVA_8)
- .addToClasspath(toolchain.getDefaultBootClasspath());
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()));
+ toolchain
+ .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addToClasspath(toolchain.getDefaultBootClasspath());
if (!pre04 && enablePredexing) {
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -118,9 +115,7 @@
File dex24 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.libToExe(lib23, dex24, /* zipFiles = */ false);
// Run to check everything went as expected
@@ -144,9 +139,7 @@
AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeClazz);
File lib23 =
AbstractTestTools.createTempFile("lib23", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.setSourceLevel(SourceLevel.JAVA_8)
.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(lib23,
@@ -154,9 +147,7 @@
File dex24 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.libToExe(lib23, dex24, /* zipFiles = */ false);
// Run to check everything went as expected
@@ -197,10 +188,9 @@
toolchain instanceof JackApiV03Toolchain);
File lib23 =
AbstractTestTools.createTempFile("lib23", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
- .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()));
+ toolchain
+ .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
.setSourceLevel(SourceLevel.JAVA_8)
.addToClasspath(toolchain.getDefaultBootClasspath());
@@ -222,9 +212,7 @@
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
File dex23 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()))
.setErrorStream(errOut);
try {
toolchain.libToExe(lib23, dex23, /* zipFiles = */ false);
@@ -249,9 +237,7 @@
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
File lib24 =
AbstractTestTools.createTempFile("lib24", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(24))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.setSourceLevel(SourceLevel.JAVA_8)
.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(lib24,
@@ -260,9 +246,7 @@
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
File dex23 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()))
.setErrorStream(errOut);
try {
toolchain.libToExe(lib24, dex23, /* zipFiles = */ false);
diff --git a/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java b/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java
index c0f1b02..0d87df1 100644
--- a/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java
+++ b/jack-tests/tests/com/android/jack/java8/DefaultMethodTest.java
@@ -18,7 +18,6 @@
import com.android.jack.JackAbortException;
import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.KnownIssue;
@@ -33,7 +32,6 @@
import com.android.jack.test.toolchain.JackApiV02;
import com.android.jack.test.toolchain.JackApiV03;
import com.android.jack.test.toolchain.JackBasedToolchain;
-import com.android.jack.test.toolchain.JillBasedToolchain;
import com.android.jack.test.toolchain.Toolchain.SourceLevel;
import com.android.jack.util.AndroidApiLevel;
@@ -204,9 +202,7 @@
File lib24 =
AbstractTestTools.createTempFile("lib24", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.setSourceLevel(SourceLevel.JAVA_8)
.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(lib24,
@@ -215,9 +211,7 @@
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
File dex23 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()))
.setErrorStream(errOut);
try {
toolchain.libToExe(lib24, dex23, /* zipFiles = */ false);
@@ -260,12 +254,11 @@
toolchain instanceof JackApiV03);
File lib23 =
AbstractTestTools.createTempFile("lib23", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
- .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
- .setSourceLevel(SourceLevel.JAVA_8)
- .addToClasspath(toolchain.getDefaultBootClasspath());
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()));
+ toolchain
+ .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addToClasspath(toolchain.getDefaultBootClasspath());
if (enablePredexing) {
// When enabling predexing, we should have run the checker and fail due to the presence
@@ -295,9 +288,7 @@
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
File dex23 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()))
.setErrorStream(errOut);
try {
toolchain.libToExe(lib23, dex23, /* zipFiles = */ false);
@@ -336,12 +327,11 @@
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
File lib23 =
AbstractTestTools.createTempFile("lib23", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(23))
- .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
- .setSourceLevel(SourceLevel.JAVA_8)
- .addToClasspath(toolchain.getDefaultBootClasspath());
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.M.getLevel()));
+ toolchain
+ .addProperty(Options.GENERATE_DEX_IN_LIBRARY.getName(), Boolean.toString(enablePredexing))
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addToClasspath(toolchain.getDefaultBootClasspath());
if (enablePredexing) {
boolean pre04 = (toolchain instanceof JackApiV01 ||
@@ -370,9 +360,7 @@
File dex24 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.libToExe(lib23, dex24, /* zipFiles = */ false);
// Run to check everything went as expected
@@ -397,9 +385,7 @@
AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeClazz);
File lib24 =
AbstractTestTools.createTempFile("lib24", toolchain.getLibraryExtension());
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.setSourceLevel(SourceLevel.JAVA_8)
.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(lib24,
@@ -407,9 +393,7 @@
File dex24 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeClazz);
- toolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.libToExe(lib24, dex24, /* zipFiles = */ false);
// Run to check everything went as expected
@@ -518,15 +502,7 @@
@Test
@Runtime(from=RuntimeVersion.N)
public void testDefaultMethod018() throws Exception {
- new RuntimeTestHelper(DEFAULTMETHOD018)
- .addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
- .setSourceLevel(SourceLevel.JAVA_8)
- .addIgnoredCandidateToolchain(JackApiV01.class)
- // This test must be exclude from the Jill tool-chain because, there is a different behavior than with Jack
- .addIgnoredCandidateToolchain(JillBasedToolchain.class)
- .compileAndRunTest();
+ run(DEFAULTMETHOD018);
}
@Test
@@ -537,11 +513,9 @@
private void run(@Nonnull RuntimeTestInfo rti) throws Exception {
new RuntimeTestHelper(rti)
- .addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.setSourceLevel(SourceLevel.JAVA_8)
.addIgnoredCandidateToolchain(JackApiV01.class)
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.compileAndRunTest();
}
}
diff --git a/jack-tests/tests/com/android/jack/java8/EcjInterfaceMethodsTest.java b/jack-tests/tests/com/android/jack/java8/EcjInterfaceMethodsTest.java
index 3494c4c..e788f52 100644
--- a/jack-tests/tests/com/android/jack/java8/EcjInterfaceMethodsTest.java
+++ b/jack-tests/tests/com/android/jack/java8/EcjInterfaceMethodsTest.java
@@ -16,8 +16,6 @@
package com.android.jack.java8;
-import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.eclipse.jdt.core.tests.compiler.regression.InterfaceMethodsTest;
import com.android.jack.test.runner.AbstractRuntimeRunner;
import com.android.jack.test.runner.RuntimeRunner;
@@ -157,9 +155,8 @@
// Build dex file
jackToolchain.addToClasspath(jackToolchain.getDefaultBootClasspath());
jackToolchain.setSourceLevel(SourceLevel.JAVA_8);
- jackToolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
+ jackToolchain
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
jackToolchain.srcToExe(dexOutDir, /* zipFile = */ false, sourceFolder);
} catch (Exception e) {
e.printStackTrace();
@@ -171,27 +168,27 @@
@Override
public void runConformTest(String[] srcDescription, String expectedResult) {
- // Build dex file
- List<Class<? extends IToolchain>> excludeList = new ArrayList<Class<? extends IToolchain>>(1);
- excludeList.add(JackApiV01.class);
+ // Build dex file
+ List<Class<? extends IToolchain>> excludeList = new ArrayList<Class<? extends IToolchain>>(1);
+ excludeList.add(JackApiV01.class);
- JackBasedToolchain jackToolchain = null;
- try {
- jackToolchain =
- AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeList);
- } catch (AssumptionViolatedException e) {
- // Handle JUnit4 feature in JUnit3 tests.
- return;
- }
+ JackBasedToolchain jackToolchain = null;
+ try {
+ jackToolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeList);
+ } catch (AssumptionViolatedException e) {
+ // Handle JUnit4 feature in JUnit3 tests.
+ return;
+ }
- jackToolchain.addToClasspath(jackToolchain.getDefaultBootClasspath());
- jackToolchain.setSourceLevel(SourceLevel.JAVA_8);
- jackToolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
+ jackToolchain.addToClasspath(jackToolchain.getDefaultBootClasspath());
+ jackToolchain.setSourceLevel(SourceLevel.JAVA_8);
try {
+ jackToolchain
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
+
File dexOutDir = AbstractTestTools.createTempDir();
File sourceFolder = buildSourceFolder(srcDescription);
@@ -200,7 +197,7 @@
File dexFile = new File(dexOutDir, "classes.dex");
List<RuntimeRunner> runnerList =
- AbstractTestTools.listRuntimeTestRunners(/* properties = */ null);
+ AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
((AbstractRuntimeRunner) runner).setOutputStream(out);
diff --git a/jack-tests/tests/com/android/jack/java8/EcjLambdaTest.java b/jack-tests/tests/com/android/jack/java8/EcjLambdaTest.java
index c9ee4b8..ebf4627 100644
--- a/jack-tests/tests/com/android/jack/java8/EcjLambdaTest.java
+++ b/jack-tests/tests/com/android/jack/java8/EcjLambdaTest.java
@@ -181,7 +181,7 @@
File dexFile = new File(dexOutDir, "classes.dex");
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
((AbstractRuntimeRunner) runner).setOutputStream(out);
@@ -227,7 +227,7 @@
}
protected JackBasedToolchain createToolchain(
- @Nonnull List<Class<? extends IToolchain>> excludeList) throws AssumptionViolatedException {
+ @Nonnull List<Class<? extends IToolchain>> excludeList) throws Exception {
JackBasedToolchain jackToolchain = null;
jackToolchain =
diff --git a/jack-tests/tests/com/android/jack/java8/EcjLambdaTestPostM.java b/jack-tests/tests/com/android/jack/java8/EcjLambdaTestPostM.java
index cedeaac..315279a 100644
--- a/jack-tests/tests/com/android/jack/java8/EcjLambdaTestPostM.java
+++ b/jack-tests/tests/com/android/jack/java8/EcjLambdaTestPostM.java
@@ -16,8 +16,6 @@
package com.android.jack.java8;
-import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.toolchain.IToolchain;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.util.AndroidApiLevel;
@@ -26,7 +24,6 @@
import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
-import org.junit.internal.AssumptionViolatedException;
import org.junit.runner.Description;
import org.junit.runner.manipulation.Filter;
import org.junit.runner.manipulation.NoTestsRemainException;
@@ -82,11 +79,9 @@
@Override
protected JackBasedToolchain createToolchain(
- @Nonnull List<Class<? extends IToolchain>> excludeList) throws AssumptionViolatedException {
+ @Nonnull List<Class<? extends IToolchain>> excludeList) throws Exception {
JackBasedToolchain jackToolchain = super.createToolchain(excludeList);
- jackToolchain.addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
+ jackToolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
return jackToolchain;
}
diff --git a/jack-tests/tests/com/android/jack/java8/ExplicitReceiverTest.java b/jack-tests/tests/com/android/jack/java8/ExplicitReceiverTest.java
new file mode 100644
index 0000000..8f0f162
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/ExplicitReceiverTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8;
+
+import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.runtime.RuntimeTestInfo;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackApiV01;
+import com.android.jack.test.toolchain.Toolchain.SourceLevel;
+
+import org.junit.Test;
+
+import javax.annotation.Nonnull;
+
+
+/**
+ * JUnit test for compilation of explicit receiver usage.
+ */
+public class ExplicitReceiverTest {
+
+ private final RuntimeTestInfo EXPLICIT_RECEIVER_001 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.explicitreceiver.test001"),
+ "com.android.jack.java8.explicitreceiver.test001.Tests").setSrcDirName("");
+
+ private final RuntimeTestInfo EXPLICIT_RECEIVER_002 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.explicitreceiver.test002"),
+ "com.android.jack.java8.explicitreceiver.test002.Tests").setSrcDirName("");
+
+ @Test
+ @Runtime
+ public void testExplicitReceiver001() throws Exception {
+ run(EXPLICIT_RECEIVER_001);
+ }
+
+ @Test
+ @Runtime
+ public void testExplicitReceiver002() throws Exception {
+ run(EXPLICIT_RECEIVER_002);
+ }
+
+
+ private void run(@Nonnull RuntimeTestInfo rti) throws Exception {
+ new RuntimeTestHelper(rti)
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addIgnoredCandidateToolchain(JackApiV01.class)
+ .compileAndRunTest();
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java b/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java
index 80cdaf9..339c05c 100644
--- a/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java
+++ b/jack-tests/tests/com/android/jack/java8/GwtTestPostM.java
@@ -16,8 +16,6 @@
package com.android.jack.java8;
-import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
@@ -231,8 +229,7 @@
private void run(@Nonnull RuntimeTestInfo rti) throws Exception {
new RuntimeTestHelper(rti).setSourceLevel(SourceLevel.JAVA_8)
- .addProperty(Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.compileAndRunTest();
}
diff --git a/jack-tests/tests/com/android/jack/java8/Java8AllTest.java b/jack-tests/tests/com/android/jack/java8/Java8AllTest.java
index e31752c..c4756b3 100644
--- a/jack-tests/tests/com/android/jack/java8/Java8AllTest.java
+++ b/jack-tests/tests/com/android/jack/java8/Java8AllTest.java
@@ -41,12 +41,19 @@
AnnotationTest.class,
BridgeTestPreN.class,
EcjLambdaTest.class,
+ ExplicitReceiverTest.class,
GwtTest.class,
IntersectionTypeTest.class,
+ LambdaGroupByPackageShrinkTests.class,
+ LambdaGroupByTypeShrinkTests.class,
+ LambdaNoGroupingShrinkTests.class,
LambdaTest.class,
MethodRefTest.class,
TypeInferenceTest.class,
- VariableTest.class
+ VariableTest.class,
+
+ // O test
+ ParameterNameTest.class
}
)
public class Java8AllTest {}
diff --git a/jack-tests/tests/com/android/jack/java8/LambdaGroupByPackageShrinkTests.java b/jack-tests/tests/com/android/jack/java8/LambdaGroupByPackageShrinkTests.java
new file mode 100644
index 0000000..81ae6af
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/LambdaGroupByPackageShrinkTests.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8;
+
+import com.android.jack.Options;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+
+import javax.annotation.Nonnull;
+
+public class LambdaGroupByPackageShrinkTests extends LambdaNoGroupingShrinkTests {
+
+
+ @Override
+ @Nonnull
+ protected JackBasedToolchain getToolchain() {
+ return super.getToolchain().addProperty(Options.LAMBDA_GROUPING_SCOPE.getName(), "package");
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/LambdaGroupByTypeShrinkTests.java b/jack-tests/tests/com/android/jack/java8/LambdaGroupByTypeShrinkTests.java
new file mode 100644
index 0000000..747f049
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/LambdaGroupByTypeShrinkTests.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8;
+
+import com.android.jack.Options;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+
+import javax.annotation.Nonnull;
+
+public class LambdaGroupByTypeShrinkTests extends LambdaNoGroupingShrinkTests {
+
+
+ @Override
+ @Nonnull
+ protected JackBasedToolchain getToolchain() {
+ return super.getToolchain().addProperty(Options.LAMBDA_GROUPING_SCOPE.getName(), "type");
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/LambdaNoGroupingShrinkTests.java b/jack-tests/tests/com/android/jack/java8/LambdaNoGroupingShrinkTests.java
new file mode 100644
index 0000000..8ce06b5
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/LambdaNoGroupingShrinkTests.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8;
+
+import com.android.jack.Options;
+import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.runtime.RuntimeTestInfo;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.IToolchain;
+import com.android.jack.test.toolchain.JackBasedToolchain;
+import com.android.jack.test.toolchain.JillBasedToolchain;
+import com.android.jack.test.toolchain.Toolchain.SourceLevel;
+
+import org.junit.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+public class LambdaNoGroupingShrinkTests {
+
+ @Nonnull
+ private File PROGUARD_SHRINK_NOTHING = new File(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.lambda.test044"),
+ "shrink-nothing.flags");
+
+ @Nonnull
+ private RuntimeTestInfo TEST001 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.lambda.test044"),
+ "com.android.jack.java8.lambda.test044.jack.Tests");
+
+ @Test
+ @Runtime
+ public void testLamba044_whole() throws Exception {
+
+ File lib = makeLibrary(new File[]{}, TEST001.directory);
+
+ test(TEST001.jUnit, lib);
+ }
+
+ @Test
+ @Runtime
+ public void testLamba044_ByLib() throws Exception {
+
+ File lib2 = makeLibrary(new File[]{}, new File(TEST001.directory, "lib2"));
+ File lib1 = makeLibrary(new File[]{lib2}, new File(TEST001.directory, "lib1"));
+ File libJack = makeLibrary(new File[]{lib2, lib1}, new File(TEST001.directory, "jack"));
+
+ test(TEST001.jUnit, lib2, lib1, libJack);
+
+ }
+
+ @Test
+ @Runtime
+ public void testLamba044_ByTestClass() throws Exception {
+
+ File libs = makeLibrary(new File[]{},
+ new File(TEST001.directory, "lib1"), new File(TEST001.directory, "lib2"));
+ File b2 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "jack/B2.java"));
+ File b3 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "jack/B3.java"));
+ File test = makeLibrary(new File[]{libs, b2, b3},
+ new File(TEST001.directory, "jack/Tests.java"));
+
+ test(TEST001.jUnit, libs, b2, b3, test);
+
+ }
+
+ @Test
+ @Runtime
+ public void testLamba044_ClassConflict() throws Exception {
+
+ File libs = makeLibrary(new File[]{},
+ new File(TEST001.directory, "lib1"), new File(TEST001.directory, "lib2"));
+ File lib2A3 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "lib2/A3.java"));
+ File b2 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "jack/B2.java"));
+ File b3 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "jack/B3.java"));
+ File test = makeLibrary(new File[]{libs, lib2A3, b2, b3},
+ new File(TEST001.directory, "jack/Tests.java"));
+
+ test(TEST001.jUnit, libs, b2, b3, test);
+
+ }
+
+ @Test
+ @Runtime
+ public void testLamba044_PackageConflict() throws Exception {
+
+ File libs = makeLibrary(new File[]{},
+ new File(TEST001.directory, "lib1"), new File(TEST001.directory, "lib2"));
+ File lib2 = makeLibrary(new File[]{}, new File(TEST001.directory, "lib2/"));
+ File b2 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "jack/B2.java"));
+ File b3 = makeLibrary(new File[]{libs}, new File(TEST001.directory, "jack/B3.java"));
+ File test = makeLibrary(new File[]{libs, lib2, b2, b3},
+ new File(TEST001.directory, "jack/Tests.java"));
+
+ test(TEST001.jUnit, libs, b2, b3, test);
+
+ }
+
+ @Nonnull
+ protected File makeLibrary(@Nonnull File[] classpath, @Nonnull File... src) throws Exception {
+ JackBasedToolchain toolchain = getToolchain();
+
+ File lib = AbstractTestTools.createTempFile("lib", ".jack");
+ toolchain
+ .addToClasspath(toolchain.getDefaultBootClasspath())
+ .addToClasspath(classpath)
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addProguardFlags(PROGUARD_SHRINK_NOTHING)
+ .srcToLib(lib, /* zipFiles = */ true, src);
+
+ return lib;
+ }
+
+ @Nonnull
+ protected void test(@Nonnull String test, @Nonnull File... libs) throws Exception {
+ JackBasedToolchain toolchain = getToolchain();
+
+ File dex = AbstractTestTools.createTempFile("dex", ".jar");
+ toolchain
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addProguardFlags(PROGUARD_SHRINK_NOTHING)
+ .libToExe(libs, dex, /* zipFiles = */ true);
+
+ RuntimeTestHelper.runOnRuntimeEnvironments(
+ Collections.singletonList(test),
+ RuntimeTestHelper.getJunitDex(), dex);
+
+ }
+
+ @Nonnull
+ protected JackBasedToolchain getToolchain() {
+ List<Class<? extends IToolchain>> excludedToolchains =
+ new ArrayList<Class<? extends IToolchain>>();
+ excludedToolchains.add(JillBasedToolchain.class);
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludedToolchains);
+ return toolchain.addProperty(Options.LAMBDA_GROUPING_SCOPE.getName(), "none");
+ }
+
+}
diff --git a/jack-tests/tests/com/android/jack/java8/LambdaTest.java b/jack-tests/tests/com/android/jack/java8/LambdaTest.java
index 77980de..b9a11fb 100644
--- a/jack-tests/tests/com/android/jack/java8/LambdaTest.java
+++ b/jack-tests/tests/com/android/jack/java8/LambdaTest.java
@@ -806,8 +806,67 @@
run(LAMBDA042);
}
+ /**
+ * Check that lambda classes are not lost when successively importing libraries.
+ */
+ @Test
+ @Runtime
+ public void testLamba043() throws Exception {
+ List<Class<? extends IToolchain>> excludedToolchains =
+ new ArrayList<Class<? extends IToolchain>>();
+ excludedToolchains.add(JackApiV01.class);
+
+ // create a lib2 that contains a lambda
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludedToolchains);
+ File lib2 = AbstractTestTools.createTempFile("lib2", toolchain.getLibraryExtension());
+ {
+ File sourceDir =
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.lambda.test043.lib2.jack");
+ File[] defaultClasspath = toolchain.getDefaultBootClasspath();
+ toolchain.setSourceLevel(SourceLevel.JAVA_8);
+ toolchain.addToClasspath(defaultClasspath).srcToLib(lib2, /* zipFiles = */ true, sourceDir);
+ }
+
+ // create a lib1 that statically imports lib2
+ toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludedToolchains);
+ File lib1 = AbstractTestTools.createTempFile("lib1", toolchain.getLibraryExtension());
+ {
+ File sourceDir =
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.lambda.test043.lib1.jack");
+ File[] defaultClasspath = toolchain.getDefaultBootClasspath();
+ toolchain.setSourceLevel(SourceLevel.JAVA_8);
+ toolchain.addStaticLibs(lib2);
+ toolchain.addToClasspath(defaultClasspath).srcToLib(lib1, /* zipFiles = */ true, sourceDir);
+ }
+
+ // create a dex that statically imports lib1
+ File dexDir = AbstractTestTools.createTempDir();
+ {
+ File sourceDir =
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.lambda.test043.jack");
+ toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludedToolchains);
+ File[] defaultClasspath = toolchain.getDefaultBootClasspath();
+ toolchain.addStaticLibs(lib1);
+ toolchain
+ .addToClasspath(defaultClasspath)
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .srcToExe(dexDir, /* zipFiles = */ false, sourceDir);
+ }
+
+ // call the lambda
+ run(
+ "com.android.jack.java8.lambda.test043.jack.Tests",
+ new File[] {
+ new File(TestsProperties.getJackRootDir(), "jack-tests/prebuilts/junit4-hostdex.jar"),
+ new File(dexDir, DexFileWriter.DEX_FILENAME)
+ });
+ }
+
private void run(@Nonnull String mainClass, @Nonnull File[] dexFiles) throws Exception {
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
Assert.assertEquals(0, runner.runJUnit(new String[0], AbstractTestTools.JUNIT_RUNNER_NAME,
new String[] {mainClass}, dexFiles));
diff --git a/jack-tests/tests/com/android/jack/java8/LambdaTestPostM.java b/jack-tests/tests/com/android/jack/java8/LambdaTestPostM.java
index 6d438a6..a58b1da 100644
--- a/jack-tests/tests/com/android/jack/java8/LambdaTestPostM.java
+++ b/jack-tests/tests/com/android/jack/java8/LambdaTestPostM.java
@@ -16,9 +16,7 @@
package com.android.jack.java8;
-import com.android.jack.Options;
import com.android.jack.backend.dex.DexFileWriter;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.TestsProperties;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
@@ -77,8 +75,7 @@
toolchain =
AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludedToolchains);
File libDexFolder = AbstractTestTools.createTempDir();
- toolchain.addProperty(Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
+ toolchain.setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()));
toolchain.addToClasspath(defaultClasspath).setSourceLevel(SourceLevel.JAVA_8).libToExe(lib,
libDexFolder, /* zipFiles = */ false);
@@ -98,7 +95,7 @@
}
private void run(@Nonnull String mainClass, @Nonnull File[] dexFiles) throws Exception {
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
for (RuntimeRunner runner : runnerList) {
Assert.assertEquals(0, runner.runJUnit(new String[0], AbstractTestTools.JUNIT_RUNNER_NAME,
new String[] {mainClass}, dexFiles));
diff --git a/jack-tests/tests/com/android/jack/java8/ParameterNameTest.java b/jack-tests/tests/com/android/jack/java8/ParameterNameTest.java
new file mode 100644
index 0000000..551b3e0
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/ParameterNameTest.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8;
+
+import com.android.jack.TestTools;
+import com.android.jack.backend.dex.annotations.ParameterMetadataAnnotationsAdder;
+import com.android.jack.test.helper.FileChecker;
+import com.android.jack.test.helper.RuntimeTestHelper;
+import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.junit.RuntimeVersion;
+import com.android.jack.test.runtime.RuntimeTestInfo;
+import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.JackApiV01;
+import com.android.jack.test.toolchain.JillBasedToolchain;
+import com.android.jack.test.toolchain.Toolchain.SourceLevel;
+
+import junit.framework.Assert;
+
+import org.jf.dexlib.DexFile;
+import org.jf.dexlib.StringIdItem;
+import org.jf.dexlib.ClassDataItem.EncodedMethod;
+import org.junit.Test;
+
+import java.io.File;
+
+import javax.annotation.Nonnull;
+
+
+/**
+ * JUnit test for parameter metadata.
+ */
+public class ParameterNameTest {
+
+ private File extraJavaFile =
+ new File(AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.common"),
+ "ParameterTestModifier.java");
+
+ private RuntimeTestInfo PARAMETER001 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test001"),
+ "com.android.jack.java8.parameter.test001.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER002 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test002"),
+ "com.android.jack.java8.parameter.test002.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER003 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test003"),
+ "com.android.jack.java8.parameter.test003.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER004 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test004"),
+ "com.android.jack.java8.parameter.test004.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER005 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test005"),
+ "com.android.jack.java8.parameter.test005.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER006 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test006"),
+ "com.android.jack.java8.parameter.test006.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER007 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test007"),
+ "com.android.jack.java8.parameter.test007.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER008 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test008"),
+ "com.android.jack.java8.parameter.test008.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER009 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test009"),
+ "com.android.jack.java8.parameter.test009.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ private RuntimeTestInfo PARAMETER010 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.java8.parameter.test010"),
+ "com.android.jack.java8.parameter.test010.Tests").setSrcDirName("")
+ .addCandidateExtraSources(extraJavaFile);
+
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere001() throws Exception {
+ run(PARAMETER001);
+ }
+
+ @Test
+ @Runtime(from = RuntimeVersion.O)
+ public void testParametere002() throws Exception {
+ new RuntimeTestHelper(PARAMETER002)
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addIgnoredCandidateToolchain(JackApiV01.class)
+ .addIgnoredCandidateToolchain(JillBasedToolchain.class)
+ .addProperty(ParameterMetadataAnnotationsAdder.PARAMETER_ANNOTATION.getName(), "true")
+ .setWithDebugInfos(true).compileAndRunTest();
+ }
+
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere003() throws Exception {
+ run(PARAMETER003);
+ }
+
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere004() throws Exception {
+ new RuntimeTestHelper(PARAMETER004)
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addIgnoredCandidateToolchain(JackApiV01.class)
+ .addIgnoredCandidateToolchain(JillBasedToolchain.class)
+ .addProperty(ParameterMetadataAnnotationsAdder.PARAMETER_ANNOTATION.getName(), "true")
+ .setWithDebugInfos(true).compileAndRunTest();
+ }
+
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere005() throws Exception {
+ new RuntimeTestHelper(PARAMETER005.addFileChecker(new FileChecker() {
+
+ @Override
+ public void check(@Nonnull File file) throws Exception {
+ DexFile dexFile = new DexFile(file);
+ EncodedMethod em = TestTools.getEncodedMethod(dexFile,
+ "Lcom/android/jack/java8/parameter/test005/Tests;", "m1", "(III)I");
+ StringIdItem[] parameterNames = em.codeItem.getDebugInfo().getParameterNames();
+ Assert.assertEquals("p1", parameterNames[0].getStringValue());
+ Assert.assertEquals("p2", parameterNames[1].getStringValue());
+ Assert.assertEquals("p3", parameterNames[2].getStringValue());
+ }
+ })).setSourceLevel(SourceLevel.JAVA_8)
+ .addIgnoredCandidateToolchain(JackApiV01.class)
+ .addProperty(ParameterMetadataAnnotationsAdder.PARAMETER_ANNOTATION.getName(), "true")
+ .setWithDebugInfos(true)
+ .compileAndRunTest();
+ }
+
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere005_1() throws Exception {
+ new RuntimeTestHelper(PARAMETER005.addFileChecker(new FileChecker() {
+
+ @Override
+ public void check(@Nonnull File file) throws Exception {
+ DexFile dexFile = new DexFile(file);
+ EncodedMethod em = TestTools.getEncodedMethod(dexFile,
+ "Lcom/android/jack/java8/parameter/test005/Tests;", "m1", "(III)I");
+ StringIdItem[] parameterNames = em.codeItem.getDebugInfo().getParameterNames();
+ Assert.assertNull(parameterNames[0]);
+ Assert.assertNull(parameterNames[1]);
+ Assert.assertNull(parameterNames[2]);
+ }
+ })).setSourceLevel(SourceLevel.JAVA_8)
+ .addIgnoredCandidateToolchain(JackApiV01.class)
+ .addProperty(ParameterMetadataAnnotationsAdder.PARAMETER_ANNOTATION.getName(), "true")
+ .setWithDebugInfos(false)
+ .compileAndRunTest();
+ }
+
+ /**
+ * Test behavior with a getter accessor.
+ */
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere006() throws Exception {
+ run(PARAMETER006);
+ }
+
+ /**
+ * Test behavior with a setter accessor.
+ */
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere007() throws Exception {
+ run(PARAMETER007);
+ }
+
+ /**
+ * Test behavior with a wrapper.
+ */
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere008() throws Exception {
+ run(PARAMETER008);
+ }
+
+ /**
+ * Test behavior with a synthetic bridge.
+ */
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere009() throws Exception {
+ run(PARAMETER009);
+ }
+
+ /**
+ * Test behavior with method mixing 32-bit and 64-bit parameters.
+ */
+ @Test
+ @Runtime(from=RuntimeVersion.O)
+ public void testParametere010() throws Exception {
+ run(PARAMETER010);
+ }
+
+ private void run(@Nonnull RuntimeTestInfo rti) throws Exception {
+ new RuntimeTestHelper(rti)
+ .setSourceLevel(SourceLevel.JAVA_8)
+ .addIgnoredCandidateToolchain(JackApiV01.class)
+ .addProperty(ParameterMetadataAnnotationsAdder.PARAMETER_ANNOTATION.getName(), "true")
+ .setWithDebugInfos(true)
+ .compileAndRunTest();
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java b/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java
index 92c575e..62e41bb 100644
--- a/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java
+++ b/jack-tests/tests/com/android/jack/java8/RetroLambdaTests.java
@@ -16,8 +16,6 @@
package com.android.jack.java8;
-import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.junit.RuntimeVersion;
@@ -410,9 +408,7 @@
private void run(@Nonnull RuntimeTestInfo rti) throws Exception {
new RuntimeTestHelper(rti)
.setSourceLevel(SourceLevel.JAVA_8)
- .addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.addIgnoredCandidateToolchain(JackApiV01.class)
.compileAndRunTest();
}
diff --git a/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java b/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java
index 3b5b095..d3b98dd 100644
--- a/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java
+++ b/jack-tests/tests/com/android/jack/java8/StaticMethodTest.java
@@ -16,12 +16,6 @@
package com.android.jack.java8;
-import org.junit.Test;
-
-import javax.annotation.Nonnull;
-
-import com.android.jack.Options;
-import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.junit.RuntimeVersion;
@@ -31,6 +25,10 @@
import com.android.jack.test.toolchain.Toolchain.SourceLevel;
import com.android.jack.util.AndroidApiLevel;
+import org.junit.Test;
+
+import javax.annotation.Nonnull;
+
/**
@@ -71,9 +69,7 @@
private void run(@Nonnull RuntimeTestInfo rti) throws Exception {
new RuntimeTestHelper(rti)
.setSourceLevel(SourceLevel.JAVA_8)
- .addProperty(
- Options.ANDROID_MIN_API_LEVEL.getName(),
- String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
+ .setAndroidMinApiLevel(String.valueOf(AndroidApiLevel.ReleasedLevel.N.getLevel()))
.addIgnoredCandidateToolchain(JackApiV01.class)
.compileAndRunTest();
}
diff --git a/jack-tests/tests/com/android/jack/java8/defaultmethod/test018/jack/Tests.java b/jack-tests/tests/com/android/jack/java8/defaultmethod/test018/jack/Tests.java
index 13859cf..5ab5cbe 100644
--- a/jack-tests/tests/com/android/jack/java8/defaultmethod/test018/jack/Tests.java
+++ b/jack-tests/tests/com/android/jack/java8/defaultmethod/test018/jack/Tests.java
@@ -27,6 +27,6 @@
@Test
public void test001() throws Exception {
Lambda l = new Lambda();
- Assert.assertEquals("default : String", l.testLambdaRedefiningADefault());
+ Assert.assertEquals("lambda : String", l.testLambdaRedefiningADefault());
}
}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java b/jack-tests/tests/com/android/jack/java8/explicitreceiver/test001/Tests.java
similarity index 61%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
copy to jack-tests/tests/com/android/jack/java8/explicitreceiver/test001/Tests.java
index 8c344dd..b282fce 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
+++ b/jack-tests/tests/com/android/jack/java8/explicitreceiver/test001/Tests.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,21 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.java8.explicitreceiver.test001;
-public class ClInitWithVariableInit {
+import junit.framework.Assert;
- static {
- int lv = 5;
+import org.junit.Test;
+
+public class Tests {
+
+ public int add(Tests this,int i1, int i2) {
+ return i1 + i2;
+ }
+
+ @Test
+ public void test() {
+ Tests t = new Tests();
+ Assert.assertEquals(5, t.add(2, 3));
}
}
diff --git a/jack-tests/tests/com/android/jack/java8/explicitreceiver/test002/Tests.java b/jack-tests/tests/com/android/jack/java8/explicitreceiver/test002/Tests.java
new file mode 100644
index 0000000..c76f85e
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/explicitreceiver/test002/Tests.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.explicitreceiver.test002;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class Tests {
+
+ class Add {
+ int result;
+
+ Add(Tests Tests.this,int i1, int i2) {
+ result = i1 + i2;
+ }
+ }
+
+ @Test
+ public void test() {
+ Add t = new Add(2, 3);
+ Assert.assertEquals(5, t.result);
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/lambda/test043/jack/Tests.java b/jack-tests/tests/com/android/jack/java8/lambda/test043/jack/Tests.java
new file mode 100644
index 0000000..078e5a5
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test043/jack/Tests.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.lambda.test043.jack;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.android.jack.java8.lambda.test043.lib1.jack.B;
+
+public class Tests {
+
+ @Test
+ public void test001() {
+ Assert.assertEquals(3, new B().m2().getCst());
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test043/lib1/jack/B.java
similarity index 71%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test043/lib1/jack/B.java
index 0b9fd92..a514618 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test043/lib1/jack/B.java
@@ -14,7 +14,14 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test043.lib1.jack;
-public interface Interface {}
+import com.android.jack.java8.lambda.test043.lib2.jack.A;
+import com.android.jack.java8.lambda.test043.lib2.jack.I;
+public class B {
+
+ public I m2() {
+ return new A().m();
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test043/lib2/jack/A.java
similarity index 76%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test043/lib2/jack/A.java
index 0b9fd92..23459e2 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test043/lib2/jack/A.java
@@ -14,7 +14,14 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test043.lib2.jack;
-public interface Interface {}
+import com.android.jack.java8.lambda.test043.lib2.jack.I;
+public class A {
+
+public I m() {
+ I i = () -> 3;
+ return i;
+}
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test043/lib2/jack/I.java
similarity index 85%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test043/lib2/jack/I.java
index 0b9fd92..01a9a33 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test043/lib2/jack/I.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test043.lib2.jack;
-public interface Interface {}
-
+public interface I {
+ int getCst();
+}
diff --git a/sched/tests/com/android/sched/util/file/AllTests.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/B2.java
similarity index 62%
copy from sched/tests/com/android/sched/util/file/AllTests.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/jack/B2.java
index 1f2ce79..4bc004a 100644
--- a/sched/tests/com/android/sched/util/file/AllTests.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/B2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,13 +14,16 @@
* limitations under the License.
*/
-package com.android.sched.util.file;
+package com.android.jack.java8.lambda.test044.jack;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
+import com.android.jack.java8.lambda.test044.lib1.I2;
+import com.android.jack.java8.lambda.test044.lib1.subpkg.A2;
-@RunWith(Suite.class)
-@SuiteClasses(value = {FileUtilsTest.class})
-public class AllTests {
+class B2 extends A2 {
+ class C {
+ int test() {
+ I2 i = () -> field;
+ return i.getCst() + field;
+ }
+ }
}
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/B3.java
similarity index 62%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/jack/B3.java
index 8c344dd..664ac01 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/B3.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,16 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.java8.lambda.test044.jack;
-public class ClInitWithVariableInit {
+import com.android.jack.java8.lambda.test044.lib1.I2;
+import com.android.jack.java8.lambda.test044.lib1.subpkg.A2;
- static {
- int lv = 5;
+class B3 extends A2 {
+ class C {
+ int test() {
+ I2 i = () -> 2 * field;
+ return i.getCst() + field;
+ }
}
-}
+}
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/Tests.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/Tests.java
new file mode 100644
index 0000000..4eae343
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/jack/Tests.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.lambda.test044.jack;
+
+import com.android.jack.java8.lambda.test044.lib1.B1;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+
+public class Tests {
+
+ @Test
+ public void test001() {
+ Assert.assertEquals(1, new B1().m1().getCst());
+ }
+
+ @Test
+ public void test002() {
+ Assert.assertEquals(20, new B2().new C().test());
+ }
+
+ @Test
+ public void test003() {
+ Assert.assertEquals(3, new B1().m3().getCst());
+ }
+
+ @Test
+ public void test004() {
+ Assert.assertEquals(30, new B3().new C().test());
+ }
+
+ @Test
+ public void test005() {
+ Assert.assertEquals(4, new B1().m4().getCst());
+ }
+
+ @Test
+ public void test006() {
+ Assert.assertEquals(5, new B1().m5().getCst());
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/A4.java
similarity index 82%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/A4.java
index 0b9fd92..02ab933 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/A4.java
@@ -14,7 +14,13 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib1;
-public interface Interface {}
+public class A4 {
+
+ public I2 m() {
+ I2 i = () -> 4;
+ return i;
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/A5.java
similarity index 82%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/A5.java
index 0b9fd92..37c6334 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/A5.java
@@ -14,7 +14,13 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib1;
-public interface Interface {}
+public class A5 {
+
+ public I2 m() {
+ I2 i = () -> 5;
+ return i;
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/B1.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/B1.java
new file mode 100644
index 0000000..ab2c110
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/B1.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.lambda.test044.lib1;
+
+import com.android.jack.java8.lambda.test044.lib2.A1;
+import com.android.jack.java8.lambda.test044.lib2.A3;
+import com.android.jack.java8.lambda.test044.lib2.I1;
+
+public class B1 {
+
+ public I1 m1() {
+ return new A1().m();
+ }
+
+ public I1 m3() {
+ return new A3().m();
+ }
+
+ public I2 m4() {
+ return new A4().m();
+ }
+
+ public I2 m5() {
+ return new A5().m();
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/I2.java
similarity index 86%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/I2.java
index 0b9fd92..ca4ed7b 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/I2.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib1;
-public interface Interface {}
-
+public interface I2 {
+ int getCst();
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/subpkg/A2.java
similarity index 84%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/subpkg/A2.java
index 0b9fd92..3a801e3 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib1/subpkg/A2.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib1.subpkg;
-public interface Interface {}
-
+public class A2 {
+ protected int field = 10;
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/A1.java
similarity index 82%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/A1.java
index 0b9fd92..d7ac151 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/A1.java
@@ -14,7 +14,13 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib2;
-public interface Interface {}
+public class A1 {
+
+ public I1 m() {
+ I1 i = () -> 1;
+ return i;
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/A3.java
similarity index 82%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/A3.java
index 0b9fd92..2bff856 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/A3.java
@@ -14,7 +14,13 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib2;
-public interface Interface {}
+public class A3 {
+
+ public I1 m() {
+ I1 i = () -> 3;
+ return i;
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/I1.java
similarity index 86%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/I1.java
index 0b9fd92..7c82dbc 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/lib2/I1.java
@@ -14,7 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.java8.lambda.test044.lib2;
-public interface Interface {}
-
+public interface I1 {
+ int getCst();
+}
diff --git a/jack-tests/tests/com/android/jack/java8/lambda/test044/shrink-nothing.flags b/jack-tests/tests/com/android/jack/java8/lambda/test044/shrink-nothing.flags
new file mode 100644
index 0000000..40047b9
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/lambda/test044/shrink-nothing.flags
@@ -0,0 +1,4 @@
+-dontobfuscate
+-keep class * {
+ *;
+}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java b/jack-tests/tests/com/android/jack/java8/parameter/common/ParameterTestModifier.java
similarity index 62%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
copy to jack-tests/tests/com/android/jack/java8/parameter/common/ParameterTestModifier.java
index 8c344dd..89763b4 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
+++ b/jack-tests/tests/com/android/jack/java8/parameter/common/ParameterTestModifier.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.java8.parameter.common;
-public class ClInitWithVariableInit {
-
- static {
- int lv = 5;
- }
+public class ParameterTestModifier {
+ public static final int MODIFIER_NONE = 0;
+ public static final int MODIFIER_FINAL = 0X10;
+ public static final int MODIFIER_SYNTHETIC = 0X1000;
+ public static final int MODIFIER_IMPLICIT = 0X8000;
}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test001/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test001/Tests.java
new file mode 100644
index 0000000..ab5b7ed
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test001/Tests.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test001;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+import com.android.jack.java8.parameter.test001.Tests.Context.InnerWithParam;
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ public static void m1(final int p1, int b2, Object... a) {}
+
+ public class InnerClass {
+ public class InnerInnerClass {
+ public InnerInnerClass(float f) {
+ }
+ }
+ }
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method method = Tests.class.getDeclaredMethod("m1", int.class, int.class, Object[].class);
+ Assert.assertEquals(3, method.getParameters().length);
+
+ check(method.getParameters()[0], "p1", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_FINAL);
+
+ check(method.getParameters()[1], "b2", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(method.getParameters()[2], "a", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ @Test
+ public void testInnerClass() throws NoSuchMethodException, SecurityException {
+ Constructor<?> constructor = InnerClass.class.getDeclaredConstructor(Tests.class);
+ Assert.assertEquals(1, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$0", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+ }
+
+ @Test
+ public void testInnerInnerClass() throws NoSuchMethodException, SecurityException {
+ Constructor<?> constructor =
+ InnerClass.InnerInnerClass.class.getDeclaredConstructor(InnerClass.class, float.class);
+ Assert.assertEquals(2, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$1", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+
+ check(constructor.getParameters()[1], "f", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ @Test
+ public void testLocalClass() throws NoSuchMethodException, SecurityException {
+ class Local {
+ }
+ Constructor<?> constructor = Local.class.getDeclaredConstructor(Tests.class);
+ Assert.assertEquals(1, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$0", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+ }
+
+ @Test
+ public void testLocalClassWithCapture() throws NoSuchMethodException, SecurityException {
+ final Object o = new Object();
+ @SuppressWarnings("unused")
+ class Local {
+ Local (int i) {
+ }
+ Object getObject() {
+ return o;
+ }
+ }
+ Constructor<?> constructor = Local.class.getDeclaredConstructor(Tests.class, int.class, Object.class);
+ Assert.assertEquals(3, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$0", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+
+ check(constructor.getParameters()[1], "i", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(constructor.getParameters()[2], "val$o", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ true,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_SYNTHETIC);
+ }
+
+ abstract static class StaticAnonymous {
+ }
+
+ @Test
+ public void testAnonymousWithStaticSuper() throws NoSuchMethodException, SecurityException {
+ StaticAnonymous a = new StaticAnonymous() {};
+ Constructor<?> constructor = a.getClass().getDeclaredConstructor(Tests.class);
+ Assert.assertEquals(1, constructor.getParameters().length);
+ check(constructor.getParameters()[0], "this$0", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+ }
+
+
+ class Context{
+ class InnerWithParam {
+ public InnerWithParam(int i1) {
+ }
+ }
+ }
+
+ @Test
+ public void testAnonymousWithContext() throws NoSuchMethodException, SecurityException {
+ InnerWithParam iwp = new Context().new InnerWithParam(10);
+
+ Constructor<?> constructor = iwp.getClass().getDeclaredConstructor(Context.class, int.class);
+ Assert.assertEquals(2, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$1", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+
+ check(constructor.getParameters()[1], "i1", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test002/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test002/Tests.java
new file mode 100644
index 0000000..7a5f253
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test002/Tests.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test002;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ enum Number {
+ ONE, TWO;
+ }
+
+ @Test
+ public void testEnumValueOf() throws NoSuchMethodException, SecurityException {
+ Method method = Number.class.getDeclaredMethod("valueOf", String.class);
+ Assert.assertEquals(1, method.getParameters().length);
+
+ check(method.getParameters()[0], "name", /* isNamePresent= */ true, /* isImplicit= */ true,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_IMPLICIT);
+ }
+
+ @Test
+ public void testEnumConstructor() throws NoSuchMethodException, SecurityException {
+ Constructor<?> constructor = Number.class.getDeclaredConstructor(String.class, int.class);
+ Assert.assertEquals(2, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "enum$name", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ true, ParameterTestModifier.MODIFIER_SYNTHETIC);
+
+ check(constructor.getParameters()[1], "enum$ordinal", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ true, ParameterTestModifier.MODIFIER_SYNTHETIC);
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test003/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test003/Tests.java
new file mode 100644
index 0000000..57749ed
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test003/Tests.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test003;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+interface I<T> {
+ T get(T t);
+}
+
+class A implements I<Integer> {
+ @Override
+ public Integer get(Integer t) {
+ return t;
+ }
+}
+public class Tests {
+
+ @Test
+ public void testBridge() throws NoSuchMethodException, SecurityException {
+ Method method = A.class.getDeclaredMethod("get", Object.class);
+
+ check(method.getParameters()[0], "t", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ true, ParameterTestModifier.MODIFIER_SYNTHETIC);
+ }
+
+ @Test
+ public void testBridge2() throws NoSuchMethodException, SecurityException {
+ Method method = A.class.getDeclaredMethod("get", Integer.class);
+
+ check(method.getParameters()[0], "t", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test004/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test004/Tests.java
new file mode 100644
index 0000000..0b528bf
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test004/Tests.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test004;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ abstract class InstanceAnonymous {
+ public InstanceAnonymous(int value) {
+ }
+ }
+
+ @Test
+ public void testAnonymousWithInstanceSuper() throws NoSuchMethodException, SecurityException {
+ InstanceAnonymous ia = new InstanceAnonymous(0) {
+ };
+
+ // Could be a constructor with Test.class, int.class
+ Constructor<?> constructor =
+ ia.getClass().getDeclaredConstructor(Tests.class, Tests.class, int.class);
+ Assert.assertEquals(3, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$0", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+
+ // Could be this$1 rather than this$0_1
+ check(constructor.getParameters()[1], "this$0_1", /* isNamePresent= */ true,
+ /* isImplicit= */ true, /* isSynthetic= */ false,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_IMPLICIT);
+
+ // Could be value rather than $anonymous0
+ check(constructor.getParameters()[2], "$anonymous0", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ @Test
+ public void testAnonymousWithInstanceSuperLocal() throws NoSuchMethodException, SecurityException {
+ abstract class InstanceAnonymous {
+ public InstanceAnonymous(int value) {
+ }
+ }
+
+ InstanceAnonymous ia = new InstanceAnonymous(0) {
+ };
+
+ // Could be a constructor with Test.class, int.class
+ Constructor<?> constructor =
+ ia.getClass().getDeclaredConstructor(Tests.class, Tests.class, int.class);
+ Assert.assertEquals(3, constructor.getParameters().length);
+
+ check(constructor.getParameters()[0], "this$0", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ true,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_SYNTHETIC);
+
+ // Could be this$1 rather than this$0_1
+ check(constructor.getParameters()[1], "this$0_1", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ true,
+ ParameterTestModifier.MODIFIER_FINAL | ParameterTestModifier.MODIFIER_SYNTHETIC);
+
+ // Could be value rather than $anonymous0
+ check(constructor.getParameters()[2], "$anonymous0", /* isNamePresent= */ true,
+ /* isImplicit= */ false, /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test005/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test005/Tests.java
new file mode 100644
index 0000000..48d38d3
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test005/Tests.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test005;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ public static int m1(int p1, int p2, int p3) {
+ return p1 + p2 + p3;
+ }
+
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method method = Tests.class.getDeclaredMethod("m1", int.class, int.class, int.class);
+ Assert.assertEquals(3, method.getParameters().length);
+
+ check(method.getParameters()[0], "p1", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(method.getParameters()[1], "p2", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(method.getParameters()[2], "p3", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test006/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test006/Tests.java
new file mode 100644
index 0000000..7e4b5dc
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test006/Tests.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test006;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ private int field = 10;
+
+ public class InnerClass {
+ public int getValue() {
+ return field;
+ }
+ }
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method[] methods = Tests.class.getDeclaredMethods();
+ for (Method method : methods) {
+ if (method.isSynthetic()) {
+ Parameter[] parameters = method.getParameters();
+ Assert.assertEquals(1, parameters.length);
+ check(parameters[0], "arg0", /* isNamePresent= */ false, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+ }
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test007/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test007/Tests.java
new file mode 100644
index 0000000..0f7de69
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test007/Tests.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test007;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ private int field = 0;
+
+ public class InnerClass {
+ public void setValue() {
+ field = 10;
+ }
+ }
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method[] methods = Tests.class.getDeclaredMethods();
+ for (Method method : methods) {
+ if (method.isSynthetic()) {
+ Parameter[] parameters = method.getParameters();
+ Assert.assertEquals(2, parameters.length);
+ check(parameters[0], "arg0", /* isNamePresent= */ false, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ check(parameters[1], "arg1", /* isNamePresent= */ false, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+ }
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test008/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test008/Tests.java
new file mode 100644
index 0000000..c60d42a
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test008/Tests.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test008;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ private int addValue(int i) {
+ return 10 + i;
+ };
+
+ public class InnerClass {
+ public int setValue() {
+ return addValue(10);
+ }
+ }
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method[] methods = Tests.class.getDeclaredMethods();
+ for (Method method : methods) {
+ if (method.isSynthetic()) {
+ Parameter[] parameters = method.getParameters();
+ Assert.assertEquals(2, parameters.length);
+ check(parameters[0], "arg0", /* isNamePresent= */ false, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ check(parameters[1], "arg1", /* isNamePresent= */ false, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+ }
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test009/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test009/Tests.java
new file mode 100644
index 0000000..4327c00
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test009/Tests.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test009;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+class MyBaseClass {
+
+ public void foo(String param1) {
+ }
+
+}
+public class Tests extends MyBaseClass {
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method[] methods = Tests.class.getDeclaredMethods();
+ for (Method method : methods) {
+ if (method.isSynthetic()) {
+ Parameter[] parameters = method.getParameters();
+ Assert.assertEquals(1, parameters.length);
+ check(parameters[0], "param1", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ true, ParameterTestModifier.MODIFIER_SYNTHETIC);
+ }
+ }
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/java8/parameter/test010/Tests.java b/jack-tests/tests/com/android/jack/java8/parameter/test010/Tests.java
new file mode 100644
index 0000000..050e157
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/java8/parameter/test010/Tests.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.java8.parameter.test010;
+
+import com.android.jack.java8.parameter.common.ParameterTestModifier;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Executable;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+
+public class Tests {
+
+ public static void m1(int a, double d, final float f, final long l) {
+ }
+
+ public void m2(final int a, double d, final float f, long l) {
+ }
+
+ @Test
+ public void testStaticMethod() throws NoSuchMethodException, SecurityException {
+ Method method =
+ Tests.class.getDeclaredMethod("m1", int.class, double.class, float.class, long.class);
+ Parameter[] parameters = method.getParameters();
+
+ Assert.assertEquals(4, parameters.length);
+
+ check(parameters[0], "a", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(parameters[1], "d", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(parameters[2], "f", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_FINAL);
+
+ check(parameters[3], "l", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_FINAL);
+ }
+
+ @Test
+ public void testIsntanceMethod() throws NoSuchMethodException, SecurityException {
+ Method method =
+ Tests.class.getDeclaredMethod("m2", int.class, double.class, float.class, long.class);
+ Parameter[] parameters = method.getParameters();
+
+ Assert.assertEquals(4, parameters.length);
+
+ check(parameters[0], "a", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_FINAL);
+
+ check(parameters[1], "d", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+
+ check(parameters[2], "f", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_FINAL);
+
+ check(parameters[3], "l", /* isNamePresent= */ true, /* isImplicit= */ false,
+ /* isSynthetic= */ false, ParameterTestModifier.MODIFIER_NONE);
+ }
+
+ private void check(Parameter parameter, String name, boolean isNamePresent, boolean isImplicit,
+ boolean isSynthetic, int modifier) {
+ Assert.assertEquals(name, parameter.getName());
+ Assert.assertEquals(isNamePresent, parameter.isNamePresent());
+ Assert.assertEquals(isSynthetic, parameter.isSynthetic());
+ Assert.assertEquals(isImplicit, parameter.isImplicit());
+ Assert.assertEquals(modifier, parameter.getModifiers());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/jill/JillTests.java b/jack-tests/tests/com/android/jack/jill/JillTests.java
index edbda2b..4bf05ff 100644
--- a/jack-tests/tests/com/android/jack/jill/JillTests.java
+++ b/jack-tests/tests/com/android/jack/jill/JillTests.java
@@ -17,9 +17,11 @@
package com.android.jack.jill;
import com.android.jack.test.TestsProperties;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.runner.RuntimeRunner;
import com.android.jack.test.toolchain.AbstractTestTools;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackBasedToolchain;
import junit.framework.Assert;
@@ -35,28 +37,39 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test001() throws Exception {
runJillTest("001");
}
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test002() throws Exception {
runJillTest("002");
}
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test003() throws Exception {
runJillTest("003");
}
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test004() throws Exception {
runJillTest("004");
}
+ @Test
+ @Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
+ public void test005() throws Exception {
+ runJillTest("005");
+ }
+
private static void runJillTest(@Nonnull String testNumber) throws Exception {
String jackFolder = getJackFolder(testNumber);
String jasminFolder = getJasminFolder(testNumber);
@@ -77,7 +90,7 @@
jackToolchain.addStaticLibs(jarInput);
jackToolchain.srcToExe(dex, /* zipFile = */ true, testSourceDir);
- List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners(null);
+ List<RuntimeRunner> runnerList = AbstractTestTools.listRuntimeTestRunners();
String[] names = { testClassName };
for (RuntimeRunner runner : runnerList) {
Assert.assertEquals(0,
diff --git a/jack-tests/tests/com/android/jack/jill/test005/jack/Test005.java b/jack-tests/tests/com/android/jack/jill/test005/jack/Test005.java
new file mode 100644
index 0000000..7dcd72a
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/jill/test005/jack/Test005.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.jill.test005.jack;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class Test005 {
+
+ @Test
+ public void test001() {
+ Assert.assertEquals(1, new External1().getValueInt1());
+ Assert.assertEquals(2, new External1().getValueInt2());
+ Assert.assertEquals(3, new External1().getValueInt3());
+ Assert.assertEquals(4, new External1().getValueInt4());
+ Assert.assertEquals(5, new External1().getValueInt5());
+ Assert.assertEquals(6, new External1().getValueInt6());
+ Assert.assertEquals(-2, new External1().getValueIntMinus2());
+ Assert.assertEquals(2L, new External1().getValueLong2());
+ Assert.assertEquals(1L, new External1().getValueLong1());
+ Assert.assertEquals(1L, new External1().getValueLong1Bis());
+ Assert.assertEquals(2L, new External1().getValueLong2());
+ }
+}
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/jill/test005/jasmin/External1.j b/jack-tests/tests/com/android/jack/jill/test005/jasmin/External1.j
new file mode 100644
index 0000000..40ffdf1
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/jill/test005/jasmin/External1.j
@@ -0,0 +1,142 @@
+; Copyright (C) 2017 The Android Open Source Project
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+.class public com/android/jack/jill/test005/jack/External1
+.super java/lang/Object
+
+.method public <init>()V
+ aload_0
+ invokespecial java/lang/Object/<init>()V
+ return
+.end method
+
+.method public getValueInt1()I
+ .limit locals 1
+ .limit stack 2
+ iconst_1
+ dup
+ pop
+ ireturn
+.end method
+
+.method public getValueInt2()I
+ .limit locals 1
+ .limit stack 2
+ iconst_1
+ dup
+ iadd
+ ireturn
+.end method
+
+.method public getValueInt3()I
+ .limit locals 1
+ .limit stack 2
+ iconst_2
+ iconst_3
+ swap
+ pop
+ ireturn
+.end method
+
+.method public getValueIntMinus2()I
+ .limit locals 1
+ .limit stack 4
+ iconst_1
+ iconst_2
+ dup2
+ isub
+ isub
+ isub
+ ireturn
+.end method
+
+.method public getValueInt4()I
+ .limit locals 1
+ .limit stack 4
+ iconst_1
+ iconst_2
+ iconst_3
+ dup_x1
+ pop2
+ iadd
+ ireturn
+.end method
+
+.method public getValueInt5()I
+ .limit locals 1
+ .limit stack 5
+ iconst_1
+ iconst_2
+ iconst_3
+ dup2_x1
+ pop2
+ pop
+ iadd
+ ireturn
+.end method
+
+.method public getValueInt6()I
+ .limit locals 1
+ .limit stack 5
+ lconst_0
+ iconst_4
+ dup_x2
+ pop
+ pop2
+ iconst_2
+ iadd
+ ireturn
+.end method
+
+.method public getValueLong2()J
+ .limit locals 1
+ .limit stack 4
+ lconst_1
+ dup2
+ ladd
+ lreturn
+.end method
+
+.method public getValueLong1()J
+ .limit locals 1
+ .limit stack 4
+ lconst_1
+ dup2
+ pop2
+ lreturn
+.end method
+
+.method public getValueLong1Bis()J
+ .limit locals 1
+ .limit stack 5
+ iconst_2
+ lconst_1
+ dup2_x1
+ pop2
+ pop
+ lreturn
+.end method
+
+.method public getValueLong2()J
+ .limit locals 1
+ .limit stack 4
+ lconst_0
+ lconst_1
+ dup2_x2
+ pop2
+ pop2
+ lconst_1
+ ladd
+ lreturn
+.end method
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/jill/test005/jasmin/jarInput.jar b/jack-tests/tests/com/android/jack/jill/test005/jasmin/jarInput.jar
new file mode 100644
index 0000000..7916c73
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/jill/test005/jasmin/jarInput.jar
Binary files differ
diff --git a/jack-tests/tests/com/android/jack/library/LibraryTests.java b/jack-tests/tests/com/android/jack/library/LibraryTests.java
index 07b9453..330c051 100644
--- a/jack-tests/tests/com/android/jack/library/LibraryTests.java
+++ b/jack-tests/tests/com/android/jack/library/LibraryTests.java
@@ -21,9 +21,6 @@
import com.android.jack.test.toolchain.IToolchain;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.JillBasedToolchain;
-import com.android.sched.util.RunnableHooks;
-import com.android.sched.util.file.FileOrDirectory.ChangePermission;
-import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.InputZipFile;
import com.android.sched.vfs.ReadZipFS;
import com.android.sched.vfs.VFS;
diff --git a/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java b/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java
index 3b0b548..6c76032 100644
--- a/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java
+++ b/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java
@@ -41,6 +41,8 @@
import com.android.jack.test.toolchain.JillBasedToolchain;
import com.android.jack.test.toolchain.Toolchain.SourceLevel;
import com.android.sched.util.TextUtils;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
import junit.framework.Assert;
@@ -72,7 +74,7 @@
public void compare() throws DifferenceFoundException, ComparatorException {
try {
ListingComparator.compare(reference, getListingOfDex(candidate));
- } catch (IOException e) {
+ } catch (IOException | CannotCloseException | CannotReadException e) {
throw new ComparatorException(e);
}
}
@@ -252,7 +254,8 @@
toolchain.addProperty(PreProcessor.FILE.getName(), configFile.getAbsolutePath());
}
- private String getListingOfDex(@Nonnull File dex) throws IOException {
+ private String getListingOfDex(@Nonnull File dex)
+ throws CannotCloseException, CannotReadException {
assert dex.isFile();
StringBuilder sb = new StringBuilder();
for (ClassDef def : new DexBuffer(dex).classDefs()) {
diff --git a/jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java b/jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java
index 8ec6b1f..e28a82c 100644
--- a/jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/defuse/DefUseTests.java
@@ -18,7 +18,6 @@
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.RuntimeTestHelper;
-import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.runtime.RuntimeTest;
import com.android.jack.test.runtime.RuntimeTestInfo;
diff --git a/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/IfWithConstantSimplifierTests.java b/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/IfWithConstantSimplifierTests.java
index fdb0926..5764b2f 100644
--- a/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/IfWithConstantSimplifierTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/IfWithConstantSimplifierTests.java
@@ -34,6 +34,9 @@
@Nonnull
private final RuntimeTestInfo TEST001 = new IfWithConstantSimplifierTestRuntimeInfo("test001");
+ @Nonnull
+ private final RuntimeTestInfo TEST002 = new IfWithConstantSimplifierTestRuntimeInfo("test002");
+
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
@@ -41,9 +44,17 @@
new RuntimeTestHelper(TEST001).compileAndRunTest();
}
+ @Test
+ @Runtime
+ @Category(RuntimeRegressionTest.class)
+ public void test002() throws Exception {
+ new RuntimeTestHelper(TEST002).compileAndRunTest();
+ }
+
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(TEST001);
+ rtTestInfos.add(TEST002);
}
/**
diff --git a/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/test002/TestFuzz.java b/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/test002/TestFuzz.java
new file mode 100644
index 0000000..7c0f261
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/test002/TestFuzz.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.optimizations.ifwithconstantsimplifier.test002;
+
+public class TestFuzz {
+
+ static final int ITERATIONS_COUNT = 10;
+
+ public int mI = 0;
+
+ public void testThenBlockOptimization() {
+ mI = 0;
+ boolean lZ0 = true;
+ for (int i = 0; i < ITERATIONS_COUNT; ++i) {
+ if (false ? false : lZ0) {
+ ++mI;
+ } else {
+ --mI;
+ }
+ }
+ }
+
+ public void testElseBlockOptimization() {
+ mI = 0;
+ boolean lZ0 = false;
+ for (int i = 0; i < ITERATIONS_COUNT; ++i) {
+ if (false ? false : lZ0) {
+ ++mI;
+ } else {
+ --mI;
+ }
+ }
+ }
+
+ public void testThenBlockOptimization2() {
+ mI = 0;
+ for (int i = 0; i < ITERATIONS_COUNT; ++i) {
+ boolean b;
+ if (b = true) {
+ ++mI;
+ } else {
+ --mI;
+ }
+ }
+ }
+
+ public void testElseBlockOptimization2() {
+ mI = 0;
+ for (int i = 0; i < ITERATIONS_COUNT; ++i) {
+ boolean b;
+ if (b = false) {
+ ++mI;
+ } else {
+ --mI;
+ }
+ }
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/test002/Tests.java b/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/test002/Tests.java
new file mode 100644
index 0000000..2a0ac25
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/optimizations/ifwithconstantsimplifier/test002/Tests.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.optimizations.ifwithconstantsimplifier.test002;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class Tests {
+
+ @Test
+ public void testThen() {
+ TestFuzz t = new TestFuzz();
+ t.testThenBlockOptimization();
+ Assert.assertEquals(TestFuzz.ITERATIONS_COUNT, t.mI);
+ }
+
+ @Test
+ public void testElse() {
+ TestFuzz t = new TestFuzz();
+ t.testElseBlockOptimization();
+ Assert.assertEquals(-TestFuzz.ITERATIONS_COUNT, t.mI);
+ }
+
+ @Test
+ public void testThen2() {
+ TestFuzz t = new TestFuzz();
+ t.testThenBlockOptimization2();
+ Assert.assertEquals(TestFuzz.ITERATIONS_COUNT, t.mI);
+ }
+
+ @Test
+ public void testElse2() {
+ TestFuzz t = new TestFuzz();
+ t.testElseBlockOptimization2();
+ Assert.assertEquals(-TestFuzz.ITERATIONS_COUNT, t.mI);
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/optimizations/lambdas/LambdaTests.java b/jack-tests/tests/com/android/jack/optimizations/lambdas/LambdaTests.java
index 53b0461..19b2ec7 100644
--- a/jack-tests/tests/com/android/jack/optimizations/lambdas/LambdaTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/lambdas/LambdaTests.java
@@ -34,6 +34,7 @@
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Collections;
+import java.util.TreeMap;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
@@ -60,7 +61,7 @@
@Nonnull
private static String lambda(@Nonnull String pkg, @Nonnull String sha, @Nonnegative int i) {
- return type(pkg, "-$Lambda$" + i + "$" + sha);
+ return type(pkg, "-$Lambda$" + sha + (i == 0 ? "" : ("$" + i)));
}
@Nonnull
@@ -71,11 +72,27 @@
return names;
}
+ @Nonnull
+ private static String orderedByTypeName(@Nonnull Class... classes) {
+ TreeMap<String, String> name2type = new TreeMap<>();
+ for (Class cls : classes) {
+ name2type.put(cls.name, cls.toString());
+ }
+ StringBuilder builder = new StringBuilder();
+ for (String str : name2type.values()) {
+ builder.append(str);
+ }
+ return builder.toString();
+ }
+
private static class Class {
@Nonnull
+ public final String name;
+ @Nonnull
private final StringBuilder builder = new StringBuilder();
Class(@Nonnull String name, @Nonnull String... interfaces) {
+ this.name = name;
builder.append(name).append("\n");
printImpl(interfaces, " - implements:\n", false);
}
@@ -119,110 +136,109 @@
private static final String SHA_001 = "IKUiHr1YvEGLPsKj1XVCnvkJpxY";
@Nonnull
- private static final String TEST001_NONE = "" +
+ private static final String TEST001_NONE = orderedByTypeName(
new Class(lambda(PKG_001, SHA_001, 0), types(PKG_001, "I0"))
- .methods("<init>()V", "foo()V", "$m$0()V") +
+ .methods("<init>()V", "foo()V", "$m$0()V"),
new Class(lambda(PKG_001, SHA_001, 1), types(PKG_001, "I0"))
- .methods("<init>()V", "foo()V", "$m$0()V") +
+ .methods("<init>()V", "foo()V", "$m$0()V"),
new Class(lambda(PKG_001, SHA_001, 10), types(PKG_001, "TestB"))
.fields("-$f0:Ljava/lang/Object;", "-$f1:Ljava/lang/Object;")
.methods("<init>(Ljava/lang/Object;Ljava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 11), types(PKG_001, "TestB"))
.fields("-$f0:Ljava/lang/Object;", "-$f1:Ljava/lang/Object;")
.methods("<init>(Ljava/lang/Object;Ljava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 12), types(PKG_001, "TestB"))
.fields("-$f0:I", "-$f1:Ljava/lang/Object;")
.methods("<init>(ILjava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 13), types(PKG_001, "TestB"))
.fields("-$f0:I", "-$f1:Ljava/lang/Object;")
.methods("<init>(ILjava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 14), types(PKG_001, "TestB"))
.fields("-$f0:Z", "-$f1:B", "-$f2:C", "-$f3:D", "-$f4:F", "-$f5:I", "-$f6:J", "-$f7:S",
"-$f8:Ljava/lang/Object;")
.methods("<init>(ZBCDFIJSLjava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 15), types(PKG_001, "TestB"))
.fields("-$f0:Z", "-$f1:B", "-$f2:C", "-$f3:D", "-$f4:F", "-$f5:I", "-$f6:J", "-$f7:S",
"-$f8:Ljava/lang/Object;")
.methods("<init>(ZBCDFIJSLjava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 16), types(PKG_001, "TestB"))
.fields("-$f0:Z", "-$f1:B", "-$f2:C", "-$f3:D", "-$f4:F", "-$f5:I", "-$f6:J", "-$f7:S",
"-$f8:Ljava/lang/Object;")
.methods("<init>(ZBCDFIJSLjava/lang/Object;)V",
"foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 2), types(PKG_001, "I0"))
- .methods("<init>()V", "foo()V", "$m$0()V") +
+ .methods("<init>()V", "foo()V", "$m$0()V"),
new Class(lambda(PKG_001, SHA_001, 3), types(PKG_001, "I1"))
- .methods("<init>()V", "bar(I)I", "$m$0(I)I") +
+ .methods("<init>()V", "bar(I)I", "$m$0(I)I"),
new Class(lambda(PKG_001, SHA_001, 4), types(PKG_001, "IA"))
- .methods("<init>()V", "foo()Ljava/lang/Object;", "$m$0()Ljava/lang/Object;") +
+ .methods("<init>()V", "foo()Ljava/lang/Object;", "$m$0()Ljava/lang/Object;"),
new Class(lambda(PKG_001, SHA_001, 5), types(PKG_001, "IA"))
- .methods("<init>()V", "foo()Ljava/lang/Object;", "$m$0()Ljava/lang/Object;") +
+ .methods("<init>()V", "foo()Ljava/lang/Object;", "$m$0()Ljava/lang/Object;"),
new Class(lambda(PKG_001, SHA_001, 6), types(PKG_001, "IA"))
- .methods("<init>()V", "foo()Ljava/lang/Object;", "$m$0()Ljava/lang/Object;") +
+ .methods("<init>()V", "foo()Ljava/lang/Object;", "$m$0()Ljava/lang/Object;"),
new Class(lambda(PKG_001, SHA_001, 7), types(PKG_001, "IB"))
.methods("<init>()V", "foo()Ljava/lang/Object;", "foo()Ljava/lang/Integer;",
- "$m$0()Ljava/lang/Integer;", "$m$1()Ljava/lang/Object;") +
+ "$m$0()Ljava/lang/Integer;", "$m$1()Ljava/lang/Object;"),
new Class(lambda(PKG_001, SHA_001, 8), types(PKG_001, "TestB"))
.fields("-$f0:Ljava/lang/Object;")
.methods("<init>(Ljava/lang/Object;)V", "foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 9), types(PKG_001, "TestB"))
.fields("-$f0:Ljava/lang/Object;")
.methods("<init>(Ljava/lang/Object;)V", "foo(Ljava/lang/String;)Ljava/lang/String;",
- "$m$0(Ljava/lang/String;)Ljava/lang/String;") +
- "";
+ "$m$0(Ljava/lang/String;)Ljava/lang/String;"));
@Nonnull
- private static final String TEST001_PACKAGE = "" +
+ private static final String TEST001_PACKAGE = orderedByTypeName(
new Class(lambda(PKG_001, SHA_001, 0), types(PKG_001, "I0"))
.fields("$id:B")
- .methods("<init>(B)V", "$m$0()V", "$m$1()V", "$m$2()V", "foo()V") +
+ .methods("<init>(B)V", "$m$0()V", "$m$1()V", "$m$2()V", "foo()V"),
new Class(lambda(PKG_001, SHA_001, 1), types(PKG_001, "I1"))
- .methods("<init>()V", "$m$0(I)I", "bar(I)I") +
+ .methods("<init>()V", "$m$0(I)I", "bar(I)I"),
new Class(lambda(PKG_001, SHA_001, 2), types(PKG_001, "IA"))
.fields("$id:B")
.methods("<init>(B)V",
"$m$0()Ljava/lang/Object;",
"$m$1()Ljava/lang/Object;",
"$m$2()Ljava/lang/Object;",
- "foo()Ljava/lang/Object;") +
+ "foo()Ljava/lang/Object;"),
new Class(lambda(PKG_001, SHA_001, 3), types(PKG_001, "IB"))
.methods("<init>()V",
"$m$0()Ljava/lang/Integer;",
"$m$1()Ljava/lang/Object;",
"foo()Ljava/lang/Integer;",
- "foo()Ljava/lang/Object;") +
+ "foo()Ljava/lang/Object;"),
new Class(lambda(PKG_001, SHA_001, 4), types(PKG_001, "TestB"))
.fields("-$f0:Ljava/lang/Object;", "$id:B")
.methods("<init>(BLjava/lang/Object;)V",
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;") +
+ "foo(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 5), types(PKG_001, "TestB"))
.fields("-$f0:Ljava/lang/Object;", "-$f1:Ljava/lang/Object;", "$id:B")
.methods("<init>(BLjava/lang/Object;Ljava/lang/Object;)V",
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;") +
+ "foo(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 6), types(PKG_001, "TestB"))
.fields("-$f0:I", "-$f1:Ljava/lang/Object;", "$id:B")
.methods("<init>(BILjava/lang/Object;)V",
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;") +
+ "foo(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 7), types(PKG_001, "TestB"))
.fields("-$f0:Z", "-$f1:B", "-$f2:C", "-$f3:D", "-$f4:F",
"-$f5:I", "-$f6:J", "-$f7:S", "-$f8:Ljava/lang/Object;", "$id:B")
@@ -230,10 +246,10 @@
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
"$m$2(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;");
+ "foo(Ljava/lang/String;)Ljava/lang/String;"));
@Nonnull
- private static final String TEST001_PACKAGE_INTERFACE = "" +
+ private static final String TEST001_PACKAGE_INTERFACE = orderedByTypeName(
new Class(lambda(PKG_001, SHA_001, 0), types(PKG_001, "I0", "I1", "IA", "IB"))
.fields("$id:B")
.methods("<init>(B)V",
@@ -249,25 +265,25 @@
"bar(I)I",
"foo()Ljava/lang/Integer;",
"foo()Ljava/lang/Object;",
- "foo()V") +
+ "foo()V"),
new Class(lambda(PKG_001, SHA_001, 1), types(PKG_001, "TestB"))
.fields("$id:B", "-$f0:Ljava/lang/Object;")
.methods("<init>(BLjava/lang/Object;)V",
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;") +
+ "foo(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 2), types(PKG_001, "TestB"))
.fields("$id:B", "-$f0:Ljava/lang/Object;", "-$f1:Ljava/lang/Object;")
.methods("<init>(BLjava/lang/Object;Ljava/lang/Object;)V",
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;") +
+ "foo(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 3), types(PKG_001, "TestB"))
.fields("$id:B", "-$f0:I", "-$f1:Ljava/lang/Object;")
.methods("<init>(BILjava/lang/Object;)V",
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;") +
+ "foo(Ljava/lang/String;)Ljava/lang/String;"),
new Class(lambda(PKG_001, SHA_001, 4), types(PKG_001, "TestB"))
.fields("$id:B", "-$f0:Z", "-$f1:B", "-$f2:C", "-$f3:D",
"-$f4:F", "-$f5:I", "-$f6:J", "-$f7:S", "-$f8:Ljava/lang/Object;")
@@ -275,7 +291,7 @@
"$m$0(Ljava/lang/String;)Ljava/lang/String;",
"$m$1(Ljava/lang/String;)Ljava/lang/String;",
"$m$2(Ljava/lang/String;)Ljava/lang/String;",
- "foo(Ljava/lang/String;)Ljava/lang/String;");
+ "foo(Ljava/lang/String;)Ljava/lang/String;"));
@Test
@Runtime
@@ -301,25 +317,24 @@
private static final String SHA_002 = "rK0qQUOvfPrsTJWpyc2f5mlYYJ8";
@Nonnull
- private static final String TEST002_NONE = "" +
+ private static final String TEST002_NONE = orderedByTypeName(
new Class(lambda(PKG_002, SHA_002, 0), types(PKG_002, "I0"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_002, SHA_002, 1), types(PKG_002, "I1"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_002, SHA_002, 2), types(PKG_002, "I2"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_002, SHA_002, 3), types(PKG_002, "I3"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_002, SHA_002, 4), types(PKG_002, "I4"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_002, SHA_002, 5), types(PKG_002, "I5"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_002, SHA_002, 6), types(PKG_002, "I6"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
- "";
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"));
@Nonnull
- private static final String TEST002_PACKAGE_INTERFACE = "" +
+ private static final String TEST002_PACKAGE_INTERFACE = orderedByTypeName(
new Class(lambda(PKG_002, SHA_002, 0),
types(PKG_002, "I0", "I1", "I2", "I3", "I4", "I5", "I6"))
.fields("$id:B")
@@ -331,7 +346,7 @@
"$m$4()Ljava/lang/String;",
"$m$5()Ljava/lang/String;",
"$m$6()Ljava/lang/String;",
- "foo()Ljava/lang/String;");
+ "foo()Ljava/lang/String;"));
@Test
@Runtime
@@ -363,24 +378,23 @@
private static final String SHA_003 = "ONjwHPCPJTN6WB4tZ9kgaFMFflk";
@Nonnull
- private static final String TEST003_NONE = "" +
+ private static final String TEST003_NONE = orderedByTypeName(
new Class(lambda(PKG_003, SHA_003, 0), types(PKG_003, "I0"))
- .methods("<init>()V", "$m$0()Ljava/lang/Object;", "foo()Ljava/lang/Object;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/Object;", "foo()Ljava/lang/Object;"),
new Class(lambda(PKG_003, SHA_003, 1), types(PKG_003, "I1"))
- .methods("<init>()V", "$m$0()Ljava/lang/Object;", "foo()Ljava/lang/Object;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/Object;", "foo()Ljava/lang/Object;"),
new Class(lambda(PKG_003, SHA_003, 2), types(PKG_003, "I3"))
- .methods("<init>()V", "$m$0()Ljava/lang/Object;", "foo()Ljava/lang/Object;") +
- "";
+ .methods("<init>()V", "$m$0()Ljava/lang/Object;", "foo()Ljava/lang/Object;"));
@Nonnull
private static final String TEST003_PACKAGE = TEST003_NONE;
@Nonnull
- private static final String TEST003_PACKAGE_INTERFACE = "" +
+ private static final String TEST003_PACKAGE_INTERFACE = orderedByTypeName(
new Class(lambda(PKG_003, SHA_003, 0), types(PKG_003, "I0", "I1", "I3"))
.fields("$id:B")
.methods("<init>(B)V", "$m$0()Ljava/lang/Object;",
- "$m$1()Ljava/lang/Object;", "$m$2()Ljava/lang/Object;", "foo()Ljava/lang/Object;");
+ "$m$1()Ljava/lang/Object;", "$m$2()Ljava/lang/Object;", "foo()Ljava/lang/Object;"));
@Test
@Runtime
@@ -406,20 +420,20 @@
private static final String SHA_004 = "kE8tIAUzNtiGWJ6ulIU0a1IEtL4";
@Nonnull
- private static final String TEST004_PACKAGE = "" +
+ private static final String TEST004_PACKAGE = orderedByTypeName(
new Class(lambda(PKG_004, SHA_004, 0), types(PKG_004, "I0"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 1), types(PKG_004, "I0", "MarkerA"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 2), types(PKG_004, "I0", "MarkerA", "MarkerB"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 3), types(PKG_004, "I0", "MarkerB"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 4), types(PKG_004, "I1", "MarkerA", "MarkerB"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;");
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "foo()Ljava/lang/String;"));
@Nonnull
- private static final String TEST004_LAMBDA_MERGE = "" +
+ private static final String TEST004_LAMBDA_MERGE = orderedByTypeName(
new Class(lambda(PKG_004, SHA_004, 0), types(PKG_004, "I0", "I1", "MarkerA", "MarkerB"))
.fields("$id:B")
.methods("<init>(B)V",
@@ -428,10 +442,10 @@
"$m$2()Ljava/lang/String;",
"$m$3()Ljava/lang/String;",
"$m$4()Ljava/lang/String;",
- "foo()Ljava/lang/String;");
+ "foo()Ljava/lang/String;"));
@Nonnull
- private static final String TEST004_PACKAGE_INTERFACE_STATELESS = "" +
+ private static final String TEST004_PACKAGE_INTERFACE_STATELESS = orderedByTypeName(
new Class(lambda(PKG_004, SHA_004, 0), types(PKG_004, "I0", "I1", "MarkerA", "MarkerB"))
.fields("$id:B",
"$INST$0:" + lambda(PKG_004, SHA_004, 0),
@@ -445,35 +459,35 @@
"$m$2()Ljava/lang/String;",
"$m$3()Ljava/lang/String;",
"$m$4()Ljava/lang/String;",
- "foo()Ljava/lang/String;");
+ "foo()Ljava/lang/String;"));
@Nonnull
- private static final String TEST004_PACKAGE_STATELESS = "" +
+ private static final String TEST004_PACKAGE_STATELESS = orderedByTypeName(
new Class(lambda(PKG_004, SHA_004, 0), types(PKG_004, "I0"))
.fields("$INST$0:" + lambda(PKG_004, SHA_004, 0))
.methods("<clinit>()V", "<init>()V",
"$m$0()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 1), types(PKG_004, "I0", "MarkerA"))
.fields("$INST$0:" + lambda(PKG_004, SHA_004, 1))
.methods("<clinit>()V", "<init>()V",
"$m$0()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 2), types(PKG_004, "I0", "MarkerA", "MarkerB"))
.fields("$INST$0:" + lambda(PKG_004, SHA_004, 2))
.methods("<clinit>()V", "<init>()V",
"$m$0()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 3), types(PKG_004, "I0", "MarkerB"))
.fields("$INST$0:" + lambda(PKG_004, SHA_004, 3))
.methods("<clinit>()V", "<init>()V",
"$m$0()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_004, SHA_004, 4), types(PKG_004, "I1", "MarkerA", "MarkerB"))
.fields("$INST$0:" + lambda(PKG_004, SHA_004, 4))
.methods("<clinit>()V", "<init>()V",
"$m$0()Ljava/lang/String;",
- "foo()Ljava/lang/String;");
+ "foo()Ljava/lang/String;"));
@Test
@Runtime
@@ -503,17 +517,17 @@
private static final String SHA_005 = "mEUip-rZCi8VUKLKTaQF6NNk0aM";
@Nonnull
- private static final String TEST005_PACKAGE = "" +
+ private static final String TEST005_PACKAGE = orderedByTypeName(
new Class(lambda(PKG_005, SHA_005, 0), types(PKG_005, "I0"))
.fields("$id:B")
.methods("<init>(B)V",
"$m$0()Ljava/lang/String;",
"$m$1()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_005, SHA_005, 1), types(PKG_005, "I1"))
.methods("<init>()V",
"$m$0()Ljava/lang/String;",
- "bar()Ljava/lang/String;") +
+ "bar()Ljava/lang/String;"),
new Class(lambda(PKG_005, SHA_005, 2), types(PKG_005, "I0"))
.fields("$id:B", "-$f0:Ljava/lang/Object;")
.methods("<init>(BLjava/lang/Object;)V",
@@ -522,16 +536,16 @@
"$m$2()Ljava/lang/String;",
"$m$3()Ljava/lang/String;",
"$m$4()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_005, SHA_005, 3), types(PKG_005, "I1"))
.fields("$id:B", "-$f0:Ljava/lang/Object;")
.methods("<init>(BLjava/lang/Object;)V",
"$m$0()Ljava/lang/String;",
"$m$1()Ljava/lang/String;",
- "bar()Ljava/lang/String;");
+ "bar()Ljava/lang/String;"));
@Nonnull
- private static final String TEST005_PACKAGE_INTERFACE = "" +
+ private static final String TEST005_PACKAGE_INTERFACE = orderedByTypeName(
new Class(lambda(PKG_005, SHA_005, 0), types(PKG_005, "I0", "I1"))
.fields("$id:B")
.methods("<init>(B)V",
@@ -539,7 +553,7 @@
"$m$1()Ljava/lang/String;",
"$m$2()Ljava/lang/String;",
"bar()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_005, SHA_005, 1), types(PKG_005, "I0", "I1"))
.fields("$id:B", "-$f0:Ljava/lang/Object;")
.methods("<init>(BLjava/lang/Object;)V",
@@ -551,10 +565,10 @@
"$m$5()Ljava/lang/String;",
"$m$6()Ljava/lang/String;",
"bar()Ljava/lang/String;",
- "foo()Ljava/lang/String;");
+ "foo()Ljava/lang/String;"));
@Nonnull
- private static final String TEST005_PACKAGE_INTERFACE_STATELESS = "" +
+ private static final String TEST005_PACKAGE_INTERFACE_STATELESS = orderedByTypeName(
new Class(lambda(PKG_005, SHA_005, 0), types(PKG_005, "I0", "I1"))
.fields("$id:B",
"$INST$0:" + lambda(PKG_005, SHA_005, 0),
@@ -565,7 +579,7 @@
"$m$1()Ljava/lang/String;",
"$m$2()Ljava/lang/String;",
"bar()Ljava/lang/String;",
- "foo()Ljava/lang/String;") +
+ "foo()Ljava/lang/String;"),
new Class(lambda(PKG_005, SHA_005, 1), types(PKG_005, "I0", "I1"))
.fields("$id:B", "-$f0:Ljava/lang/Object;")
.methods("<init>(BLjava/lang/Object;)V",
@@ -577,7 +591,7 @@
"$m$5()Ljava/lang/String;",
"$m$6()Ljava/lang/String;",
"bar()Ljava/lang/String;",
- "foo()Ljava/lang/String;");
+ "foo()Ljava/lang/String;"));
@Test
@Runtime
@@ -605,47 +619,44 @@
private static final String SHA_006_B = "N-kUn0qIgGhcb5JJeaFqgDggm3E";
@Nonnull
- private static final String TEST006_NONE = "" +
+ private static final String TEST006_NONE = orderedByTypeName(
new Class(lambda(PKG_006, SHA_006_A, 0), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"),
new Class(lambda(PKG_006, SHA_006_A, 1), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"),
new Class(lambda(PKG_006, SHA_006_A, 2), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"),
new Class(lambda(PKG_006, SHA_006_A, 3), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
- new Class(lambda(PKG_006, SHA_006_B, 4), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
- new Class(lambda(PKG_006, SHA_006_B, 5), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
- new Class(lambda(PKG_006, SHA_006_B, 6), types(PKG_006, "Producer"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;") +
- "";
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"),
+ new Class(lambda(PKG_006, SHA_006_B, 0), types(PKG_006, "Producer"))
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"),
+ new Class(lambda(PKG_006, SHA_006_B, 1), types(PKG_006, "Producer"))
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"),
+ new Class(lambda(PKG_006, SHA_006_B, 2), types(PKG_006, "Producer"))
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "run()Ljava/lang/String;"));
@Nonnull
- private static final String TEST006_TYPE = "" +
+ private static final String TEST006_TYPE = orderedByTypeName(
new Class(lambda(PKG_006, SHA_006_A, 0), types(PKG_006, "Producer"))
.fields("$id:B")
.methods("<init>(B)V", "$m$0()Ljava/lang/String;", "$m$1()Ljava/lang/String;",
- "$m$2()Ljava/lang/String;", "$m$3()Ljava/lang/String;", "run()Ljava/lang/String;") +
- new Class(lambda(PKG_006, SHA_006_B, 1), types(PKG_006, "Producer"))
+ "$m$2()Ljava/lang/String;", "$m$3()Ljava/lang/String;", "run()Ljava/lang/String;"),
+ new Class(lambda(PKG_006, SHA_006_B, 0), types(PKG_006, "Producer"))
.fields("$id:B")
.methods("<init>(B)V", "$m$0()Ljava/lang/String;", "$m$1()Ljava/lang/String;",
- "$m$2()Ljava/lang/String;", "run()Ljava/lang/String;") +
- "";
+ "$m$2()Ljava/lang/String;", "run()Ljava/lang/String;"));
@Nonnull
private static final String SHA_006_ALL = "aRztprv3kbtT1k5EHkFo2yXbFfg";
@Nonnull
- private static final String TEST006_PACKAGE = "" +
+ private static final String TEST006_PACKAGE = orderedByTypeName(
new Class(lambda(PKG_006, SHA_006_ALL, 0), types(PKG_006, "Producer"))
.fields("$id:B")
.methods("<init>(B)V", "$m$0()Ljava/lang/String;", "$m$1()Ljava/lang/String;",
"$m$2()Ljava/lang/String;", "$m$3()Ljava/lang/String;",
"$m$4()Ljava/lang/String;", "$m$5()Ljava/lang/String;",
- "$m$6()Ljava/lang/String;", "run()Ljava/lang/String;") +
- "";
+ "$m$6()Ljava/lang/String;", "run()Ljava/lang/String;"));
@Test
@Runtime
@@ -671,25 +682,23 @@
private static final String SHA_007 = "VIf7bh4a9R2eWK07TARcQzoADH4";
@Nonnull
- private static final String TEST007_DEFAULT = "" +
+ private static final String TEST007_DEFAULT = orderedByTypeName(
new Class(lambda(PKG_007, SHA_007, 0), types(PKG_007, "Ic", "Ia", "Ib"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;"),
new Class(lambda(PKG_007, SHA_007, 1), types(PKG_007, "Ic", "Iaa"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;"),
new Class(lambda(PKG_007, SHA_007, 2), types(PKG_007, "Ic", "Ib"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;") +
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;"),
new Class(lambda(PKG_007, SHA_007, 3), types(PKG_007, "Ic", "Ib", "Ia"))
- .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;") +
- "";
+ .methods("<init>()V", "$m$0()Ljava/lang/String;", "m()Ljava/lang/String;"));
@Nonnull
- private static final String TEST007_MERGE_INTERFACES = "" +
+ private static final String TEST007_MERGE_INTERFACES = orderedByTypeName(
new Class(lambda(PKG_007, SHA_007, 0), types(PKG_007, "Ia", "Iaa", "Ib", "Ic"))
.fields("$id:B")
.methods("<init>(B)V", "m()Ljava/lang/String;",
"$m$0()Ljava/lang/String;", "$m$1()Ljava/lang/String;",
- "$m$2()Ljava/lang/String;", "$m$3()Ljava/lang/String;") +
- "";
+ "$m$2()Ljava/lang/String;", "$m$3()Ljava/lang/String;"));
@Test
diff --git a/jack-tests/tests/com/android/jack/optimizations/modifiers/ModifiersTighteningTests.java b/jack-tests/tests/com/android/jack/optimizations/modifiers/ModifiersTighteningTests.java
index 0281d32..bbe4531 100644
--- a/jack-tests/tests/com/android/jack/optimizations/modifiers/ModifiersTighteningTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/modifiers/ModifiersTighteningTests.java
@@ -26,6 +26,7 @@
import com.android.jack.test.dex.DexTypeMethodsValidator;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JillBasedToolchain;
import org.junit.Test;
@@ -140,13 +141,7 @@
mBase.update("g(Ljava/lang/String;)Ljava/util/AbstractList;", isFinal);
mBase.update("g(Ljava/lang/String;)Ljava/util/ArrayList;", isFinal);
- // NOTE: the legacy compiler create this method in 'D2' as well,
- // thus this one is not marked as final in 'D1'.
- if (!usingLegacyCompiler()) {
- mD1.update("foo()Ljava/lang/Object;", isFinal);
- } else {
- mD2.insert("foo()Ljava/lang/Object;", isFinal);
- }
+ mD2.insert("foo()Ljava/lang/Object;", isFinal);
mD2.update("bar()Ljava/lang/Object;", isFinal);
mD2.update("foo()Lcom/android/jack/optimizations/modifiers/test002/jack/Base;", isFinal);
@@ -159,7 +154,7 @@
@Test
@Runtime
- @KnownIssue(candidate = JillBasedToolchain.class)
+ @KnownIssue(candidate = {JillBasedToolchain.class, IncrementalToolchain.class})
public void test003() throws Exception {
String testPackage = "com.android.jack.optimizations.modifiers.test003";
diff --git a/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java b/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java
index ac73bc9..d3da55f 100644
--- a/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/usedef/UseDefTests.java
@@ -16,30 +16,92 @@
package com.android.jack.optimizations.usedef;
+import org.jf.dexlib.CodeItem;
+import org.jf.dexlib.DexFile;
+import org.jf.dexlib.Code.Instruction;
+import org.jf.dexlib.Code.Opcode;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import java.io.File;
+
+import javax.annotation.Nonnull;
+
+import com.android.jack.TestTools;
import com.android.jack.test.category.RuntimeRegressionTest;
+import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.Runtime;
import com.android.jack.test.runtime.RuntimeTest;
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.test.toolchain.AbstractTestTools;
+import junit.framework.Assert;
+
public class UseDefTests extends RuntimeTest {
private RuntimeTestInfo TEST001 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.optimizations.usedef.test001"),
"com.android.jack.optimizations.usedef.test001.dx.Tests");
+ private RuntimeTestInfo TEST002 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.optimizations.usedef.test002"),
+ "com.android.jack.optimizations.usedef.test002.Tests").setSrcDirName("");
+
+ private RuntimeTestInfo TEST003 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.optimizations.usedef.test003"),
+ "com.android.jack.optimizations.usedef.test003.Tests").setSrcDirName("")
+ .addFileChecker(new FileChecker() {
+
+ @Override
+ public void check(@Nonnull File file) throws Exception {
+ DexFile dexFile = new DexFile(file);
+ CodeItem ci = TestTools.getEncodedMethod(dexFile,
+ "Lcom/android/jack/optimizations/usedef/test003/TestClass;",
+ "callAndReturnConstLong", "()J").codeItem;
+ // Checks that we find the following instructions in the exact order.
+ Opcode[] expectedOpcodes =
+ new Opcode[] {Opcode.INVOKE_STATIC, Opcode.CONST_WIDE_16, Opcode.RETURN_WIDE};
+ Instruction[] instructions = ci.getInstructions();
+ Assert.assertEquals(expectedOpcodes.length, instructions.length);
+ for (int i = 0; i < expectedOpcodes.length; ++i) {
+ Assert.assertEquals("Unexpected instruction at index " + i, expectedOpcodes[i],
+ instructions[i].opcode);
+ }
+ }
+ });
+
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test001() throws Exception {
- new RuntimeTestHelper(TEST001).compileAndRunTest();
+ runUseDefTest(TEST001);
+ }
+
+ @Test
+ @Runtime
+ @Category(RuntimeRegressionTest.class)
+ public void test002() throws Exception {
+ runUseDefTest(TEST002);
+ }
+
+ @Test
+ @Runtime
+ @Category(RuntimeRegressionTest.class)
+ public void test003() throws Exception {
+ runUseDefTest(TEST003);
+ }
+
+ private static void runUseDefTest(@Nonnull RuntimeTestInfo testInfo) throws Exception {
+ new RuntimeTestHelper(testInfo)
+ .addProperty("jack.optimization.use-def-simplifier", Boolean.toString(true))
+ .addProperty("jack.optimization.use-def-cst-simplifier", Boolean.toString(true))
+ .compileAndRunTest();
}
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(TEST001);
+ rtTestInfos.add(TEST002);
+ rtTestInfos.add(TEST003);
}
}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java b/jack-tests/tests/com/android/jack/optimizations/usedef/test002/TestClass.java
similarity index 76%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
copy to jack-tests/tests/com/android/jack/optimizations/usedef/test002/TestClass.java
index 8c344dd..182e392 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
+++ b/jack-tests/tests/com/android/jack/optimizations/usedef/test002/TestClass.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.optimizations.usedef.test002;
-public class ClInitWithVariableInit {
+public class TestClass {
+ int field;
- static {
- int lv = 5;
+ public void method() {
}
}
diff --git a/jack-tests/tests/com/android/jack/optimizations/usedef/test002/Tests.java b/jack-tests/tests/com/android/jack/optimizations/usedef/test002/Tests.java
new file mode 100644
index 0000000..cf6baba
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/optimizations/usedef/test002/Tests.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.optimizations.usedef.test002;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class Tests {
+
+ @Test
+ public void testNullFieldRead() {
+ try {
+ TestClass o = null;
+ int i = o.field;
+ Assert.fail(Integer.toString(i));
+ } catch (NullPointerException expected) {
+ // expected exception
+ }
+ }
+
+ @Test
+ public void testNullFieldWrite() {
+ try {
+ TestClass o = null;
+ o.field = 1;
+ Assert.fail();
+ } catch (NullPointerException expected) {
+ // expected exception
+ }
+ }
+
+ @Test
+ public void testNullArrayRead() {
+ try {
+ int[] arr = null;
+ int i = arr[0];
+ Assert.fail(Integer.toString(i));
+ } catch (NullPointerException expected) {
+ // expected exception
+ }
+ }
+
+ @Test
+ public void testNullArrayWrite() {
+ try {
+ int[] arr = null;
+ arr[0] = 1;
+ Assert.fail();
+ } catch (NullPointerException expected) {
+ // expected exception
+ }
+ }
+
+ @Test
+ public void testNullMethodCall() {
+ try {
+ TestClass o = null;
+ o.method();
+ Assert.fail();
+ } catch (NullPointerException expected) {
+ // expected exception
+ }
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/optimizations/usedef/test003/TestClass.java b/jack-tests/tests/com/android/jack/optimizations/usedef/test003/TestClass.java
new file mode 100644
index 0000000..1271b9f
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/optimizations/usedef/test003/TestClass.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.optimizations.usedef.test003;
+
+public class TestClass {
+ public static long callAndReturnConstLong() {
+ emptyMethod();
+ // Do NOT put '0L' below, otherwise we do not test the pattern exposing the bug that this
+ // regression test has been written for.
+ // Indeed, using int '0' forces Jack to generate an explicit cast (int to long) in the IR.
+ // The result of this cast will be stored in an intermediate synthetic variable when moving to
+ // three-address-code form. This variable will eventually be optimized away by our use/def
+ // optimizations.
+ return 0;
+ }
+
+ private static void emptyMethod() {
+ }
+}
diff --git a/sched/tests/com/android/sched/util/file/AllTests.java b/jack-tests/tests/com/android/jack/optimizations/usedef/test003/Tests.java
similarity index 65%
copy from sched/tests/com/android/sched/util/file/AllTests.java
copy to jack-tests/tests/com/android/jack/optimizations/usedef/test003/Tests.java
index 1f2ce79..45ce108 100644
--- a/sched/tests/com/android/sched/util/file/AllTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/usedef/test003/Tests.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,13 +14,16 @@
* limitations under the License.
*/
-package com.android.sched.util.file;
+package com.android.jack.optimizations.usedef.test003;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
+import junit.framework.Assert;
-@RunWith(Suite.class)
-@SuiteClasses(value = {FileUtilsTest.class})
-public class AllTests {
-}
\ No newline at end of file
+import org.junit.Test;
+
+public class Tests {
+
+ @Test
+ public void testConstants() {
+ Assert.assertEquals(0L, TestClass.callAndReturnConstLong());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/optimizations/valuepropagation/ValuePropagationTests.java b/jack-tests/tests/com/android/jack/optimizations/valuepropagation/ValuePropagationTests.java
index 847c139..2ea4490 100644
--- a/jack-tests/tests/com/android/jack/optimizations/valuepropagation/ValuePropagationTests.java
+++ b/jack-tests/tests/com/android/jack/optimizations/valuepropagation/ValuePropagationTests.java
@@ -22,7 +22,9 @@
import com.android.jack.test.dex.DexOutputBasedTest;
import com.android.jack.test.dex.DexTypeMethodsValidator;
import com.android.jack.test.dex.DexTypeMissingMethodValidator;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import org.junit.Test;
@@ -59,6 +61,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test001() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test001";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test001/jack/A;";
@@ -80,6 +83,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test002() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test002";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test002/jack/A;";
@@ -108,6 +112,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test003() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test003";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test003/jack/A;";
@@ -146,6 +151,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test004() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test004";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test004/jack/A;";
@@ -171,6 +177,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test005() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test005";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test005/jack/A;";
@@ -192,6 +199,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test101() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test101";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test101/jack/A;";
@@ -216,6 +224,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test102() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test102";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test102/jack/A;";
@@ -263,6 +272,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test103() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test103";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test103/jack/A;";
@@ -290,6 +300,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test104() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test104";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test104/jack/A;";
@@ -320,6 +331,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test105() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test105";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test105/jack/A;";
@@ -361,6 +373,7 @@
@Test
@Runtime
+ @KnownIssue(candidate=IncrementalToolchain.class)
public void test106() throws Exception {
String test = "com.android.jack.optimizations.valuepropagation.test106";
String aType = "Lcom/android/jack/optimizations/valuepropagation/test106/jack/A;";
diff --git a/jack-tests/tests/com/android/jack/resource/ResourceTests.java b/jack-tests/tests/com/android/jack/resource/ResourceTests.java
index e61ab6e..e740159 100644
--- a/jack-tests/tests/com/android/jack/resource/ResourceTests.java
+++ b/jack-tests/tests/com/android/jack/resource/ResourceTests.java
@@ -20,10 +20,8 @@
import com.android.jack.library.FileTypeDoesNotExistException;
import com.android.jack.library.InputJackLibrary;
import com.android.jack.shrob.obfuscation.NameProviderFactory;
-import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.IToolchain;
-import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackApiToolchainBase;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.JillApiToolchainBase;
@@ -206,7 +204,6 @@
}
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void testJackArchiveToJackDir() throws Exception {
// compile source file to a Jack archive and add resources
File jackAr = createJackArchiveWithResources();
@@ -234,7 +231,6 @@
}
@Test
- @KnownIssue(candidate=IncrementalToolchain.class)
public void testJackDirToJackDir() throws Exception {
// compile source file to a Jack dir
File jackFolder = AbstractTestTools.createTempDir();
diff --git a/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java b/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
index a5dab7b..7f6d639 100644
--- a/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ObfuscationWithoutMappingTests.java
@@ -130,6 +130,38 @@
super.test15_001();
}
+ @Test
+ @Runtime
+ public void test49_001() throws Exception {
+ runTest("049", "001", "");
+ }
+
+ @Test
+ @Runtime
+ public void test51() throws Exception {
+ String testPackageName = "com.android.jack.shrob.test051";
+ File testFolder = AbstractTestTools.getTestRootDir(testPackageName);
+ File proguardFlagsFile = new File(testFolder, "proguard.flags001");
+ ByteArrayOutputStream errOut = new ByteArrayOutputStream();
+
+ try {
+ List<Class<? extends IToolchain>> excludeList = new ArrayList<Class<? extends IToolchain>>(1);
+ excludeList.add(JackCliToolchain.class);
+ IToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, excludeList);
+ toolchain.setErrorStream(errOut);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .addProguardFlags(proguardFlagsFile).srcToExe(AbstractTestTools.createTempDir(),
+ /* zipFile = */false, AbstractTestTools.getTestRootDir(testPackageName + ".jack"));
+ Assert.fail();
+ } catch (JackAbortException jae) {
+ Assert.assertTrue(jae.getCause() instanceof MappingContextException);
+ String errString = errOut.toString();
+ Assert.assertTrue(errString.contains("could not be renamed to " +
+ "'com.android.jack.shrob.test051.jack.C' since the name was already used"));
+ }
+ }
+
/**
* Test Obfuscation when a whole package is missing from the classpath.
*/
@@ -235,6 +267,11 @@
runTest("056", "001", "");
}
+ @Test
+ public void test58_001() throws Exception {
+ runTest("058", "001", "");
+ }
+
@Nonnull
private static File shrobTestsDir =
AbstractTestTools.getTestRootDir("com.android.jack.shrob");
diff --git a/jack-tests/tests/com/android/jack/shrob/ShrinkMultiDexTests.java b/jack-tests/tests/com/android/jack/shrob/ShrinkMultiDexTests.java
index 6936e92..8ea98c4 100644
--- a/jack-tests/tests/com/android/jack/shrob/ShrinkMultiDexTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ShrinkMultiDexTests.java
@@ -25,9 +25,11 @@
import com.android.jack.test.category.SlowTests;
import com.android.jack.test.comparator.ComparatorMapping;
import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
+import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.DummyToolchain;
import com.android.jack.test.toolchain.IToolchain;
+import com.android.jack.test.toolchain.IncrementalToolchain;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.TwoStepsToolchain;
@@ -151,6 +153,12 @@
super.test1_016();
}
+ @Override
+ @KnownIssue(candidate=IncrementalToolchain.class)
+ public void test5_005() throws Exception {
+ super.test5_005();
+ }
+
@Test
@Override
public void test8_001() throws Exception {
@@ -166,6 +174,12 @@
super.test11_002();
}
+ @Override
+ @KnownIssue(candidate=IncrementalToolchain.class)
+ public void test16_001() throws Exception {
+ super.test16_001();
+ }
+
@Test
@Override
public void test17_001() throws Exception {
diff --git a/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java b/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java
index 874ca17..b576294 100644
--- a/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ShrobRuntimeTests.java
@@ -16,6 +16,7 @@
package com.android.jack.shrob;
+import com.android.jack.shrob.shrink.MappingCollisionException;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
@@ -24,6 +25,8 @@
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.JillBasedToolchain;
+import junit.framework.Assert;
+
import org.junit.Test;
public class ShrobRuntimeTests extends RuntimeTest {
@@ -42,6 +45,16 @@
"com.android.jack.shrob.test016.dx.Tests").addProguardFlagsFileName("proguard.flags001")
.addProguardFlagsFileName("applyMapping.flags");
+ private RuntimeTestInfo TEST016_003 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.shrob.test016"),
+ "com.android.jack.shrob.test016.dx.Tests").addProguardFlagsFileName("proguard.flags003")
+ .addProguardFlagsFileName("applyMapping.flags");
+
+ private RuntimeTestInfo TEST016_004 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.shrob.test016"),
+ "com.android.jack.shrob.test016.dx.Tests2").addProguardFlagsFileName("proguard.flags004")
+ .addProguardFlagsFileName("applyMapping.flags");
+
private RuntimeTestInfo TEST025 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.shrob.test025"),
"com.android.jack.shrob.test025.dx.Tests").addProguardFlagsFileName("proguard.flags001");
@@ -92,6 +105,20 @@
@Test
@Runtime
+ public void test016_003() throws Exception {
+ new RuntimeTestHelper(TEST016_003)
+ .compileAndRunTest();
+ }
+
+ @Test
+ @Runtime
+ public void test016_004() throws Exception {
+ new RuntimeTestHelper(TEST016_004)
+ .compileAndRunTest();
+ }
+
+ @Test
+ @Runtime
public void test025() throws Exception {
new RuntimeTestHelper(TEST025)
.compileAndRunTest();
diff --git a/jack-tests/tests/com/android/jack/shrob/test009/proguard.flags003 b/jack-tests/tests/com/android/jack/shrob/test009/proguard.flags003
index fc2359a..e6ff9df 100644
--- a/jack-tests/tests/com/android/jack/shrob/test009/proguard.flags003
+++ b/jack-tests/tests/com/android/jack/shrob/test009/proguard.flags003
@@ -1,3 +1,3 @@
-keep class ** {
- void m(int,...,long,...);
+ void m(int,...,long);
}
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test011/jack/A.java b/jack-tests/tests/com/android/jack/shrob/test011/jack/A.java
index c424112..f4d2521 100644
--- a/jack-tests/tests/com/android/jack/shrob/test011/jack/A.java
+++ b/jack-tests/tests/com/android/jack/shrob/test011/jack/A.java
@@ -26,7 +26,7 @@
Object o = bClass.newInstance();
try {
- String cName = "com.android.jack.shrob.test011.jack.C";
+ final String cName = "com.android.jack.shrob.test011.jack.C";
Class<?> cClass = Class.forName(cName);
throw new RuntimeException();
} catch (ClassNotFoundException e) {
diff --git a/jack-tests/tests/com/android/jack/shrob/test016/dx/Tests2.java b/jack-tests/tests/com/android/jack/shrob/test016/dx/Tests2.java
new file mode 100644
index 0000000..a705327
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test016/dx/Tests2.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.shrob.test016.dx;
+
+import com.android.jack.shrob.test016.jack.KeepClass;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class Tests2 {
+
+ @Test
+ public void test() {
+ Assert.assertEquals("com.android.jack.shrob.test016.jack.A", KeepClass.value());
+ Assert.assertEquals("Lcom.android.jack.shrob.test016.jack.A;", KeepClass.value2());
+ Assert.assertEquals("com/android/jack/shrob/test016/jack/A", KeepClass.value3());
+ Assert.assertEquals("Lcom/android/jack/shrob/test016/jack/A;", KeepClass.value4());
+ Assert.assertEquals("A", KeepClass.value5());
+ Assert.assertEquals("[com.android.jack.shrob.test016.jack.A", KeepClass.value6());
+ Assert.assertEquals("com.android.jack.shrob.test016.jack.A[]", KeepClass.value7());
+ Assert.assertEquals("dfgdgcom.android.jack.shrob.test016.jack.A", KeepClass.value8());
+ Assert.assertEquals("com.android.jack.shrob.test016.jack.Afgdg", KeepClass.value9());
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/shrob/test016/proguard.flags003 b/jack-tests/tests/com/android/jack/shrob/test016/proguard.flags003
new file mode 100644
index 0000000..c5b4503
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test016/proguard.flags003
@@ -0,0 +1,8 @@
+-dontshrink
+-keepclassmembernames class ** {
+ <methods>;
+}
+-adaptclassstrings com.android.jack.shrob.test016.jack.KeepClass
+-keepattributes RuntimeVisibleAnnotations
+
+-keepnames class com.android.jack.shrob.test016.jack.KeepClass,**.KeepClass2,**.KeepClass3
diff --git a/jack-tests/tests/com/android/jack/shrob/test016/proguard.flags004 b/jack-tests/tests/com/android/jack/shrob/test016/proguard.flags004
new file mode 100644
index 0000000..e27433b
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test016/proguard.flags004
@@ -0,0 +1,8 @@
+-dontshrink
+-keepclassmembernames class ** {
+ <methods>;
+}
+-adaptclassstrings !**.KeepClass
+-keepattributes RuntimeVisibleAnnotations
+
+-keepnames class com.android.jack.shrob.test016.jack.KeepClass,**.KeepClass2,**.KeepClass3
diff --git a/jack-tests/tests/com/android/jack/shrob/test048/proguard.flags001 b/jack-tests/tests/com/android/jack/shrob/test048/proguard.flags001
index 24f0192..507dc64 100644
--- a/jack-tests/tests/com/android/jack/shrob/test048/proguard.flags001
+++ b/jack-tests/tests/com/android/jack/shrob/test048/proguard.flags001
@@ -1,5 +1,6 @@
-dontshrink
-applymapping mapping.txt
+-adaptclassstrings
-keepclasseswithmembers public class * {
public static java.lang.String testMethod();
diff --git a/jack-tests/tests/com/android/jack/shrob/test049/info.txt b/jack-tests/tests/com/android/jack/shrob/test049/info.txt
new file mode 100644
index 0000000..3591acd
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test049/info.txt
@@ -0,0 +1,2 @@
+This test contains a class which contains an inner class and members using this
+inner class.
\ No newline at end of file
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/shrob/test049/jack/MyClass.java
similarity index 78%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/shrob/test049/jack/MyClass.java
index 0b9fd92..69a3cff 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/shrob/test049/jack/MyClass.java
@@ -14,7 +14,12 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.shrob.test049.jack;
-public interface Interface {}
+public class MyClass implements MyInterface {
+ public static Inner<Object> field;
+ public static class Inner <T> {
+
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/shrob/test049/jack/MyInterface.java
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/shrob/test049/jack/MyInterface.java
index 0b9fd92..98bd095 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/shrob/test049/jack/MyInterface.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.shrob.test049.jack;
-public interface Interface {}
-
+public interface MyInterface {
+}
diff --git a/jack-tests/tests/com/android/jack/shrob/test049/proguard.flags001 b/jack-tests/tests/com/android/jack/shrob/test049/proguard.flags001
new file mode 100644
index 0000000..8d0683b
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test049/proguard.flags001
@@ -0,0 +1,4 @@
+-dontshrink
+-keepclassmembernames class * implements **.MyInterface {
+ public static com.android.jack.shrob.test049.jack.MyClass$Inner field;
+}
diff --git a/jack-tests/tests/com/android/jack/shrob/test049/refsObfuscationWithoutMapping/expected-001.txt b/jack-tests/tests/com/android/jack/shrob/test049/refsObfuscationWithoutMapping/expected-001.txt
new file mode 100644
index 0000000..4e4ee9e
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test049/refsObfuscationWithoutMapping/expected-001.txt
@@ -0,0 +1,6 @@
+com.android.jack.shrob.test049.jack.MyInterface -> pbz.naqebvq.wnpx.fuebo.grfg049.wnpx.ZlVagresnpr:
+com.android.jack.shrob.test049.jack.MyClass -> pbz.naqebvq.wnpx.fuebo.grfg049.wnpx.ZlPynff:
+ com.android.jack.shrob.test049.jack.MyClass$Inner field -> field
+ void <init>() -> <init>
+com.android.jack.shrob.test049.jack.MyClass$Inner -> pbz.naqebvq.wnpx.fuebo.grfg049.wnpx.ZlPynff$Vaare:
+ void <init>() -> <init>
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test051/info.txt b/jack-tests/tests/com/android/jack/shrob/test051/info.txt
new file mode 100644
index 0000000..1069f85
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test051/info.txt
@@ -0,0 +1 @@
+This test contains two classes obfuscated with the same name
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java b/jack-tests/tests/com/android/jack/shrob/test051/jack/A.java
similarity index 82%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
copy to jack-tests/tests/com/android/jack/shrob/test051/jack/A.java
index 680f9cf..e059035 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
+++ b/jack-tests/tests/com/android/jack/shrob/test051/jack/A.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.shrob.test051.jack;
-public class ClInit {
-
+public class A {
}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java b/jack-tests/tests/com/android/jack/shrob/test051/jack/B.java
similarity index 82%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
copy to jack-tests/tests/com/android/jack/shrob/test051/jack/B.java
index 680f9cf..a9c3f3b 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInit.java
+++ b/jack-tests/tests/com/android/jack/shrob/test051/jack/B.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.shrob.test051.jack;
-public class ClInit {
-
+public class B {
}
diff --git a/jack-tests/tests/com/android/jack/shrob/test051/mapping.flags b/jack-tests/tests/com/android/jack/shrob/test051/mapping.flags
new file mode 100644
index 0000000..9c6ffe6
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test051/mapping.flags
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test051.jack.A -> com.android.jack.shrob.test051.jack.C:
+com.android.jack.shrob.test051.jack.B -> com.android.jack.shrob.test051.jack.C:
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test051/proguard.flags001 b/jack-tests/tests/com/android/jack/shrob/test051/proguard.flags001
new file mode 100644
index 0000000..3ffecb5
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test051/proguard.flags001
@@ -0,0 +1,2 @@
+-dontshrink
+-applymapping mapping.flags
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test058/info.txt b/jack-tests/tests/com/android/jack/shrob/test058/info.txt
new file mode 100644
index 0000000..3591acd
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test058/info.txt
@@ -0,0 +1,2 @@
+This test contains a class which contains an inner class and members using this
+inner class.
\ No newline at end of file
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/shrob/test058/jack/MyClass.java
similarity index 72%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/shrob/test058/jack/MyClass.java
index 0b9fd92..d6d7ddc 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/shrob/test058/jack/MyClass.java
@@ -14,7 +14,16 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.shrob.test058.jack;
-public interface Interface {}
+public class MyClass implements MyInterface {
+ public static final Inner<Object> field = null;
+ public Inner m(Inner t) {
+ return null;
+ }
+
+ public static class Inner <T> {
+
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack-tests/tests/com/android/jack/shrob/test058/jack/MyInterface.java
similarity index 88%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack-tests/tests/com/android/jack/shrob/test058/jack/MyInterface.java
index 0b9fd92..38bc8d9 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack-tests/tests/com/android/jack/shrob/test058/jack/MyInterface.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.shrob.test058.jack;
-public interface Interface {}
-
+public interface MyInterface {
+}
diff --git a/jack-tests/tests/com/android/jack/shrob/test058/proguard.flags001 b/jack-tests/tests/com/android/jack/shrob/test058/proguard.flags001
new file mode 100644
index 0000000..d3092c4
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test058/proguard.flags001
@@ -0,0 +1,6 @@
+-keep, allowobfuscation class **.MyClass
+-keepclassmembers class * implements **.MyInterface {
+ public static final *.* field;
+ public *.* m(...);
+ public *** m(*.*);
+}
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test058/refsObfuscationWithoutMapping/expected-001.txt b/jack-tests/tests/com/android/jack/shrob/test058/refsObfuscationWithoutMapping/expected-001.txt
new file mode 100644
index 0000000..8b4b00c
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test058/refsObfuscationWithoutMapping/expected-001.txt
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test058.jack.MyClass -> pbz.naqebvq.wnpx.fuebo.grfg058.wnpx.ZlPynff:
+ void <init>() -> <init>
\ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/string/StringTests.java b/jack-tests/tests/com/android/jack/string/StringTests.java
index 93ce8ed..b459542 100644
--- a/jack-tests/tests/com/android/jack/string/StringTests.java
+++ b/jack-tests/tests/com/android/jack/string/StringTests.java
@@ -41,7 +41,9 @@
AbstractTestTools.getTestRootDir("com.android.jack.string.concat003"),
"com.android.jack.string.concat003.dx.Tests");
-
+ private RuntimeTestInfo CONCAT004 = new RuntimeTestInfo(
+ AbstractTestTools.getTestRootDir("com.android.jack.string.concat004"),
+ "com.android.jack.string.concat004.jack.Tests").setSrcDirName("");
@Test
public void testCompileNewString() throws Exception {
@@ -74,10 +76,18 @@
new RuntimeTestHelper(CONCAT003).compileAndRunTest();
}
+ @Test
+ @Runtime
+ @Category(RuntimeRegressionTest.class)
+ public void concat004() throws Exception {
+ new RuntimeTestHelper(CONCAT004).compileAndRunTest();
+ }
+
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(CONCAT001);
rtTestInfos.add(CONCAT002);
rtTestInfos.add(CONCAT003);
+ rtTestInfos.add(CONCAT004);
}
}
diff --git a/jack-tests/tests/com/android/jack/string/concat004/jack/Tests.java b/jack-tests/tests/com/android/jack/string/concat004/jack/Tests.java
new file mode 100644
index 0000000..08d0113
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/string/concat004/jack/Tests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.string.concat004.jack;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class Tests {
+
+ public String field = "a" + "b";
+
+ @Test
+ public void test1() {
+ String str = "a" + "b";
+ Assert.assertTrue(str == "ab");
+ }
+
+ @Test
+ public void test2() {
+ String str = "ab";
+ Assert.assertTrue(str == field);
+ }
+
+
+ @Test
+ public void test3() {
+ String str = "a" + null;
+ Assert.assertFalse(str == "anull");
+ }
+
+ @Test
+ public void test4() {
+ String str = (String) null + null;
+ Assert.assertFalse(str == "nullnull");
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java b/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java
index e0cb5ce..caf9159 100644
--- a/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java
+++ b/jack-tests/tests/com/android/jack/switchstatement/SwitchstatementTests.java
@@ -20,6 +20,7 @@
import com.android.jack.TestTools;
import com.android.jack.backend.dex.DexFileWriter;
+import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
@@ -1052,7 +1053,8 @@
@Test
@Runtime
public void testRun028() throws Exception {
- runTestCase(TEST028);
+ new RuntimeTestHelper(TEST028).addProperty(CodeItemBuilder.DEX_OPTIMIZE.getName(), "true")
+ .compileAndRunTest();
}
private void compileCode(
diff --git a/jack-tests/tests/com/android/jack/unary/UnaryTests.java b/jack-tests/tests/com/android/jack/unary/UnaryTests.java
index 9a8ca6d..5202994 100644
--- a/jack-tests/tests/com/android/jack/unary/UnaryTests.java
+++ b/jack-tests/tests/com/android/jack/unary/UnaryTests.java
@@ -17,6 +17,7 @@
package com.android.jack.unary;
import com.android.jack.TestTools;
+import com.android.jack.backend.dex.rop.CodeItemBuilder;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
@@ -144,6 +145,7 @@
public void test005() throws Exception {
new RuntimeTestHelper(TEST005)
.addIgnoredCandidateToolchain(JillBasedToolchain.class)
+ .addProperty(CodeItemBuilder.DEX_OPTIMIZE.getName(), "true")
.compileAndRunTest();
}
diff --git a/jack-tests/tests/com/android/jack/unary/test001/dx/Tests.java b/jack-tests/tests/com/android/jack/unary/test001/dx/Tests.java
index 64d102f..6984884 100644
--- a/jack-tests/tests/com/android/jack/unary/test001/dx/Tests.java
+++ b/jack-tests/tests/com/android/jack/unary/test001/dx/Tests.java
@@ -52,6 +52,17 @@
}
@Test
+ public void floatPosNeg() {
+ // Note that we can't just use assertEquals directly on the floats since -0.0f == 0.0f is true.
+ Assert.assertEquals("-0.0", "" + Unary.posNegZero());
+ Assert.assertEquals("-0.0", "" + Unary.negPosZero());
+ Assert.assertEquals("0.0", "" + Unary.negPosNegZero());
+ Assert.assertEquals("-0.0", "" + Unary.posNegPosZero());
+ Assert.assertEquals("-100.0", "" + Unary.posNegUnknown(100.0f));
+ Assert.assertEquals("100.0", "" + Unary.posNegUnknown(-100.0f));
+ }
+
+ @Test
public void doubleNeg() {
Assert.assertEquals(-1.23e2, Unary.neg(1.23e2), 0);
}
diff --git a/jack-tests/tests/com/android/jack/unary/test001/jack/Unary.java b/jack-tests/tests/com/android/jack/unary/test001/jack/Unary.java
index b8ee050..add762d 100644
--- a/jack-tests/tests/com/android/jack/unary/test001/jack/Unary.java
+++ b/jack-tests/tests/com/android/jack/unary/test001/jack/Unary.java
@@ -44,4 +44,24 @@
public static double neg(double a) {
return -a;
}
+
+ public static float posNegZero() {
+ return (+(-0.0f));
+ }
+
+ public static float negPosZero() {
+ return (-(+0.0f));
+ }
+
+ public static float negPosNegZero() {
+ return (-(+(-0.0f)));
+ }
+
+ public static float posNegPosZero() {
+ return (+(-(+0.0f)));
+ }
+
+ public static float posNegUnknown(float x) {
+ return (+(-(x)));
+ }
}
diff --git a/jack/.classpath b/jack/.classpath
index e019a87..e0d1ee8 100644
--- a/jack/.classpath
+++ b/jack/.classpath
@@ -12,12 +12,11 @@
<classpathentry kind="lib" path="libs/antlr-runtime-lib.jar"/>
<classpathentry kind="lib" path="libs/args4j-lib.jar"/>
<classpathentry kind="lib" path="libs/dex-lib.jar"/>
- <classpathentry kind="lib" path="libs/dx-ref.jar" sourcepath="/Scheduler/src"/>
<classpathentry kind="lib" path="libs/ecj.jar"/>
<classpathentry kind="lib" path="libs/guava-lib.jar"/>
<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
<classpathentry kind="lib" path="libs/junit4.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry combineaccessrules="false" kind="src" path="/jack-api"/>
<classpathentry combineaccessrules="false" kind="src" path="/jill"/>
<classpathentry kind="output" path="bin"/>
diff --git a/jack/.settings/org.eclipse.jdt.core.prefs b/jack/.settings/org.eclipse.jdt.core.prefs
index 5ea7f7d..253bb09 100644
--- a/jack/.settings/org.eclipse.jdt.core.prefs
+++ b/jack/.settings/org.eclipse.jdt.core.prefs
@@ -7,9 +7,9 @@
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -100,7 +100,7 @@
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/jack/build.gradle b/jack/build.gradle
new file mode 100644
index 0000000..0751ff9
--- /dev/null
+++ b/jack/build.gradle
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+apply plugin: "org.inferred.processors"
+
+apply from: "$rootDir/gradle-script/checkstyle.gradle"
+apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+findbugs {
+ excludeFilter = file("config/findbugs/findbugs-exclude.xml")
+}
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ resources {
+ srcDirs = ['rsc']
+ exclude "jack-version.properties"
+ }
+ }
+}
+
+configurations {
+ antlrComplete
+ schedBuildDep
+ jackFullArtifact
+ jackFullNoJarjarArtifact
+ jarjar
+}
+
+dependencies {
+ compile libs.antlr_runtime
+ compile project(':args4j')
+ compile project(':ecj').configurations.archives.artifacts.files
+ compile libs.guava
+ compile project(':jack-api')
+ compile project(':jill')
+ runtime project(':jill-api')
+ compileOnly libs.jsr305
+ compile project(':sched')
+
+ processor project(':sched:sched-ap')
+
+ // tools
+ schedBuildDep project(':sched:sched-ap')
+ antlrComplete(group: 'org.antlr', name: 'antlr-complete', version: '3.5.2', ext: 'jar', classifier: '')
+ jarjar project(':jarjar').configurations.archives.artifacts.files
+
+ testCompile libs.junit
+ testCompile project(':dexlib')
+ testCompile project(':dexcomparator')
+
+}
+
+jar {
+ classifier = 'lib'
+ manifest {
+ from 'etc/manifest.txt'
+ }
+ from ("${project.buildDir}") {
+ include "jack-version.properties"
+ }
+ into "/"
+}
+
+task preprocessorParserTask (type: Exec) {
+ String preProcessorDir = project.projectDir.toString() + "/src/com/android/jack/preprocessor"
+ commandLine 'java', '-jar', configurations.antlrComplete.singleFile, '-fo', preProcessorDir, preProcessorDir + '/PreProcessor.g'
+
+ inputs.file("${preProcessorDir}/PreProcessor.g")
+ outputs.files(fileTree(dir: preProcessorDir))
+}
+
+task proguardParserTask (type: Exec) {
+ String proguardDir = project.projectDir.toString() + "/src/com/android/jack/shrob/proguard"
+ commandLine 'java', '-jar', configurations.antlrComplete.singleFile, '-fo', proguardDir, proguardDir + '/Proguard.g'
+
+ inputs.file("${proguardDir}/Proguard.g")
+ outputs.files(fileTree(dir: proguardDir))
+}
+
+task schedBuildJackIntermediate (type: Exec, dependsOn: jar) {
+
+ List<String> inputJars = new ArrayList<String>()
+ inputJars.add(configurations.schedBuildDep.singleFile.getAbsolutePath())
+ inputJars.add(jar.archivePath)
+ configurations.runtime.files.each {
+ File file ->
+ inputJars.add(file.getAbsolutePath())
+ }
+
+ def cmdLine = ['java', '-jar', configurations.schedBuildDep.singleFile, jar.archivePath]
+ configurations.runtime.files.each {
+ File file ->
+ cmdLine << file.getAbsolutePath()
+ }
+ cmdLine << new File(project.buildDir, "jack-intermediate.jar").toString()
+ commandLine cmdLine
+
+ inputs.files(inputJars)
+ outputs.files(file("${project.buildDir}/jack-intermediate.jar"))
+}
+
+task defaultLibTask (type:Exec, dependsOn: schedBuildJackIntermediate) {
+ List<String> inputJars = new ArrayList<String>()
+ inputJars.add(new File(project.buildDir, "jack-intermediate.jar").getAbsolutePath())
+
+ def cmdLine = ['java', '-jar', new File(project.buildDir, "jack-intermediate.jar").toString(), '--verbose', 'error', '-D', 'jack.classpath.default-libraries=false', '--classpath', 'prebuilts/core-stubs-mini.jack', '--output-jack', new File(project.buildDir, "default-lib.jack").toString()]
+ fileTree(dir: 'src').matching{ include 'com/android/jack/annotations/**/*.java' }.visit {
+ FileVisitDetails details ->
+ if (!details.file.isDirectory()) {
+ cmdLine << details.file.absolutePath
+ inputJars.add(details.file.absolutePath)
+ }
+ }
+ commandLine cmdLine
+
+ inputs.files(inputJars)
+ outputs.files(new File(project.buildDir, "default-lib.jack"))
+}
+
+apply from: "$rootDir/gradle-script/versionfile.gradle"
+
+def addDefaultLib = copySpec {
+ from zipTree(new File(project.buildDir, "default-lib.jack").toString())
+ into '/jack-default-lib'
+}
+
+task fullJackJar(type: Jar, dependsOn: defaultLibTask) {
+ classifier = 'full'
+ from zipTree("${project.buildDir}/jack-intermediate.jar")
+ with addDefaultLib
+ manifest {
+ from 'etc/manifest.txt'
+ }
+}
+
+task jarjar(type:Exec, dependsOn: [':jarjar:jar', fullJackJar]) {
+ inputs.files 'jarjar-rules.txt', 'fullJackJar.archivePath'
+ outputs.file "${buildDir}/libs/jack.jar"
+ commandLine 'java', '-jar', configurations.jarjar.singleFile, 'process', "jarjar-rules.txt", fullJackJar.archivePath, file("${buildDir}/libs/jack.jar")
+}
+
+task jackDevJar (type: Jar, dependsOn: jarjar){
+ baseName 'jack'
+ classifier 'dev'
+ from (zipTree("${buildDir}/libs/jack.jar")) {
+ // Manage exclusion of packages to be hidden from plugin developers
+ }
+}
+
+compileJava.dependsOn preprocessorParserTask
+compileJava.dependsOn proguardParserTask
+jar.dependsOn createJackVersionFile
+assemble.dependsOn jarjar, jackDevJar
+
+task dist (type: Copy, dependsOn: assemble) {
+ from file("${buildDir}/libs/jack.jar")
+ from jackDevJar.archivePath
+ into file("${rootDir}/gradle-dist/")
+}
+
+artifacts {
+ jackFullArtifact file("${buildDir}/libs/jack.jar")
+ jackFullNoJarjarArtifact file("${buildDir}/libs/jack-full.jar")
+}
+
+task createJackDistDocDirectory {
+ doLast {
+ file("${rootDir}/gradle-dist/doc/jack").mkdirs()
+ }
+}
+
+task dumpCliUsage(type: Exec, dependsOn: ['createJackDistDocDirectory', 'fullJackJar']) {
+ commandLine 'java', '-jar', fullJackJar.archivePath, '--help'
+ doFirst {
+ standardOutput = new FileOutputStream("${rootDir}/gradle-dist/doc/jack/cli-usage.txt")
+ }
+}
+
+task dumpProperties(type: Exec, dependsOn: ['createJackDistDocDirectory', 'fullJackJar']) {
+ commandLine 'java', '-jar', fullJackJar.archivePath, '--help-properties', '--sanity-checks', 'off'
+ doFirst {
+ standardOutput = new FileOutputStream("${rootDir}/gradle-dist/doc/jack/properties.txt")
+ }
+}
+
+task dumpPropertiesDev(type: Exec, dependsOn: ['createJackDistDocDirectory', 'fullJackJar']) {
+ commandLine 'java', '-jar', fullJackJar.archivePath, '--help-properties', '--sanity-checks', 'on'
+ doFirst {
+ standardOutput = new FileOutputStream("${rootDir}/gradle-dist/doc/jack/properties-dev.txt")
+ }
+}
+
+javadoc {
+ dependsOn 'dumpCliUsage', 'dumpProperties', 'dumpPropertiesDev'
+ failOnError false
+ destinationDir = file("${rootDir}/gradle-dist/doc/jack/jack-internal/jack")
+}
+
+project(':jack:jackunittests') {
+ apply plugin: 'java'
+ apply plugin: "org.inferred.processors"
+ apply plugin: 'com.github.johnrengelman.shadow'
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = [project(':jack').file('tests')]
+ }
+ }
+ }
+
+ dependencies {
+
+ compile project(':jack')
+ compile libs.junit
+ compile project(':dexlib')
+ compile project(':dexcomparator')
+ compileOnly libs.jsr305
+ processor project(':sched:sched-ap')
+
+ }
+
+ assemble.dependsOn shadowJar
+
+}
+
+project(':jack:jack-annotations') {
+ apply plugin: 'java'
+ apply plugin: 'com.github.johnrengelman.shadow'
+
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+
+ compileJava.options.encoding = 'UTF-8'
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = [project(':jack').file('src')]
+ include 'com/android/jack/annotations/**/*.java'
+ }
+ }
+ }
+
+ apply from: "$rootDir/gradle-script/versionfile.gradle"
+
+ jar {
+ classifier 'lib'
+ dependsOn createJackVersionFile
+ from ("${project.buildDir}") {
+ include "jack-annotations-version.properties"
+ }
+ }
+ shadowJar {
+ classifier ''
+ dependsOn createJackVersionFile
+ from ("${project.buildDir}") {
+ include "jack-annotations-version.properties"
+ }
+ }
+
+ javadoc {
+ failOnError false
+ destinationDir = file("${rootDir}/gradle-dist/doc/jack/jack-external/jack-annotations")
+ }
+
+ task dist (type: Copy) {
+ from shadowJar.archivePath
+ into file("${rootDir}/gradle-dist/")
+ }
+
+ dist.dependsOn shadowJar
+
+}
diff --git a/jack/config/findbugs/findbugs-exclude.xml b/jack/config/findbugs/findbugs-exclude.xml
new file mode 100644
index 0000000..1e3e231
--- /dev/null
+++ b/jack/config/findbugs/findbugs-exclude.xml
@@ -0,0 +1,18 @@
+<FindBugsFilter>
+<!-- Ignore Antlr generated files -->
+<Match>
+ <Class name="~com\.android\.jack\.shrob\.proguard\.ProguardLexer.*"/>
+</Match>
+<Match>
+ <Class name="~com\.android\.jack\.shrob\.proguard\.ProguardParser.*"/>
+</Match>
+<Match>
+ <Class name="~com\.android\.jack\.preprocessor\.PreProcessorLexer.*"/>
+</Match>
+<Match>
+ <Class name="~com\.android\.jack\.preprocessor\.PreProcessorParser.*"/>
+</Match>
+<Match>
+ <Class name="~com\.android\.jack\.preprocessor\.PreProcessor_Java.*"/>
+</Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/jack/jarjar-rules.txt b/jack/jarjar-rules.txt
new file mode 100644
index 0000000..0ae7eb3
--- /dev/null
+++ b/jack/jarjar-rules.txt
@@ -0,0 +1,9 @@
+rule com.google.common.** com.android.jack.google.common.@1
+rule com.google.thirdparty.** com.android.jack.google.thirdparty.@1
+rule com.tonicsystems.** com.android.jack.tonicsystems.@1
+rule freemarker.** com.android.jack.freemarker.@1
+rule org.antlr.** com.android.jack.antlr.@1
+rule org.kohsuke.** com.android.jack.kohsuke.@1
+rule org.objectweb.** com.android.jack.objectweb.@1
+rule org.uncommons.** com.android.jack.uncommons.@1
+rule org.eclipse.** com.android.jack.eclipse.@1
diff --git a/jack/prebuilts/core-stubs-mini.jack b/jack/prebuilts/core-stubs-mini.jack
index 2f5db0e..698808e 100644
--- a/jack/prebuilts/core-stubs-mini.jack
+++ b/jack/prebuilts/core-stubs-mini.jack
Binary files differ
diff --git a/jack/prebuilts/core-stubs-mini.jar b/jack/prebuilts/core-stubs-mini.jar
index a8638dc..3772849 100644
--- a/jack/prebuilts/core-stubs-mini.jar
+++ b/jack/prebuilts/core-stubs-mini.jar
Binary files differ
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java
index 2b040d5..ba06388 100644
--- a/jack/src/com/android/jack/Jack.java
+++ b/jack/src/com/android/jack/Jack.java
@@ -22,7 +22,6 @@
import com.google.common.eventbus.EventBus;
import com.android.jack.Options.AssertionPolicy;
-import com.android.jack.Options.SwitchEnumOptStrategy;
import com.android.jack.abort.Aborter;
import com.android.jack.analysis.DefinitionMarkerAdder;
import com.android.jack.analysis.DefinitionMarkerRemover;
@@ -68,8 +67,11 @@
import com.android.jack.backend.dex.MultiDexAnnotationsFinder;
import com.android.jack.backend.dex.MultiDexLegacy;
import com.android.jack.backend.dex.MultiDexWritingTool;
+import com.android.jack.backend.dex.OrphanDexFileWriter;
import com.android.jack.backend.dex.annotations.DefaultValueAnnotationAdder;
+import com.android.jack.backend.dex.annotations.ParameterMetadataAnnotationsAdder;
import com.android.jack.backend.dex.annotations.ReflectAnnotationsAdder;
+import com.android.jack.backend.dex.annotations.tag.ParameterMetadataFeature;
import com.android.jack.backend.dex.compatibility.AndroidCompatibilityChecker;
import com.android.jack.backend.dex.compatibility.CheckAndroidCompatibility;
import com.android.jack.backend.dex.multidex.legacy.AnnotatedFinder;
@@ -180,27 +182,29 @@
import com.android.jack.shrob.obfuscation.annotation.AnnotationDefaultValueRemover;
import com.android.jack.shrob.obfuscation.annotation.FieldAnnotationRemover;
import com.android.jack.shrob.obfuscation.annotation.FieldGenericSignatureRemover;
-import com.android.jack.shrob.obfuscation.annotation.LineNumberRemover;
+import com.android.jack.shrob.obfuscation.annotation.LocalVariableAndThisLineNumberRemover;
import com.android.jack.shrob.obfuscation.annotation.LocalVariableAndThisNameRemover;
-import com.android.jack.shrob.obfuscation.annotation.LocalVariableGenericSignatureRemover;
import com.android.jack.shrob.obfuscation.annotation.MethodAnnotationRemover;
import com.android.jack.shrob.obfuscation.annotation.MethodGenericSignatureRemover;
import com.android.jack.shrob.obfuscation.annotation.ParameterAnnotationRemover;
+import com.android.jack.shrob.obfuscation.annotation.ParameterLineNumberRemover;
import com.android.jack.shrob.obfuscation.annotation.ParameterNameRemover;
import com.android.jack.shrob.obfuscation.annotation.RemoveAnnotationDefaultValue;
import com.android.jack.shrob.obfuscation.annotation.RemoveEnclosingMethodFeature;
import com.android.jack.shrob.obfuscation.annotation.RemoveEnclosingType;
import com.android.jack.shrob.obfuscation.annotation.RemoveGenericSignature;
-import com.android.jack.shrob.obfuscation.annotation.RemoveLineNumber;
-import com.android.jack.shrob.obfuscation.annotation.RemoveLocalVariableGenericSignature;
+import com.android.jack.shrob.obfuscation.annotation.RemoveLocalLineNumber;
import com.android.jack.shrob.obfuscation.annotation.RemoveLocalVariableName;
+import com.android.jack.shrob.obfuscation.annotation.RemoveParameterLineNumber;
import com.android.jack.shrob.obfuscation.annotation.RemoveParameterName;
import com.android.jack.shrob.obfuscation.annotation.RemoveThrownException;
+import com.android.jack.shrob.obfuscation.annotation.RemoveVariableGenericSignature;
import com.android.jack.shrob.obfuscation.annotation.ThrownExceptionRemover;
import com.android.jack.shrob.obfuscation.annotation.TypeAnnotationRemover;
import com.android.jack.shrob.obfuscation.annotation.TypeEnclosingMethodRemover;
import com.android.jack.shrob.obfuscation.annotation.TypeEnclosingTypeRemover;
import com.android.jack.shrob.obfuscation.annotation.TypeGenericSignatureRemover;
+import com.android.jack.shrob.obfuscation.annotation.VariableGenericSignatureRemover;
import com.android.jack.shrob.obfuscation.resource.AdaptResourceFileContent;
import com.android.jack.shrob.obfuscation.resource.ResourceContentRefiner;
import com.android.jack.shrob.obfuscation.resource.ResourceRefiner;
@@ -226,8 +230,6 @@
import com.android.jack.transformations.EmptyClinitRemover;
import com.android.jack.transformations.FieldInitializer;
import com.android.jack.transformations.Jarjar;
-import com.android.jack.transformations.OptimizedSwitchEnumFeedbackFeature;
-import com.android.jack.transformations.OptimizedSwitchEnumNonFeedbackFeature;
import com.android.jack.transformations.SanityChecks;
import com.android.jack.transformations.UnusedLocalRemover;
import com.android.jack.transformations.VisibilityBridgeAdder;
@@ -286,7 +288,10 @@
import com.android.jack.transformations.enums.SwitchEnumSupport;
import com.android.jack.transformations.enums.UsedEnumFieldCollector;
import com.android.jack.transformations.enums.UsedEnumFieldMarkerRemover;
+import com.android.jack.transformations.enums.opt.OptimizedSwitchEnumFeedbackFeature;
+import com.android.jack.transformations.enums.opt.OptimizedSwitchEnumNonFeedbackFeature;
import com.android.jack.transformations.enums.opt.OptimizedSwitchEnumSupport;
+import com.android.jack.transformations.enums.opt.SwitchEnumOptStrategy;
import com.android.jack.transformations.enums.opt.SwitchEnumUsageCollector;
import com.android.jack.transformations.exceptions.ExceptionRuntimeValueAdder;
import com.android.jack.transformations.exceptions.TryCatchRemover;
@@ -605,7 +610,7 @@
request.addFeature(RemoveAnnotationDefaultValue.class);
}
if (!options.flags.keepAttribute("LocalVariableTypeTable")) {
- request.addFeature(RemoveLocalVariableGenericSignature.class);
+ request.addFeature(RemoveVariableGenericSignature.class);
}
if (!options.flags.keepAttribute("Exceptions")) {
request.addFeature(RemoveThrownException.class);
@@ -613,14 +618,18 @@
if (!options.flags.keepAttribute("SourceFile")) {
request.addFeature(RemoveSourceFile.class);
}
- if (!options.flags.keepAttribute("LineNumberTable")) {
- request.addFeature(RemoveLineNumber.class);
+ if (!config.get(RemoveLocalLineNumber.KEEP_LOCAL_LINE_NUMBER).booleanValue()) {
+ request.addFeature(RemoveLocalLineNumber.class);
}
- if (!options.flags.keepAttribute("LocalVariableTable")) {
+ if (!config.get(RemoveParameterLineNumber.KEEP_PARAMETER_LINE_NUMBER)
+ .booleanValue()) {
+ request.addFeature(RemoveParameterLineNumber.class);
+ }
+ if (!config.get(RemoveLocalVariableName.KEEP_LOCAL_NAME).booleanValue()) {
request.addFeature(RemoveLocalVariableName.class);
- if (!options.flags.getKeepParameterNames()) {
- request.addFeature(RemoveParameterName.class);
- }
+ }
+ if (!config.get(RemoveParameterName.KEEP_PARAMETER_NAME).booleanValue()) {
+ request.addFeature(RemoveParameterName.class);
}
}
if (options.flags.printSeeds()) {
@@ -688,9 +697,11 @@
request.addFeature(CheckAndroidCompatibility.class);
}
- if (config.get(Options.OPTIMIZED_ENUM_SWITCH) == SwitchEnumOptStrategy.FEEDBACK) {
+ if (config.get(OptimizedSwitchEnumSupport.OPTIMIZED_ENUM_SWITCH)
+ == SwitchEnumOptStrategy.FEEDBACK) {
request.addFeature(OptimizedSwitchEnumFeedbackFeature.class);
- } else if (config.get(Options.OPTIMIZED_ENUM_SWITCH) == SwitchEnumOptStrategy.ALWAYS) {
+ } else if (config.get(OptimizedSwitchEnumSupport.OPTIMIZED_ENUM_SWITCH)
+ == SwitchEnumOptStrategy.ALWAYS) {
request.addFeature(OptimizedSwitchEnumNonFeedbackFeature.class);
}
@@ -753,6 +764,10 @@
request.addFeature(TypeDefRemover.RemoveTypeDef.class);
}
+ if (config.get(ParameterMetadataAnnotationsAdder.PARAMETER_ANNOTATION).booleanValue()) {
+ request.addFeature(ParameterMetadataFeature.class);
+ }
+
List<InputLibrary> importedLibraries = session.getImportedLibraries();
for (InputLibrary il : importedLibraries) {
if (!il.containsFileType(FileType.PREBUILT)) {
@@ -805,7 +820,14 @@
if (targetProduction.contains(JayceInLibraryProduct.class)) {
planBuilder.append(LibraryMetaWriter.class);
}
-
+ if (targetProduction.contains(JayceInLibraryProduct.class)
+ && targetProduction.contains(DexInLibraryProduct.class)) {
+ // Orphan dex files must only be copied into a Jack library when prebuilts are requested
+ // (DexInLibraryProduct). Jack must also check JayceInLibraryProduct to be sure that a
+ // Jack library is requested since DexInLibraryProduct is also used to generate an
+ // internal intermediate library that must not be take into account.
+ planBuilder.append(OrphanDexFileWriter.class);
+ }
Plan<JSession> plan = null;
try {
try {
@@ -818,7 +840,8 @@
}
} catch (UnsupportedOperationException e) {
// ... but use a manual one if not supported
- if (pluginManager.hasPlugins()) {
+ if (pluginManager.hasPlugins() ||
+ config.get(Options.FORCE_PLAN_AMENDER).booleanValue()) {
// If there are some plugins, amend the handcrafted plan
// Add features and productions according to plugins
@@ -1431,153 +1454,147 @@
}
}
- if (features.contains(LambdaToAnonymousConverter.class)) {
- // Collect and group lambdas
- planBuilder
- .appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
- .appendSubPlan(JMethodAdapter.class)
- .append(LambdaCollector.class);
+ if (productions.contains(DexInLibraryProduct.class)
+ || productions.contains(DexFileProduct.class)) {
+ if (features.contains(LambdaToAnonymousConverter.class)) {
+ // Collect and group lambdas
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
+ .appendSubPlan(JMethodAdapter.class).append(LambdaCollector.class);
- // NOTE: wait until all lambdas are collected
+ // NOTE: wait until all lambdas are collected
- // Create classes and fill in their content
- planBuilder.append(LambdaGroupClassCreator.class);
- planBuilder
- .appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
- .append(LambdaGroupClassFinalizer.class);
+ // Create classes and fill in their content
+ planBuilder.append(LambdaGroupClassCreator.class);
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
+ .append(LambdaGroupClassFinalizer.class);
- // NOTE: wait until all lambdas classes are created
+ // NOTE: wait until all lambdas classes are created
- // Replace all references to lambdas
- planBuilder
- .appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
- .appendSubPlan(JMethodAdapter.class)
- .append(LambdaConverter.class);
+ // Replace all references to lambdas
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
+ .appendSubPlan(JMethodAdapter.class).append(LambdaConverter.class);
+ }
}
boolean enableInlineAnnotatedMethods =
features.contains(Optimizations.InlineAnnotatedMethods.class);
- {
+
+ if (productions.contains(DependencyInLibraryProduct.class)) {
SubPlanBuilder<JDefinedClassOrInterface> typePlan =
planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- if (productions.contains(DependencyInLibraryProduct.class)) {
- typePlan.append(TypeDependenciesCollector.class);
- typePlan.append(FileDependenciesCollector.class);
- }
+ typePlan.append(TypeDependenciesCollector.class);
+ typePlan.append(FileDependenciesCollector.class);
}
- if (features.contains(SourceFileRenaming.class)) {
- planBuilder.append(SourceFileRenamer.class);
- }
-
- {
- SubPlanBuilder<JDefinedClassOrInterface> typePlan =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
- if (features.contains(DynamicAssertionFeature.class)) {
- methodPlan.append(DynamicAssertionTransformer.class);
- } else if (features.contains(EnabledAssertionFeature.class)) {
- methodPlan.append(EnabledAssertionTransformer.class);
- } else if (features.contains(DisabledAssertionFeature.class)) {
- methodPlan.append(AssertionRemover.class);
- }
- if (features.contains(Optimizations.NotSimplifier.class)) {
- methodPlan.append(NotSimplifier.class);
- }
- }
-
- boolean enableClassFinalizer = features.contains(Optimizations.ClassFinalizer.class);
- boolean enableMethodFinalizer = features.contains(Optimizations.MethodFinalizer.class);
-
- if (enableClassFinalizer || enableMethodFinalizer) {
- // Dependencies
- planBuilder
- .appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
- .append(DirectlyDerivedClassesProvider.class);
-
- SubPlanBuilder<JDefinedClassOrInterface> typePlan =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- if (enableClassFinalizer) {
- typePlan.append(ClassFinalizer.class);
- }
- if (enableMethodFinalizer) {
- typePlan.append(MethodFinalizer.class);
- }
- }
-
- {
- // After this point {@link JDcoiExcludeJackFileAdapter} must not be used since
- // schedulables are not executed into the Java to Jayce plan.
- SubPlanBuilder<JDefinedClassOrInterface> typePlan4 =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- if (features.contains(DynamicAssertionFeature.class)) {
- SubPlanBuilder<JField> fieldPlan =
- typePlan4.appendSubPlan(JFieldAdapter.class);
- fieldPlan.append(FieldInitializer.class);
- }
+ if (productions.contains(DexInLibraryProduct.class)
+ || productions.contains(DexFileProduct.class)) {
{
- SubPlanBuilder<JMethod> methodPlan = typePlan4.appendSubPlan(JMethodAdapter.class);
- methodPlan.append(ConditionalAndOrRemover.class);
- if (hasSanityChecks) {
- methodPlan.append(ConditionalAndOrRemoverChecker.class);
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
+ if (features.contains(DynamicAssertionFeature.class)) {
+ methodPlan.append(DynamicAssertionTransformer.class);
+ } else if (features.contains(EnabledAssertionFeature.class)) {
+ methodPlan.append(EnabledAssertionTransformer.class);
+ } else if (features.contains(DisabledAssertionFeature.class)) {
+ methodPlan.append(AssertionRemover.class);
}
- methodPlan.append(BooleanTestTransformer.class);
- methodPlan.append(SplitNewInstance.class);
- if (hasSanityChecks) {
- methodPlan.append(SplitNewInstanceChecker.class);
+ if (features.contains(Optimizations.NotSimplifier.class)) {
+ methodPlan.append(NotSimplifier.class);
}
- methodPlan.append(MultiDimensionNewArrayRemover.class);
- methodPlan.append(InitInNewArrayRemover.class);
- methodPlan.append(PrimitiveClassTransformer.class);
- methodPlan.append(SynchronizeTransformer.class);
- if (features.contains(BoostLockedRegionPriorityFeature.class)) {
- methodPlan.append(BoostLockedRegionPriority.class);
- }
- methodPlan.append(NestedAssignRemover.class);
- methodPlan.append(IntersectionTypeRemover.class);
- methodPlan.append(UselessCaseRemover.class);
- if (hasSanityChecks) {
- methodPlan.append(UselessCaseChecker.class);
- }
- methodPlan.append(UselessSwitchesRemover.class);
- methodPlan.append(TypeLegalizer.class);
- methodPlan.append(RopCastLegalizer.class);
- if (features.contains(CodeStats.class)) {
- methodPlan.append(BinaryOperationWithCst.class);
- }
- methodPlan.append(FinallyRemover.class);
- methodPlan.append(ExceptionRuntimeValueAdder.class);
- methodPlan.append(DefinitionMarkerAdder.class);
- methodPlan.append(ThreeAddressCodeBuilder.class);
- methodPlan.append(UselessCastRemover.class);
- methodPlan.append(DefinitionMarkerRemover.class);
- methodPlan.append(TryCatchRemover.class);
- methodPlan.append(ExpressionStatementLegalizer.class);
- if (hasSanityChecks) {
- methodPlan.append(NumericConversionChecker.class);
- }
- methodPlan.append(EmptyClinitRemover.class);
}
- }
- if (enableInlineAnnotatedMethods) {
+ boolean enableClassFinalizer = features.contains(Optimizations.ClassFinalizer.class);
+ boolean enableMethodFinalizer = features.contains(Optimizations.MethodFinalizer.class);
- SubPlanBuilder<JMethod> methodPlan = planBuilder
- .appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
- .appendSubPlan(JMethodAdapter.class);
- if (hasSanityChecks) {
- methodPlan.append(InlineAnnotationSanityCheck.class);
+ if (enableClassFinalizer || enableMethodFinalizer) {
+ // Dependencies
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
+ .append(DirectlyDerivedClassesProvider.class);
+
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ if (enableClassFinalizer) {
+ typePlan.append(ClassFinalizer.class);
+ }
+ if (enableMethodFinalizer) {
+ typePlan.append(MethodFinalizer.class);
+ }
}
- methodPlan.append(InlineAnnotatedMethods.class);
- methodPlan.append(JMethodInliner.class);
- }
- if (features.contains(DalvikProtectedInnerCheck.class)) {
- SubPlanBuilder<JDefinedClassOrInterface> typePlan =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
- methodPlan.append(DalvikProtectedInnerChecker.class);
+ {
+ // After this point {@link JDcoiExcludeJackFileAdapter} must not be used since
+ // schedulables are not executed into the Java to Jayce plan.
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan4 =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ if (features.contains(DynamicAssertionFeature.class)) {
+ SubPlanBuilder<JField> fieldPlan = typePlan4.appendSubPlan(JFieldAdapter.class);
+ fieldPlan.append(FieldInitializer.class);
+ }
+ {
+ SubPlanBuilder<JMethod> methodPlan = typePlan4.appendSubPlan(JMethodAdapter.class);
+ methodPlan.append(ConditionalAndOrRemover.class);
+ if (hasSanityChecks) {
+ methodPlan.append(ConditionalAndOrRemoverChecker.class);
+ }
+ methodPlan.append(BooleanTestTransformer.class);
+ methodPlan.append(SplitNewInstance.class);
+ if (hasSanityChecks) {
+ methodPlan.append(SplitNewInstanceChecker.class);
+ }
+ methodPlan.append(MultiDimensionNewArrayRemover.class);
+ methodPlan.append(InitInNewArrayRemover.class);
+ methodPlan.append(PrimitiveClassTransformer.class);
+ methodPlan.append(SynchronizeTransformer.class);
+ if (features.contains(BoostLockedRegionPriorityFeature.class)) {
+ methodPlan.append(BoostLockedRegionPriority.class);
+ }
+ methodPlan.append(NestedAssignRemover.class);
+ methodPlan.append(IntersectionTypeRemover.class);
+ methodPlan.append(UselessCaseRemover.class);
+ if (hasSanityChecks) {
+ methodPlan.append(UselessCaseChecker.class);
+ }
+ methodPlan.append(UselessSwitchesRemover.class);
+ methodPlan.append(TypeLegalizer.class);
+ methodPlan.append(RopCastLegalizer.class);
+ if (features.contains(CodeStats.class)) {
+ methodPlan.append(BinaryOperationWithCst.class);
+ }
+ methodPlan.append(FinallyRemover.class);
+ methodPlan.append(ExceptionRuntimeValueAdder.class);
+ methodPlan.append(DefinitionMarkerAdder.class);
+ methodPlan.append(ThreeAddressCodeBuilder.class);
+ methodPlan.append(UselessCastRemover.class);
+ methodPlan.append(DefinitionMarkerRemover.class);
+ methodPlan.append(TryCatchRemover.class);
+ methodPlan.append(ExpressionStatementLegalizer.class);
+ if (hasSanityChecks) {
+ methodPlan.append(NumericConversionChecker.class);
+ }
+ methodPlan.append(EmptyClinitRemover.class);
+ }
+ }
+
+ if (enableInlineAnnotatedMethods) {
+
+ SubPlanBuilder<JMethod> methodPlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
+ .appendSubPlan(JMethodAdapter.class);
+ if (hasSanityChecks) {
+ methodPlan.append(InlineAnnotationSanityCheck.class);
+ }
+ methodPlan.append(InlineAnnotatedMethods.class);
+ methodPlan.append(JMethodInliner.class);
+ }
+
+ if (features.contains(DalvikProtectedInnerCheck.class)) {
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
+ methodPlan.append(DalvikProtectedInnerChecker.class);
+ }
}
if (productions.contains(DependencyInLibraryProduct.class)) {
@@ -1596,175 +1613,176 @@
planBuilder.append(ShrinkStructurePrinter.class);
}
- boolean enableArgumentValuePropagation =
- features.contains(Optimizations.ArgumentValuePropagation.class);
+ if (productions.contains(DexInLibraryProduct.class)
+ || productions.contains(DexFileProduct.class)) {
+ boolean enableArgumentValuePropagation =
+ features.contains(Optimizations.ArgumentValuePropagation.class);
- {
- SubPlanBuilder<JDefinedClassOrInterface> typePlan =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- typePlan.append(ReflectAnnotationsAdder.class);
- if (enableArgumentValuePropagation) {
- typePlan.append(AvpCalculateTaintedMethods.class);
+ {
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ typePlan.append(ReflectAnnotationsAdder.class);
+ if (enableArgumentValuePropagation) {
+ typePlan.append(AvpCalculateTaintedMethods.class);
+ }
+
+ {
+ SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
+ methodPlan.append(DefaultValueAnnotationAdder.class);
+ }
}
{
- SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
- methodPlan.append(DefaultValueAnnotationAdder.class);
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ typePlan.append(ClassDefItemBuilder.class);
+ typePlan.append(ContainerAnnotationAdder.TypeContainerAnnotationAdder.class);
+ typePlan.append(ClassAnnotationBuilder.class);
}
- }
- {
- SubPlanBuilder<JDefinedClassOrInterface> typePlan =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- typePlan.append(ClassDefItemBuilder.class);
- typePlan.append(ContainerAnnotationAdder.TypeContainerAnnotationAdder.class);
- typePlan.append(ClassAnnotationBuilder.class);
- }
-
- if (features.contains(Optimizations.FieldFinalizer.class)) {
- // Phase 1: field assignment information collection
- planBuilder
+ if (features.contains(Optimizations.FieldFinalizer.class)) {
+ // Phase 1: field assignment information collection
+ planBuilder
.appendSubPlan(JDefinedClassOrInterfaceAdapter.class)
.appendSubPlan(JMethodAdapter.class)
.append(FieldFinalizer.CollectionPhase.class);
- // Phase 2: constructors analysis
- SubPlanBuilder<JDefinedClassOrInterface> phase3 =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ // Phase 2: constructors analysis
+ SubPlanBuilder<JDefinedClassOrInterface> phase3 =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- SubPlanBuilder<JMethod> phase3method =
- phase3.appendSubPlan(JMethodAdapter.class);
- phase3method.append(RefAsStatementRemover.class);
- phase3method.append(CfgBuilder.class);
- phase3method.append(FieldFinalizer.ConstructorsAnalysisPhase.class);
- phase3method.append(CfgMarkerRemover.class);
+ SubPlanBuilder<JMethod> phase3method = phase3.appendSubPlan(JMethodAdapter.class);
+ phase3method.append(RefAsStatementRemover.class);
+ phase3method.append(CfgBuilder.class);
+ phase3method.append(FieldFinalizer.ConstructorsAnalysisPhase.class);
+ phase3method.append(CfgMarkerRemover.class);
- // Phase 3: field finalization
- phase3
+ // Phase 3: field finalization
+ phase3
.appendSubPlan(JFieldAdapter.class)
.append(FieldFinalizer.FinalizingPhase.class);
- }
+ }
- boolean enableFieldValuePropagation =
- features.contains(Optimizations.FieldValuePropagation.class);
- boolean enableWriteOnlyFieldRemoval =
- features.contains(Optimizations.WriteOnlyFieldRemoval.class);
+ boolean enableFieldValuePropagation =
+ features.contains(Optimizations.FieldValuePropagation.class);
+ boolean enableWriteOnlyFieldRemoval =
+ features.contains(Optimizations.WriteOnlyFieldRemoval.class);
- {
- SubPlanBuilder<JDefinedClassOrInterface> typePlan5 =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
{
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan5 =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
{
- SubPlanBuilder<JMethod> methodPlan4 =
- typePlan5.appendSubPlan(JMethodAdapter.class);
- methodPlan4.append(RefAsStatementRemover.class);
- methodPlan4.append(CfgBuilder.class);
- methodPlan4.append(DefinitionMarkerAdder.class);
- methodPlan4.append(ReachingDefinitions.class);
- methodPlan4.append(UsedVariableAdder.class);
- methodPlan4.append(DefUsesAndUseDefsChainComputation.class);
- if (hasSanityChecks) {
- methodPlan4.append(UseDefsChecker.class);
+ {
+ SubPlanBuilder<JMethod> methodPlan4 = typePlan5.appendSubPlan(JMethodAdapter.class);
+ methodPlan4.append(RefAsStatementRemover.class);
+ methodPlan4.append(CfgBuilder.class);
+ methodPlan4.append(DefinitionMarkerAdder.class);
+ methodPlan4.append(ReachingDefinitions.class);
+ methodPlan4.append(UsedVariableAdder.class);
+ methodPlan4.append(DefUsesAndUseDefsChainComputation.class);
+ if (hasSanityChecks) {
+ methodPlan4.append(UseDefsChecker.class);
+ }
+ methodPlan4.append(ConstantRefiner.class);
+ if (features.contains(Optimizations.UseDefSimplifier.class)) {
+ methodPlan4.append(UseDefsChainsSimplifier.class);
+ }
+ if (features.contains(Optimizations.DefUseSimplifier.class)) {
+ methodPlan4.append(DefUsesChainsSimplifier.class);
+ }
+ methodPlan4.append(UnusedDefinitionRemover.class);
+ methodPlan4.append(RefAsStatementRemover.class);
+ methodPlan4.append(CfgMarkerRemover.class);
+ methodPlan4.append(CfgBuilder.class);
+ if (features.contains(Optimizations.IfSimplifier.class)) {
+ methodPlan4.append(IfWithConstantSimplifier.class);
+ }
+ methodPlan4.append(UnusedLocalRemover.class);
+ if (enableFieldValuePropagation) {
+ methodPlan4.append(FvpCollectFieldAssignments.class);
+ }
+ if (enableArgumentValuePropagation) {
+ methodPlan4.append(AvpCollectMethodCallArguments.class);
+ }
+ if (enableWriteOnlyFieldRemoval) {
+ methodPlan4.append(WofrCollectFieldAccesses.class);
+ }
+ methodPlan4.append(DefUsesAndUseDefsChainRemover.class);
+ methodPlan4.append(DefinitionMarkerRemover.class);
+ methodPlan4.append(UsedVariableRemover.class);
+ if (features.contains(Optimizations.ExpressionSimplifier.class)) {
+ methodPlan4.append(ExpressionSimplifier.class);
+ }
+ methodPlan4.append(UselessIfRemover.class);
+ methodPlan4.append(CfgMarkerRemover.class);
+ methodPlan4.append(ContainerAnnotationAdder.MethodContainerAnnotationAdder.class);
}
- methodPlan4.append(ConstantRefiner.class);
- if (features.contains(Optimizations.UseDefSimplifier.class)) {
- methodPlan4.append(UseDefsChainsSimplifier.class);
- }
- if (features.contains(Optimizations.DefUseSimplifier.class)) {
- methodPlan4.append(DefUsesChainsSimplifier.class);
- }
- methodPlan4.append(UnusedDefinitionRemover.class);
- methodPlan4.append(RefAsStatementRemover.class);
- methodPlan4.append(CfgMarkerRemover.class);
- methodPlan4.append(CfgBuilder.class);
- if (features.contains(Optimizations.IfSimplifier.class)) {
- methodPlan4.append(IfWithConstantSimplifier.class);
- }
- methodPlan4.append(UnusedLocalRemover.class);
- if (enableFieldValuePropagation) {
- methodPlan4.append(FvpCollectFieldAssignments.class);
- }
- if (enableArgumentValuePropagation) {
- methodPlan4.append(AvpCollectMethodCallArguments.class);
- }
- if (enableWriteOnlyFieldRemoval) {
- methodPlan4.append(WofrCollectFieldAccesses.class);
- }
- methodPlan4.append(DefUsesAndUseDefsChainRemover.class);
- methodPlan4.append(DefinitionMarkerRemover.class);
- methodPlan4.append(UsedVariableRemover.class);
- if (features.contains(Optimizations.ExpressionSimplifier.class)) {
- methodPlan4.append(ExpressionSimplifier.class);
- }
- methodPlan4.append(UselessIfRemover.class);
- methodPlan4.append(CfgMarkerRemover.class);
- methodPlan4.append(CfgBuilder.class);
- methodPlan4.append(ContainerAnnotationAdder.MethodContainerAnnotationAdder.class);
}
}
- }
- if (enableArgumentValuePropagation) {
- planBuilder.append(AvpComputeMethodArgumentsValues.class);
- }
-
- SubPlanBuilder<JDefinedClassOrInterface> typePlan =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
-
- if (enableFieldValuePropagation || enableArgumentValuePropagation
- || enableWriteOnlyFieldRemoval) {
- SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
- if (enableFieldValuePropagation) {
- methodPlan.append(FvpPropagateFieldValues.class);
- }
if (enableArgumentValuePropagation) {
- methodPlan.append(AvpPropagateArgumentValues.class);
+ planBuilder.append(AvpComputeMethodArgumentsValues.class);
}
- if (enableWriteOnlyFieldRemoval) {
- methodPlan.append(WofrRemoveFieldWrites.class);
+
+ if (enableFieldValuePropagation || enableArgumentValuePropagation
+ || enableWriteOnlyFieldRemoval) {
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ SubPlanBuilder<JMethod> methodPlan = typePlan.appendSubPlan(JMethodAdapter.class);
+ methodPlan.append(CfgBuilder.class);
+ if (enableFieldValuePropagation) {
+ methodPlan.append(FvpPropagateFieldValues.class);
+ }
+ if (enableArgumentValuePropagation) {
+ methodPlan.append(AvpPropagateArgumentValues.class);
+ }
+ if (enableWriteOnlyFieldRemoval) {
+ methodPlan.append(WofrRemoveFieldWrites.class);
+ }
+ methodPlan.append(CfgMarkerRemover.class);
}
- methodPlan.append(CfgMarkerRemover.class);
- methodPlan.append(CfgBuilder.class);
- }
- SubPlanBuilder<JDefinedClassOrInterface> typePlan1 =
- planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
-
- SubPlanBuilder<JField> fieldPlan = typePlan1.appendSubPlan(JFieldAdapter.class);
- fieldPlan.append(ContainerAnnotationAdder.FieldContainerAnnotationAdder.class);
- if (enableWriteOnlyFieldRemoval) {
- fieldPlan.append(WofrRemoveFields.class);
- }
-
- // The sub plan that write dex files representing type must not be split in order to remove dx
- // IR from memory when dex file is written.
- {
- SubPlanBuilder<JDefinedClassOrInterface> typePlan6 =
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan1 =
planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ SubPlanBuilder<JField> fieldPlan = typePlan1.appendSubPlan(JFieldAdapter.class);
+ fieldPlan.append(ContainerAnnotationAdder.FieldContainerAnnotationAdder.class);
+ if (enableWriteOnlyFieldRemoval) {
+ fieldPlan.append(WofrRemoveFields.class);
+ }
+
+ // The sub plan that write dex files representing type must not be split in order to remove dx
+ // IR from memory when dex file is written.
{
- SubPlanBuilder<JMethod> methodPlan5 = typePlan6.appendSubPlan(JMethodAdapter.class);
- methodPlan5.append(CodeItemBuilder.class);
- methodPlan5.append(CfgMarkerRemover.class);
- methodPlan5.append(EncodedMethodBuilder.class);
- methodPlan5.append(DexCodeMarkerRemover.class);
- methodPlan5.append(MethodAnnotationBuilder.class);
- if (features.contains(DropMethodBody.class)) {
- methodPlan5.append(MethodBodyRemover.class);
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan6 =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+
+ {
+ SubPlanBuilder<JMethod> methodPlan5 = typePlan6.appendSubPlan(JMethodAdapter.class);
+ methodPlan5.append(CfgBuilder.class);
+ methodPlan5.append(CodeItemBuilder.class);
+ methodPlan5.append(CfgMarkerRemover.class);
+ methodPlan5.append(EncodedMethodBuilder.class);
+ methodPlan5.append(DexCodeMarkerRemover.class);
+ if (features.contains(ParameterMetadataFeature.class)) {
+ methodPlan5.append(ParameterMetadataAnnotationsAdder.class);
+ }
+ methodPlan5.append(MethodAnnotationBuilder.class);
+ if (features.contains(DropMethodBody.class)) {
+ methodPlan5.append(MethodBodyRemover.class);
+ }
}
- }
- {
- SubPlanBuilder<JField> fieldPlan2 = typePlan6.appendSubPlan(JFieldAdapter.class);
- fieldPlan2.append(EncodedFieldBuilder.class);
- fieldPlan2.append(FieldAnnotationBuilder.class);
- }
+ {
+ SubPlanBuilder<JField> fieldPlan2 = typePlan6.appendSubPlan(JFieldAdapter.class);
+ fieldPlan2.append(EncodedFieldBuilder.class);
+ fieldPlan2.append(FieldAnnotationBuilder.class);
+ }
- if (hasSanityChecks) {
- typePlan6.append(TypeAstChecker.class);
- }
+ if (hasSanityChecks) {
+ typePlan6.append(TypeAstChecker.class);
+ }
- if (productions.contains(DexInLibraryProduct.class)) {
// Jayce files must be copied into output library in incremental library mode or in non
// incremental mode
if (features.contains(GenerateLibraryFromIncrementalFolder.class)
@@ -1775,6 +1793,7 @@
}
typePlan6.append(ClassDefItemMarkerRemover.class);
}
+
}
if (hasSanityChecks) {
@@ -1795,9 +1814,13 @@
planBuilder.append(ResourceContentRefiner.class);
}
planBuilder.append(Renamer.class);
+
if (features.contains(RemoveSourceFile.class)) {
planBuilder.append(SourceFileRemover.class);
+ } else if (features.contains(SourceFileRenaming.class)) {
+ planBuilder.append(SourceFileRenamer.class);
}
+
{
SubPlanBuilder<JDefinedClassOrInterface> typePlan =
planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
@@ -1811,9 +1834,6 @@
if (features.contains(RemoveGenericSignature.class)) {
typePlan.append(TypeGenericSignatureRemover.class);
}
- if (features.contains(RemoveLineNumber.class)) {
- typePlan.append(LineNumberRemover.class);
- }
{
SubPlanBuilder<JField> fieldPlan = typePlan.appendSubPlan(JFieldAdapter.class);
fieldPlan.append(FieldAnnotationRemover.class);
@@ -1828,8 +1848,8 @@
if (features.contains(RemoveGenericSignature.class)) {
methodPlan.append(MethodGenericSignatureRemover.class);
}
- if (features.contains(RemoveLocalVariableGenericSignature.class)) {
- methodPlan.append(LocalVariableGenericSignatureRemover.class);
+ if (features.contains(RemoveVariableGenericSignature.class)) {
+ methodPlan.append(VariableGenericSignatureRemover.class);
}
if (features.contains(RemoveAnnotationDefaultValue.class)) {
methodPlan.append(AnnotationDefaultValueRemover.class);
@@ -1840,9 +1860,15 @@
if (features.contains(RemoveParameterName.class)) {
methodPlan.append(ParameterNameRemover.class);
}
+ if (features.contains(RemoveParameterLineNumber.class)) {
+ methodPlan.append(ParameterLineNumberRemover.class);
+ }
if (features.contains(RemoveLocalVariableName.class)) {
methodPlan.append(LocalVariableAndThisNameRemover.class);
}
+ if (features.contains(RemoveLocalLineNumber.class)) {
+ methodPlan.append(LocalVariableAndThisLineNumberRemover.class);
+ }
}
}
}
diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java
index 150c1ef..274d745 100644
--- a/jack/src/com/android/jack/Options.java
+++ b/jack/src/com/android/jack/Options.java
@@ -36,8 +36,6 @@
import com.android.jack.plugin.NotJackPluginException;
import com.android.jack.plugin.PluginManager;
import com.android.jack.plugin.PluginNotFoundException;
-import com.android.jack.reporting.Reportable;
-import com.android.jack.reporting.Reportable.ProblemLevel;
import com.android.jack.reporting.Reporter;
import com.android.jack.reporting.Reporter.Severity;
import com.android.jack.resource.ResourceImporter;
@@ -47,8 +45,14 @@
import com.android.jack.shrob.obfuscation.SourceFileRenamer;
import com.android.jack.shrob.obfuscation.annotation.AnnotationRemover;
import com.android.jack.shrob.obfuscation.annotation.ParameterAnnotationRemover;
+import com.android.jack.shrob.obfuscation.annotation.RemoveLocalLineNumber;
+import com.android.jack.shrob.obfuscation.annotation.RemoveLocalVariableName;
+import com.android.jack.shrob.obfuscation.annotation.RemoveParameterLineNumber;
+import com.android.jack.shrob.obfuscation.annotation.RemoveParameterName;
import com.android.jack.shrob.seed.SeedPrinter;
import com.android.jack.shrob.spec.Flags;
+import com.android.jack.transformations.enums.opt.OptimizedSwitchEnumSupport;
+import com.android.jack.transformations.enums.opt.SwitchEnumOptStrategy;
import com.android.jack.transformations.lambda.LambdaGroupingScope;
import com.android.jack.transformations.renamepackage.PackageRenamer;
import com.android.jack.util.AndroidApiLevel;
@@ -153,28 +157,6 @@
@Nonnull
private static final Logger logger = LoggerFactory.getLogger();
- private static class DeprecatedVerbosity implements Reportable {
- @Nonnull
- private final VerbosityLevel verbosity;
-
- private DeprecatedVerbosity(@Nonnull VerbosityLevel verbosity) {
- this.verbosity = verbosity;
- }
-
- @Override
- @Nonnull
- public String getMessage() {
- return "Verbosity level '" + verbosity.name().toLowerCase() + "' is deprecated";
- }
-
- @Override
- @Nonnull
- public ProblemLevel getDefaultProblemLevel() {
- return ProblemLevel.WARNING;
- }
-
- }
-
/**
* Assertion policies
*/
@@ -268,19 +250,6 @@
BooleanPropertyId.create("jack.dex", "Generate dex file").addDefaultValue(Boolean.FALSE)
.addCategory(DumpInLibrary.class);
- /**
- * property used to specify the kind of switch enum optimization that is enabled. See(@link
- * SwitchEnumOptStrategy)
- */
- @Nonnull
- public static final EnumPropertyId<SwitchEnumOptStrategy> OPTIMIZED_ENUM_SWITCH =
- EnumPropertyId.create(
- "jack.optimization.enum.switch", "Optimize enum switch", SwitchEnumOptStrategy.class)
- .addDefaultValue(SwitchEnumOptStrategy.NEVER)
- .ignoreCase()
- .addCategory(DumpInLibrary.class)
- .addCategory(PrebuiltCompatibility.class);
-
@Nonnull
public static final BooleanPropertyId GENERATE_DEX_IN_LIBRARY = BooleanPropertyId
.create("jack.library.dex", "Generate dex files in library").addDefaultValue(Boolean.TRUE)
@@ -414,63 +383,6 @@
private final File propertiesFile = null;
- /**
- * Jack verbosity level.
- * Note: The implementation of {@link ProblemLevel} assumes that the ordinal values of
- * {@link VerbosityLevel} are ordered from the highest severity to the lowest.
- */
- @VariableName("level")
- public enum VerbosityLevel {
- @EnumName(name = "error")
- ERROR("error"),
- @EnumName(name = "warning")
- WARNING("warning"),
- @EnumName(name = "info")
- INFO("info"),
- @EnumName(name = "debug", hide = true)
- @Deprecated DEBUG("debug"),
- @EnumName(name = "trace", hide = true)
- @Deprecated TRACE("trace");
-
- @Nonnull
- private final String id;
-
- VerbosityLevel(@Nonnull String id) {
- this.id = id;
- }
-
- public String getId() {
- return id;
- }
- }
-
- /**
- * Types of switch enum optimization strategies.
- * 1. feedback (set on by default)
- * 2. always
- * 3. never
- */
- @VariableName("strategy")
- public enum SwitchEnumOptStrategy {
- // feedback-based optimization: this strategy will be enabled/disabled based on the
- // compile time information collected, e.g., if it is detected that an enum is only
- // used in one/few switch statements, it is useless to optimize it. Potentially enable
- // this strategy will cost more compilation time, but save more dex code
- @EnumName(name = "feedback")
- FEEDBACK(),
- // different from feedback-based optimization, always strategy doesn't collect compile-
- // time information to guide switch enum optimization. It will always enable switch enum
- // optimization no matter the enum is rarely/frequently used. Ideally this strategy will
- // compile code quicker than feedback-based strategy does, but the generated dex may be
- // larger than feedback strategy
- @EnumName(name = "always")
- ALWAYS(),
- // this actually is not real strategy, but we still need it because switch enum
- // optimization is disabled when incremental compilation is triggered
- @EnumName(name = "never")
- NEVER();
- }
-
@Nonnull
public static final EnumPropertyId<VerbosityLevel> VERBOSITY_LEVEL = EnumPropertyId.create(
"jack.verbose.level", "Verbosity level", VerbosityLevel.class)
@@ -717,8 +629,13 @@
.addDefaultValue(Boolean.TRUE);
@Nonnull
- public static final BooleanPropertyId SHROB_ENABLED =
- BooleanPropertyId.create("jack.shrob", "Enable shrink and obfuscation features")
+ public static final BooleanPropertyId SHRINKING_ENABLED =
+ BooleanPropertyId.create("jack.shrob.shrink", "Enable shrinking feature")
+ .addDefaultValue(false).addCategory(DumpInLibrary.class);
+
+ @Nonnull
+ public static final BooleanPropertyId OBFUSCATION_ENABLED =
+ BooleanPropertyId.create("jack.shrob.obfuscate", "Enable obfuscation feature")
.addDefaultValue(false).addCategory(DumpInLibrary.class);
@CheckForNull
@@ -734,6 +651,19 @@
"Use mixed case class name when obfuscating")
.addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class);
+ @Nonnull
+ public static final BooleanPropertyId EMIT_CLASS_FILES =
+ BooleanPropertyId.create("jack.class-file", "Generate class files")
+ .addDefaultValue(false);
+
+ @Nonnull
+ public static final PropertyId<Directory> EMIT_CLASS_FILES_FOLDER =
+ PropertyId.create(
+ "jack.class-file.output.dir",
+ "Output folder for class files",
+ new DirectoryCodec(Existence.MUST_EXIST, Permission.WRITE | Permission.READ))
+ .requiredIf(EMIT_CLASS_FILES.getValue().isTrue());
+
@SuppressWarnings("unchecked")
@Nonnull
public static final ImplementationPropertyId<Filter<JMethod>> METHOD_FILTER =
@@ -857,6 +787,12 @@
.setSeparator(",")
.ensureUnicity();
+ @Nonnull
+ public static final BooleanPropertyId FORCE_PLAN_AMENDER = BooleanPropertyId
+ .create("jack.plan-amender.force", "Force plan amender")
+ .addDefaultValue(false)
+ .addCategory(Private.class);
+
public void ensurePluginManager()
throws IllegalOptionsException {
if (pluginManager == null) {
@@ -1079,11 +1015,17 @@
configBuilder.pushDefaultLocation(new StringLocation("proguard flags"));
+ configBuilder.set(SHRINKING_ENABLED, flags != null && flags.shrink());
+ configBuilder.set(OBFUSCATION_ENABLED, flags != null && flags.obfuscate());
+
if (flags != null) {
- configBuilder.set(SHROB_ENABLED, true);
- configBuilder.set(Options.USE_PREBUILT_FROM_LIBRARY, false);
- logger.log(Level.WARNING,
- "Prebuilts from libraries are not used due to usage of shrinking or obfuscation");
+ if (flags.obfuscate() || flags.shrink()) {
+ configBuilder.set(Options.USE_PREBUILT_FROM_LIBRARY, false);
+ logger
+ .log(
+ Level.WARNING,
+ "Prebuilts from libraries are not use due to usage of shrinking or obfuscation");
+ }
if (flags.obfuscate()) { // keepAttribute only makes sense when obfuscating
boolean emitRuntimeInvisibleAnnotation = flags.keepAttribute("RuntimeInvisibleAnnotations");
@@ -1106,8 +1048,22 @@
ParameterAnnotationRemover.EMIT_RUNTIME_RETENTION_PARAMETER_ANNOTATION,
flags.keepAttribute("RuntimeVisibleParameterAnnotations"));
- configBuilder.set(EMIT_LINE_NUMBER_DEBUG_INFO, flags.keepAttribute("LineNumberTable"));
- configBuilder.set(EMIT_LOCAL_DEBUG_INFO, flags.keepAttribute("LocalVariableTable"));
+ boolean keepLineNumbers = flags.keepAttribute("LineNumberTable");
+ configBuilder.set(RemoveLocalLineNumber.KEEP_LOCAL_LINE_NUMBER,
+ keepLineNumbers);
+ if (!keepLineNumbers) {
+ configBuilder.set(RemoveParameterLineNumber.KEEP_PARAMETER_LINE_NUMBER,
+ flags.getKeepParameterNames());
+ } else {
+ configBuilder.set(RemoveParameterLineNumber.KEEP_PARAMETER_LINE_NUMBER, true);
+ }
+ boolean keepNames = flags.keepAttribute("LocalVariableTable");
+ configBuilder.set(RemoveLocalVariableName.KEEP_LOCAL_NAME, keepNames);
+ if (!keepNames) {
+ configBuilder.set(RemoveParameterName.KEEP_PARAMETER_NAME, flags.getKeepParameterNames());
+ } else {
+ configBuilder.set(RemoveParameterName.KEEP_PARAMETER_NAME, true);
+ }
}
configBuilder.set(Options.FLAGS, flags);
@@ -1259,7 +1215,7 @@
if (multiDexKind == MultiDexKind.LEGACY) {
logger.log(Level.WARNING,
"Incremental mode is disabled due to multi-dex legacy mode");
- } else if (flags != null) {
+ } else if (flags != null && (flags.shrink() || flags.obfuscate())) {
logger.log(Level.WARNING,
"Incremental mode is disabled due to usage of shrinking or obfuscation");
} else if (!jarjarRulesFiles.isEmpty()) {
@@ -1302,7 +1258,8 @@
// if the incremental compilation is enabled, the switch enum optimization cannot
// be enabled because it will generates non-deterministic code. This has to be done after
// -D options are set
- configBuilder.set(OPTIMIZED_ENUM_SWITCH.getName(), SwitchEnumOptStrategy.NEVER);
+ configBuilder.set(
+ OptimizedSwitchEnumSupport.OPTIMIZED_ENUM_SWITCH.getName(), SwitchEnumOptStrategy.NEVER);
}
configBuilder.processEnvironmentVariables("JACK_CONFIG_");
@@ -1334,6 +1291,11 @@
if (!config.get(Options.ANNOTATION_PROCESSOR_ENABLED).booleanValue()) {
ecjExtraArguments.add("-proc:none");
}
+
+ if (config.get(Options.EMIT_CLASS_FILES).booleanValue()) {
+ ecjExtraArguments.add("-d");
+ ecjExtraArguments.add(config.get(Options.EMIT_CLASS_FILES_FOLDER).getPath());
+ }
}
// Check Jack arguments
@@ -1345,7 +1307,9 @@
}
if (verbose == VerbosityLevel.DEBUG || verbose == VerbosityLevel.TRACE) {
- config.get(Reporter.REPORTER).report(Severity.NON_FATAL, new DeprecatedVerbosity(verbose));
+ config
+ .get(Reporter.REPORTER)
+ .report(Severity.NON_FATAL, new VerbosityLevel.DeprecatedVerbosity(verbose));
}
}
diff --git a/jack/src/com/android/jack/VerbosityLevel.java b/jack/src/com/android/jack/VerbosityLevel.java
new file mode 100644
index 0000000..b710946
--- /dev/null
+++ b/jack/src/com/android/jack/VerbosityLevel.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack;
+
+import com.android.jack.reporting.Reportable;
+import com.android.jack.reporting.Reportable.ProblemLevel;
+import com.android.sched.util.codec.EnumName;
+import com.android.sched.util.codec.VariableName;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Jack verbosity level.
+ * Note: The implementation of {@link ProblemLevel} assumes that the ordinal values of
+ * {@link VerbosityLevel} are ordered from the highest severity to the lowest.
+ */
+@VariableName("level")
+public enum VerbosityLevel {
+ @EnumName(name = "error")
+ ERROR("error"),
+ @EnumName(name = "warning")
+ WARNING("warning"),
+ @EnumName(name = "info")
+ INFO("info"),
+ @EnumName(name = "debug", hide = true)
+ @Deprecated DEBUG("debug"),
+ @EnumName(name = "trace", hide = true)
+ @Deprecated TRACE("trace");
+
+ @Nonnull
+ private final String id;
+
+ VerbosityLevel(@Nonnull String id) {
+ this.id = id;
+ }
+
+ @Nonnull
+ public String getId() {
+ return id;
+ }
+
+ static class DeprecatedVerbosity implements Reportable {
+ @Nonnull
+ private final VerbosityLevel verbosity;
+
+ DeprecatedVerbosity(@Nonnull VerbosityLevel verbosity) {
+ this.verbosity = verbosity;
+ }
+
+ @Override
+ @Nonnull
+ public String getMessage() {
+ return "Verbosity level '" + verbosity.name().toLowerCase() + "' is deprecated";
+ }
+
+ @Override
+ @Nonnull
+ public ProblemLevel getDefaultProblemLevel() {
+ return ProblemLevel.WARNING;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/jack/src/com/android/jack/analysis/tracer/Tracer.java b/jack/src/com/android/jack/analysis/tracer/Tracer.java
index add7ca7..1f2edab 100644
--- a/jack/src/com/android/jack/analysis/tracer/Tracer.java
+++ b/jack/src/com/android/jack/analysis/tracer/Tracer.java
@@ -352,7 +352,7 @@
public void endVisit(@Nonnull JMethodCall mc) {
JType returnType = mc.getType();
trace(returnType);
- JMethodIdWide methodId = mc.getMethodId();
+ JMethodIdWide methodId = mc.getMethodIdWide();
JClassOrInterface receiverType = mc.getReceiverType();
trace(receiverType);
JMethod implementationOrDefinition = null;
@@ -391,7 +391,7 @@
public void endVisit(@Nonnull JNewInstance newInstance) {
JClass returnType = newInstance.getType();
trace(returnType);
- JMethodIdWide methodId = newInstance.getMethodId();
+ JMethodIdWide methodId = newInstance.getMethodIdWide();
trace(methodId, returnType, JPrimitiveTypeEnum.VOID.getType(),
false /* mustTraceOverridingMethods */);
}
@@ -567,7 +567,10 @@
public void endVisit(@Nonnull JVariableRef x) {
DebugVariableInfoMarker debugInfo = x.getMarker(DebugVariableInfoMarker.class);
if (debugInfo != null) {
- trace(debugInfo.getType());
+ JType debugInfoType = debugInfo.getType();
+ if (debugInfoType != null) {
+ trace(debugInfoType);
+ }
}
}
diff --git a/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java b/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java
index cbdaec4..a5da41d 100644
--- a/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java
+++ b/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java
@@ -398,22 +398,22 @@
@Override
public void setVerbosityLevel(@Nonnull VerbosityLevel verbosityLevel)
throws ConfigurationException {
- com.android.jack.Options.VerbosityLevel jackVerbosityLevel;
+ com.android.jack.VerbosityLevel jackVerbosityLevel;
switch (verbosityLevel) {
case DEBUG: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.INFO;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.INFO;
break;
}
case ERROR: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.ERROR;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.ERROR;
break;
}
case INFO: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.INFO;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.INFO;
break;
}
case WARNING: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.WARNING;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.WARNING;
break;
}
default: {
diff --git a/jack/src/com/android/jack/api/v02/impl/Api02ConfigImpl.java b/jack/src/com/android/jack/api/v02/impl/Api02ConfigImpl.java
index 1b52ced..69f06cd 100644
--- a/jack/src/com/android/jack/api/v02/impl/Api02ConfigImpl.java
+++ b/jack/src/com/android/jack/api/v02/impl/Api02ConfigImpl.java
@@ -79,18 +79,18 @@
@Override
public void setVerbosityLevel(@Nonnull VerbosityLevel verbosityLevel)
throws ConfigurationException {
- com.android.jack.Options.VerbosityLevel jackVerbosityLevel;
+ com.android.jack.VerbosityLevel jackVerbosityLevel;
switch (verbosityLevel) {
case ERROR: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.ERROR;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.ERROR;
break;
}
case INFO: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.INFO;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.INFO;
break;
}
case WARNING: {
- jackVerbosityLevel = com.android.jack.Options.VerbosityLevel.WARNING;
+ jackVerbosityLevel = com.android.jack.VerbosityLevel.WARNING;
break;
}
default: {
diff --git a/jack/src/com/android/jack/backend/ResourceWriter.java b/jack/src/com/android/jack/backend/ResourceWriter.java
index c7aa0f7..c48b5d3 100644
--- a/jack/src/com/android/jack/backend/ResourceWriter.java
+++ b/jack/src/com/android/jack/backend/ResourceWriter.java
@@ -73,7 +73,7 @@
InputVFile inputFile = resource.getVFile();
VPath path = resource.getPath();
try {
- OutputVFile outputFile = outputVDir.getRootOutputVDir().createOutputVFile(path);
+ OutputVFile outputFile = outputVDir.getRootDir().createOutputVFile(path);
outputFile.copy(inputFile);
} catch (CannotCreateFileException | WrongPermissionException | CannotCloseException
| CannotReadException | CannotWriteException e) {
diff --git a/jack/src/com/android/jack/backend/dex/AnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/AnnotationBuilder.java
index 1f328c8..15e42d5 100644
--- a/jack/src/com/android/jack/backend/dex/AnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/AnnotationBuilder.java
@@ -106,7 +106,7 @@
@Nonnull
private Annotation createAnnotation(@Nonnull JAnnotation annotation)
throws SourceAnnotationException, BuildAnnotationException {
- Annotation ropAnnotation = new Annotation(RopHelper.getCstType(annotation.getType()),
+ Annotation ropAnnotation = new Annotation(RopHelper.convertTypeToDx(annotation.getType()),
getVisibility(annotation.getRetentionPolicy()));
constantBuilder.createAnnotationPairs(annotation, ropAnnotation);
ropAnnotation.setImmutable();
diff --git a/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java
index 83c9629..8c3b6c7 100644
--- a/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/ClassAnnotationBuilder.java
@@ -38,7 +38,7 @@
import javax.annotation.Nonnull;
/**
- * Builds the {@link com.android.dx.rop.annotation.Annotations Annotations} of a class or interface.
+ * Builds the {@link Annotations} of a class or interface.
*/
@Description("Builds the rop annotations of a JDeclaredType.")
@Constraint(need = ClassDefItemMarker.class, no = AnnotationMethodDefaultValue.class)
diff --git a/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java b/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java
index ce3d7ba..548c503 100644
--- a/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/ClassDefItemBuilder.java
@@ -22,7 +22,7 @@
import com.android.jack.dx.dex.file.ClassDefItem;
import com.android.jack.dx.rop.code.AccessFlags;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
import com.android.jack.ir.ast.JClass;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
@@ -44,8 +44,8 @@
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
import com.android.sched.util.config.ThreadConfig;
-import com.android.sched.util.file.FileUtils;
+import java.io.File;
import java.util.List;
import javax.annotation.CheckForNull;
@@ -100,35 +100,28 @@
@Nonnull
private ClassDefItem createClassDefItem(@Nonnull JDefinedClassOrInterface type)
throws JTypeLookupException {
- CstType thisClass = RopHelper.getCstType(type);
- CstType superclassType = createSuperClass(type);
- int accessFlags = getDxAccessFlagsForType(type);
- TypeList interfaces = createInterfacesList(type);
CstString sourceFile = null;
if (emitSourceFileInfo) {
sourceFile = createSourceFile(type);
}
- ClassDefItem classDefItem = new ClassDefItem(thisClass, accessFlags,
- superclassType, interfaces, sourceFile);
- return classDefItem;
+ return new ClassDefItem(RopHelper.convertTypeToDx(type), getDxAccessFlagsForType(type),
+ createSuperClass(type), createInterfacesList(type), sourceFile);
}
@CheckForNull
- private static CstType createSuperClass(@Nonnull JDefinedClassOrInterface type)
+ private static Type createSuperClass(@Nonnull JDefinedClassOrInterface type)
throws JTypeLookupException {
JClass superClass = type.getSuperClass();
if (superClass == null) {
if (type instanceof JDefinedInterface) {
- return RopHelper.getCstType(
- Jack.getSession().getPhantomLookup().getClass(CommonTypes.JAVA_LANG_OBJECT));
+ superClass = Jack.getSession().getPhantomLookup().getClass(CommonTypes.JAVA_LANG_OBJECT);
} else {
assert type.isSameType(
Jack.getSession().getPhantomLookup().getClass(CommonTypes.JAVA_LANG_OBJECT));
return null;
}
}
- CstType superclassType = RopHelper.getCstType(superClass);
- return superclassType;
+ return RopHelper.convertTypeToDx(superClass);
}
@Nonnull
@@ -145,8 +138,7 @@
if (sourceInfo != SourceInfo.UNKNOWN) {
// Only keep filename without the path
String sourceFileName = sourceInfo.getFileName();
- String fileSeparator = FileUtils.getFileSeparator();
- int separatorPos = sourceFileName.lastIndexOf(fileSeparator);
+ int separatorPos = sourceFileName.lastIndexOf(File.separatorChar);
if (separatorPos > 0) {
sourceFileName = sourceFileName.substring(separatorPos + 1);
}
diff --git a/jack/src/com/android/jack/backend/dex/ClassDefItemMarkerRemover.java b/jack/src/com/android/jack/backend/dex/ClassDefItemMarkerRemover.java
index de11a57..41eb0a9 100644
--- a/jack/src/com/android/jack/backend/dex/ClassDefItemMarkerRemover.java
+++ b/jack/src/com/android/jack/backend/dex/ClassDefItemMarkerRemover.java
@@ -17,10 +17,12 @@
package com.android.jack.backend.dex;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
import com.android.jack.scheduling.marker.ClassDefItemMarker;
import com.android.sched.item.Description;
import com.android.sched.item.Name;
import com.android.sched.schedulable.Constraint;
+import com.android.sched.schedulable.Filter;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
@@ -35,6 +37,7 @@
@Name("ClassDefItemMarkerRemover")
@Constraint(need = ClassDefItemMarker.class)
@Transform(remove = ClassDefItemMarker.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
public class ClassDefItemMarkerRemover implements RunnableSchedulable<JDefinedClassOrInterface> {
@Override
diff --git a/jack/src/com/android/jack/backend/dex/ConstantBuilder.java b/jack/src/com/android/jack/backend/dex/ConstantBuilder.java
index 303c9e8..cf566ef 100644
--- a/jack/src/com/android/jack/backend/dex/ConstantBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/ConstantBuilder.java
@@ -32,8 +32,8 @@
import com.android.jack.dx.rop.cst.CstInteger;
import com.android.jack.dx.rop.cst.CstKnownNull;
import com.android.jack.dx.rop.cst.CstLong;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstShort;
+import com.android.jack.dx.rop.cst.CstString;
import com.android.jack.ir.ast.JAbstractStringLiteral;
import com.android.jack.ir.ast.JAnnotation;
import com.android.jack.ir.ast.JArrayLiteral;
@@ -72,7 +72,7 @@
@Override
public boolean visit(@Nonnull JAnnotation annotation) {
- Annotation ropAnnotation = new Annotation(RopHelper.getCstType(annotation.getType()),
+ Annotation ropAnnotation = new Annotation(RopHelper.convertTypeToDx(annotation.getType()),
AnnotationVisibility.EMBEDDED);
createAnnotationPairs(annotation, ropAnnotation);
ropAnnotation.setImmutable();
@@ -100,14 +100,14 @@
@Override
public boolean visit(@Nonnull JEnumLiteral literal) {
- CstNat nat = RopHelper.createSignature(literal.getFieldId());
- result = new CstEnumRef(nat);
+ result = new CstEnumRef(new CstString(literal.getFieldId().getName()),
+ RopHelper.convertTypeToDx(literal.getType()));
return false;
}
@Override
public boolean visit(@Nonnull JClassLiteral literal) {
- result = RopHelper.getCstType(literal.getRefType());
+ result = RopHelper.convertTypeToDx(literal.getRefType());
return false;
}
diff --git a/jack/src/com/android/jack/backend/dex/DexAnnotations.java b/jack/src/com/android/jack/backend/dex/DexAnnotations.java
index 96ad6fb..e89c071 100644
--- a/jack/src/com/android/jack/backend/dex/DexAnnotations.java
+++ b/jack/src/com/android/jack/backend/dex/DexAnnotations.java
@@ -36,4 +36,6 @@
final String ANNOTATION_THROWS = "Ldalvik/annotation/Throws;";
@Nonnull
final String ANNOTATION_SIGNATURE = "Ldalvik/annotation/Signature;";
+ @Nonnull
+ final String ANNOTATION_METHOD_PARAMETERS = "Ldalvik/annotation/MethodParameters;";
}
diff --git a/jack/src/com/android/jack/backend/dex/DexWritingTool.java b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
index af6e5cb..408e512 100644
--- a/jack/src/com/android/jack/backend/dex/DexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
@@ -38,8 +38,10 @@
import com.android.jack.util.AndroidApiLevel;
import com.android.sched.util.codec.VariableName;
import com.android.sched.util.config.ThreadConfig;
+import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotReadException;
+import com.android.sched.util.file.CannotWriteException;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.Location;
import com.android.sched.util.log.Event;
@@ -63,7 +65,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Set;
-import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.CheckForNull;
@@ -121,8 +122,9 @@
@Nonnull
private final AndroidApiLevel apiLevel = ThreadConfig.get(Options.ANDROID_MIN_API_LEVEL);
- private final boolean usePrebuilts =
- ThreadConfig.get(Options.USE_PREBUILT_FROM_LIBRARY).booleanValue();
+ protected final boolean usePrebuilts =
+ ThreadConfig.get(Options.USE_PREBUILT_FROM_LIBRARY).booleanValue();
+
@Nonnull
protected DexFile createDexFile() {
@@ -135,17 +137,13 @@
protected void finishMerge(@Nonnull JackMerger merger, @Nonnull OutputVFile out)
throws DexWritingException {
try (Event event = tracer.open(JackEventType.DEX_MERGER_FINISH)) {
- OutputStream os = null;
try {
- try {
- os = new BufferedOutputStream(out.getOutputStream());
- merger.finish(os);
- } finally {
- if (os != null) {
- os.close();
- }
+ try (OutputStream os = new BufferedOutputStream(out.getOutputStream())) {
+ merger.finish(os, out);
+ } catch (IOException e) {
+ throw new CannotCloseException(out, e);
}
- } catch (IOException | WrongPermissionException e) {
+ } catch (CannotWriteException | CannotCloseException | WrongPermissionException e) {
throw new DexWritingException(e);
}
}
@@ -153,23 +151,15 @@
protected void mergeDex(@Nonnull JackMerger merger, InputVFile inputDex)
throws MergingOverflowException, DexWritingException {
- InputStream inputStream = null;
+
try {
- inputStream = inputDex.getInputStream();
- merger.addDexFile(new DexBuffer(inputStream));
- } catch (IOException e) {
- throw new DexWritingException(new CannotReadException(inputDex, e));
- } catch (WrongPermissionException e) {
- throw new DexWritingException(e);
- } finally {
- if (inputStream != null) {
- try {
- inputStream.close();
- } catch (IOException e) {
- logger.log(
- Level.WARNING, "Failed to close ''{0}''", inputDex.getLocation().getDescription());
- }
+ try (InputStream inputStream = inputDex.getInputStream()) {
+ merger.addDexFile(new DexBuffer(inputStream, inputDex.getLocation()));
+ } catch (IOException e) {
+ throw new CannotCloseException(inputDex, e);
}
+ } catch (CannotCloseException | CannotReadException | WrongPermissionException e) {
+ throw new DexWritingException(e);
}
}
@@ -184,7 +174,7 @@
dexName = DexFileWriter.DEX_PREFIX + dexCount + DexFileWriter.DEX_FILE_EXTENSION;
}
try {
- return outputVfs.getRootOutputVDir().createOutputVFile(new VPath(dexName, '/'));
+ return outputVfs.getRootDir().createOutputVFile(new VPath(dexName, '/'));
} catch (CannotCreateFileException e) {
throw new DexWritingException(e);
}
@@ -215,7 +205,10 @@
anyDexList.add(new MatchableInputVFile(getDexInputVFileOfType(jackOutputLibrary, type)));
}
- addOrphanDexFiles(mainDexList, new HashSet<MatchableInputVFile>(anyDexList));
+ if (usePrebuilts) {
+ DexWritingTool.addOrphanDexFiles(/*outputLibrary = */ null, mainDexList,
+ new HashSet<MatchableInputVFile>(anyDexList));
+ }
}
@Nonnull
@@ -245,36 +238,40 @@
return inputVFile;
}
- protected void addOrphanDexFiles(@Nonnull Set<MatchableInputVFile> mainDexToMerge) {
- addOrphanDexFiles(mainDexToMerge, Collections.<MatchableInputVFile>emptySet());
+ static void addOrphanDexFiles(@CheckForNull OutputJackLibrary outputLibrary,
+ @Nonnull Set<MatchableInputVFile> mainDexToMerge) {
+ DexWritingTool.addOrphanDexFiles(outputLibrary, mainDexToMerge,
+ Collections.<MatchableInputVFile>emptySet());
}
/**
* Orphan dex file is a dex file without an associated Jayce file.
*/
- @Nonnull
- protected void addOrphanDexFiles(@Nonnull Set<MatchableInputVFile> mainDexToMerge,
+ static void addOrphanDexFiles(@CheckForNull OutputJackLibrary outputLibrary,
+ @Nonnull Set<MatchableInputVFile> mainDexToMerge,
@Nonnull Set<MatchableInputVFile> othersDexToMerge) {
- if (usePrebuilts) {
- for (InputLibrary inputLibrary : Jack.getSession().getImportedLibraries()) {
- if (inputLibrary instanceof InputJackLibrary) {
- InputJackLibrary inputJackLibrary = (InputJackLibrary) inputLibrary;
- Iterator<InputVFile> dexFileIt = inputJackLibrary.iterator(FileType.PREBUILT);
- while (dexFileIt.hasNext()) {
- InputVFile dexFile = dexFileIt.next();
- String dexFilePath = dexFile.getPathFromRoot().getPathAsString('/');
- int indexOfDexExtension = dexFilePath.indexOf(DexFileWriter.DEX_FILE_EXTENSION);
- // Prebuilt section of library does not contains only dex files
- if (indexOfDexExtension != -1) {
- String type =
- dexFilePath.substring(0, dexFilePath.indexOf(DexFileWriter.DEX_FILE_EXTENSION));
- try {
- inputJackLibrary.getFile(FileType.JAYCE, new VPath(type, '/'));
- } catch (FileTypeDoesNotExistException e) {
- MatchableInputVFile orphanDex = new MatchableInputVFile(dexFile);
- if (!othersDexToMerge.contains(orphanDex)) {
- mainDexToMerge.add(orphanDex);
- }
+ for (InputLibrary inputLibrary : Jack.getSession().getImportedLibraries()) {
+ if (inputLibrary instanceof InputJackLibrary) {
+ InputJackLibrary inputJackLibrary = (InputJackLibrary) inputLibrary;
+ if (outputLibrary != null
+ && outputLibrary.containsLibraryLocation(inputJackLibrary.getLocation())) {
+ continue;
+ }
+ Iterator<InputVFile> dexFileIt = inputJackLibrary.iterator(FileType.PREBUILT);
+ while (dexFileIt.hasNext()) {
+ InputVFile dexFile = dexFileIt.next();
+ String dexFilePath = dexFile.getPathFromRoot().getPathAsString('/');
+ int indexOfDexExtension = dexFilePath.indexOf(DexFileWriter.DEX_FILE_EXTENSION);
+ // Prebuilt section of library does not contains only dex files
+ if (indexOfDexExtension != -1) {
+ String type =
+ dexFilePath.substring(0, dexFilePath.indexOf(DexFileWriter.DEX_FILE_EXTENSION));
+ try {
+ inputJackLibrary.getFile(FileType.JAYCE, new VPath(type, '/'));
+ } catch (FileTypeDoesNotExistException e) {
+ MatchableInputVFile orphanDex = new MatchableInputVFile(dexFile);
+ if (!othersDexToMerge.contains(orphanDex)) {
+ mainDexToMerge.add(orphanDex);
}
}
}
diff --git a/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java
index f5be1e9..20923ef 100644
--- a/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/FieldAnnotationBuilder.java
@@ -40,7 +40,7 @@
import javax.annotation.Nonnull;
/**
- * Builds the {@link com.android.dx.rop.annotation.Annotations Annotations} of a field.
+ * Builds the {@link Annotations} of a field.
*/
@Description("Builds the rop annotations of a field")
@Synchronized
diff --git a/jack/src/com/android/jack/backend/dex/FieldInitializerRemover.java b/jack/src/com/android/jack/backend/dex/FieldInitializerRemover.java
index aa05ab9..db05111 100644
--- a/jack/src/com/android/jack/backend/dex/FieldInitializerRemover.java
+++ b/jack/src/com/android/jack/backend/dex/FieldInitializerRemover.java
@@ -29,6 +29,7 @@
import com.android.jack.ir.ast.JFieldInitializer;
import com.android.jack.ir.ast.JIntLiteral;
import com.android.jack.ir.ast.JLiteral;
+import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JPrimitiveType;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JReferenceType;
@@ -97,7 +98,9 @@
JFieldInitializer declaration = field.getFieldInitializer();
if (declaration != null) {
JExpression initialValue = declaration.getInitializer();
- TransformationRequest tr = new TransformationRequest(declaration.getParent());
+ final JNode declarationParent = declaration.getParent();
+ assert declarationParent != null;
+ TransformationRequest tr = new TransformationRequest(declarationParent);
if (/* Field is static final and initialized by a literal */
field.isStatic() && field.isFinal() && initialValue instanceof JLiteral
/* Object field initialized by a String literal: don't remove unless allowed */
diff --git a/jack/src/com/android/jack/backend/dex/MainDexCollector.java b/jack/src/com/android/jack/backend/dex/MainDexCollector.java
index 273065a..b714264 100644
--- a/jack/src/com/android/jack/backend/dex/MainDexCollector.java
+++ b/jack/src/com/android/jack/backend/dex/MainDexCollector.java
@@ -51,8 +51,8 @@
public class MainDexCollector extends TypeReferenceCollector
implements RunnableSchedulable<JDefinedClassOrInterface> {
- private final boolean isShrinkEnabled = ThreadConfig.get(Options.SHROB_ENABLED).booleanValue()
- && ThreadConfig.get(Options.FLAGS).shrink();
+ private final boolean isShrinkEnabled =
+ ThreadConfig.get(Options.SHRINKING_ENABLED).booleanValue();
@Override
protected void collect(@Nonnull JType type) {
diff --git a/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java b/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java
index c2477a2..765558e 100644
--- a/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/MethodAnnotationBuilder.java
@@ -17,6 +17,8 @@
package com.android.jack.backend.dex;
import com.android.jack.Options;
+import com.android.jack.backend.dex.annotations.tag.ParameterMetadataAnnotation;
+import com.android.jack.backend.dex.annotations.tag.ParameterMetadataFeature;
import com.android.jack.backend.dex.rop.RopHelper;
import com.android.jack.dx.dex.file.ClassDefItem;
import com.android.jack.dx.rop.annotation.Annotations;
@@ -44,15 +46,17 @@
import javax.annotation.Nonnull;
/**
- * Builds the {@link com.android.dx.rop.annotation.Annotations Annotations} of a method.
+ * Builds the {@link Annotations} of a method.
*/
@Description("Builds the rop annotations of a method")
@Synchronized
@Constraint(need = {ClassDefItemMarker.class, ClassDefItemMarker.Method.class})
@Transform(add = ClassDefItemMarker.MethodAnnotation.class, modify = ClassDefItemMarker.class)
@Use(AnnotationBuilder.class)
-@Optional(@ToSupport(feature = SourceVersion8.class,
- add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)))
+@Optional({@ToSupport(feature = SourceVersion8.class,
+ add = @Constraint(no = JAnnotation.RepeatedAnnotation.class)),
+ @ToSupport(feature = ParameterMetadataFeature.class,
+ add = @Constraint(need = ParameterMetadataAnnotation.class))})
@Filter(TypeWithoutPrebuiltFilter.class)
public class MethodAnnotationBuilder implements RunnableSchedulable<JMethod> {
diff --git a/jack/src/com/android/jack/backend/dex/MethodBodyRemover.java b/jack/src/com/android/jack/backend/dex/MethodBodyRemover.java
index 575fb18..7f07b81 100644
--- a/jack/src/com/android/jack/backend/dex/MethodBodyRemover.java
+++ b/jack/src/com/android/jack/backend/dex/MethodBodyRemover.java
@@ -20,7 +20,9 @@
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodBody;
import com.android.jack.scheduling.feature.DropMethodBody;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
import com.android.sched.item.Description;
+import com.android.sched.schedulable.Filter;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Support;
import com.android.sched.schedulable.Transform;
@@ -34,6 +36,7 @@
@Description("Drop method body")
@Transform(remove = {JMethodBody.class})
@Support(DropMethodBody.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
public class MethodBodyRemover implements RunnableSchedulable<JMethod> {
@Nonnull
diff --git a/jack/src/com/android/jack/backend/dex/OrphanDexFileWriter.java b/jack/src/com/android/jack/backend/dex/OrphanDexFileWriter.java
new file mode 100644
index 0000000..a61d66d
--- /dev/null
+++ b/jack/src/com/android/jack/backend/dex/OrphanDexFileWriter.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.backend.dex;
+
+import com.android.jack.JackIOException;
+import com.android.jack.backend.dex.DexWritingTool.MatchableInputVFile;
+import com.android.jack.ir.ast.JSession;
+import com.android.jack.library.FileType;
+import com.android.jack.library.OutputJackLibrary;
+import com.android.sched.item.Description;
+import com.android.sched.item.Name;
+import com.android.sched.schedulable.Produce;
+import com.android.sched.schedulable.RunnableSchedulable;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.util.file.CannotReadException;
+import com.android.sched.util.file.CannotWriteException;
+import com.android.sched.util.file.WrongPermissionException;
+import com.android.sched.vfs.InputVFile;
+import com.android.sched.vfs.OutputVFile;
+import com.android.sched.vfs.VPath;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Write an orphan dex from an imported library to an output library.
+ */
+@Description("Write an orphan dex from an imported library to an output library")
+@Name("OrphanDexFileWriter")
+@Produce(DexInLibraryProduct.class)
+public class OrphanDexFileWriter extends DexWriter implements RunnableSchedulable<JSession> {
+
+ @Override
+ public void run(@Nonnull JSession session) {
+ Set<MatchableInputVFile> prebuiltOrphanDexFiles = new HashSet<>();
+ OutputJackLibrary outputLibrary = session.getJackOutputLibrary();
+
+ DexWritingTool.addOrphanDexFiles(outputLibrary, prebuiltOrphanDexFiles);
+
+ for (MatchableInputVFile matchableInput : prebuiltOrphanDexFiles) {
+ InputVFile in = matchableInput.getInputVFile();
+ String dexFilePath = in.getPathFromRoot().getPathAsString('/');
+ int indexOfDexExtension = dexFilePath.indexOf(DexFileWriter.DEX_FILE_EXTENSION);
+ assert indexOfDexExtension != -1;
+ String type = dexFilePath.substring(0, dexFilePath.indexOf(DexFileWriter.DEX_FILE_EXTENSION));
+ OutputVFile vFile;
+ try {
+ vFile = outputLibrary.createFile(FileType.PREBUILT, new VPath(type, '/'));
+ } catch (CannotCreateFileException e) {
+ throw new JackIOException("Could not create Dex file in output "
+ + outputLibrary.getLocation().getDescription() + " for type " + type, e);
+ }
+ try {
+ vFile.copy(in);
+ } catch (CannotCloseException | CannotReadException | CannotWriteException
+ | WrongPermissionException e) {
+ throw new JackIOException("Could not copy Dex file from "
+ + in.getLocation().getDescription() + " to " + vFile.getLocation().getDescription(), e);
+ }
+ }
+ }
+}
diff --git a/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java b/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
index 7e7dbe7..d66d84f 100644
--- a/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
@@ -47,7 +47,9 @@
for (JDefinedClassOrInterface type : Jack.getSession().getTypesToEmit()) {
dexToMerge.add(new MatchableInputVFile(getDexInputVFileOfType(jackOutputLibrary, type)));
}
- addOrphanDexFiles(dexToMerge);
+ if (usePrebuilts) {
+ DexWritingTool.addOrphanDexFiles(/*outputLibrary = */ null, dexToMerge);
+ }
try (Event event = tracer.open(JackEventType.DEX_MERGER)) {
JackMerger merger = new JackMerger(createDexFile());
diff --git a/jack/src/com/android/jack/backend/dex/annotations/ParameterMetadataAnnotationsAdder.java b/jack/src/com/android/jack/backend/dex/annotations/ParameterMetadataAnnotationsAdder.java
new file mode 100644
index 0000000..7fcebcb
--- /dev/null
+++ b/jack/src/com/android/jack/backend/dex/annotations/ParameterMetadataAnnotationsAdder.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.backend.dex.annotations;
+
+import com.android.jack.Jack;
+import com.android.jack.backend.dex.DexAnnotations;
+import com.android.jack.backend.dex.annotations.tag.ParameterMetadataAnnotation;
+import com.android.jack.backend.dex.annotations.tag.ParameterMetadataFeature;
+import com.android.jack.ir.ast.JAnnotation;
+import com.android.jack.ir.ast.JAnnotationType;
+import com.android.jack.ir.ast.JArrayLiteral;
+import com.android.jack.ir.ast.JIntLiteral;
+import com.android.jack.ir.ast.JLiteral;
+import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JModifier;
+import com.android.jack.ir.ast.JNameValuePair;
+import com.android.jack.ir.ast.JNullLiteral;
+import com.android.jack.ir.ast.JParameter;
+import com.android.jack.ir.ast.JRetentionPolicy;
+import com.android.jack.ir.ast.JStringLiteral;
+import com.android.jack.ir.ast.JType;
+import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.MethodKind;
+import com.android.jack.ir.sourceinfo.SourceInfo;
+import com.android.jack.library.DumpInLibrary;
+import com.android.jack.library.PrebuiltCompatibility;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
+import com.android.jack.transformations.request.AddAnnotation;
+import com.android.jack.transformations.request.PutNameValuePair;
+import com.android.jack.transformations.request.TransformationRequest;
+import com.android.sched.item.Description;
+import com.android.sched.schedulable.Filter;
+import com.android.sched.schedulable.Protect;
+import com.android.sched.schedulable.RunnableSchedulable;
+import com.android.sched.schedulable.Support;
+import com.android.sched.schedulable.Transform;
+import com.android.sched.schedulable.With;
+import com.android.sched.util.config.HasKeyId;
+import com.android.sched.util.config.id.BooleanPropertyId;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+/**
+ * Add "system annotation" to provide parameter metadata such as parameter names and modifiers.
+ */
+@HasKeyId
+@Description("Add annotations for parameter metadata")
+@Transform(add = {ParameterMetadataAnnotation.class, JAnnotation.class, JNameValuePair.class,
+ JStringLiteral.class, JIntLiteral.class, JArrayLiteral.class})
+@Protect(add = {JMethod.class, JParameter.class},
+ unprotect = @With(remove = ParameterMetadataAnnotation.class))
+@Filter(TypeWithoutPrebuiltFilter.class)
+@Support(ParameterMetadataFeature.class)
+public class ParameterMetadataAnnotationsAdder implements RunnableSchedulable<JMethod> {
+
+ @Nonnull
+ public static final BooleanPropertyId PARAMETER_ANNOTATION = BooleanPropertyId
+ .create("jack.dex.parameter.annotations", "Emit parameter annotations")
+ .addDefaultValue(Boolean.FALSE).addCategory(DumpInLibrary.class)
+ .addCategory(PrebuiltCompatibility.class);
+
+ @Nonnull
+ JAnnotationType methodParametersAnnotationType = Jack.getSession().getPhantomLookup()
+ .getAnnotationType(DexAnnotations.ANNOTATION_METHOD_PARAMETERS);
+
+ @Nonnull
+ JMethodIdWide namesMethodIdWide = methodParametersAnnotationType.getOrCreateMethodIdWide(
+ "names", Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL);
+
+ @Nonnull
+ JMethodIdWide accessFlagsMethodIdWide = methodParametersAnnotationType.getOrCreateMethodIdWide(
+ "accessFlags", Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL);
+
+ private static class Visitor extends JVisitor {
+
+ @Nonnull
+ private final List<JLiteral> names;
+ @Nonnull
+ private final List<JLiteral> accessFlags;
+ @Nonnull
+ private final SourceInfo si = SourceInfo.UNKNOWN;
+
+ public Visitor(@Nonnull int parameterCount) {
+ names = new ArrayList<>(parameterCount);
+ accessFlags = new ArrayList<>(parameterCount);
+ }
+
+ @Override
+ public boolean visit(@Nonnull JMethod method) {
+ for (JParameter parameter : method.getParams()) {
+ addParameterName(parameter.isNamePresent() ? parameter.getName() : null);
+ // Remove NAME_PRESENT modifier since it is only an internal modifier
+ accessFlags.add(new JIntLiteral(si, parameter.getModifier() & ~JModifier.NAME_PRESENT));
+ }
+
+ return super.visit(method);
+ }
+
+ private void addParameterName(@CheckForNull String parameterName) {
+ if (parameterName != null) {
+ names.add(new JStringLiteral(si, parameterName));
+ } else {
+ names.add(new JNullLiteral(si));
+ }
+ }
+ }
+
+ @Override
+ public void run(@Nonnull JMethod method) {
+ Visitor visitor = new Visitor(method.getParams().size());
+ visitor.accept(method);
+
+ writeParameterAnnotation(method, visitor.names, visitor.accessFlags);
+ }
+
+ private void writeParameterAnnotation(@Nonnull JMethod method, @Nonnull List<JLiteral> names,
+ @Nonnull List<JLiteral> accessFlags) {
+ TransformationRequest tr = new TransformationRequest(method);
+ SourceInfo si = SourceInfo.UNKNOWN;
+
+ JAnnotation annotation =
+ new JAnnotation(si, JRetentionPolicy.SYSTEM, methodParametersAnnotationType);
+ tr.append(new AddAnnotation(annotation, method));
+
+ JNameValuePair namesPair =
+ new JNameValuePair(si, namesMethodIdWide, new JArrayLiteral(si, names));
+ tr.append(new PutNameValuePair(annotation, namesPair));
+
+ JNameValuePair accessFlagsPair =
+ new JNameValuePair(si, accessFlagsMethodIdWide, new JArrayLiteral(si, accessFlags));
+ tr.append(new PutNameValuePair(annotation, accessFlagsPair));
+
+ tr.commit();
+ }
+}
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jack/src/com/android/jack/backend/dex/annotations/tag/ParameterMetadataAnnotation.java
similarity index 61%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jack/src/com/android/jack/backend/dex/annotations/tag/ParameterMetadataAnnotation.java
index 0b9fd92..a4627e5 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jack/src/com/android/jack/backend/dex/annotations/tag/ParameterMetadataAnnotation.java
@@ -14,7 +14,15 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+package com.android.jack.backend.dex.annotations.tag;
-public interface Interface {}
+import com.android.sched.item.Description;
+import com.android.sched.item.Tag;
+/**
+ * The tag {@code ParameterMetadataAnnotation} tells that the annotation for parameter metadatas
+ * have been added.
+ */
+@Description("Parameter metadatas annotations added.")
+public final class ParameterMetadataAnnotation implements Tag {
+}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableGenericSignature.java b/jack/src/com/android/jack/backend/dex/annotations/tag/ParameterMetadataFeature.java
similarity index 66%
rename from jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableGenericSignature.java
rename to jack/src/com/android/jack/backend/dex/annotations/tag/ParameterMetadataFeature.java
index 96e5795..1e8c37a 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableGenericSignature.java
+++ b/jack/src/com/android/jack/backend/dex/annotations/tag/ParameterMetadataFeature.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,15 +14,14 @@
* limitations under the License.
*/
-package com.android.jack.shrob.obfuscation.annotation;
+package com.android.jack.backend.dex.annotations.tag;
import com.android.sched.item.Description;
import com.android.sched.item.Feature;
/**
- * Represents the removal of the generic signatures of a local variable
+ * A {@link Feature} that represents that parameter metadata annotations are requested.
*/
-@Description("The removal of the generic signatures of a local variable")
-public class RemoveLocalVariableGenericSignature implements Feature {
-
+@Description("Parameter metadata annotations are requested.")
+public final class ParameterMetadataFeature implements Feature {
}
diff --git a/jack/src/com/android/jack/backend/dex/invokecustom/InvokeCustomHelper.java b/jack/src/com/android/jack/backend/dex/invokecustom/InvokeCustomHelper.java
index 5e4917a..ea21614 100644
--- a/jack/src/com/android/jack/backend/dex/invokecustom/InvokeCustomHelper.java
+++ b/jack/src/com/android/jack/backend/dex/invokecustom/InvokeCustomHelper.java
@@ -29,11 +29,11 @@
import com.android.jack.dx.rop.cst.CstMethodHandleRef;
import com.android.jack.dx.rop.cst.CstMethodHandleRef.MethodHandleKind;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstPrototypeRef;
import com.android.jack.dx.rop.cst.CstString;
import com.android.jack.dx.rop.cst.TypedConstant;
import com.android.jack.dx.rop.type.Prototype;
+import com.android.jack.dx.rop.type.StdTypeList;
import com.android.jack.ir.ast.JAbstractMethodCall;
import com.android.jack.ir.ast.JAnnotation;
import com.android.jack.ir.ast.JAnnotationMethod;
@@ -53,7 +53,6 @@
import com.android.jack.ir.ast.JNameValuePair;
import com.android.jack.ir.ast.JShortLiteral;
import com.android.jack.ir.ast.JStringLiteral;
-import com.android.jack.ir.formatter.BinarySignatureFormatter;
import java.util.Collection;
import java.util.Iterator;
@@ -68,7 +67,7 @@
public class InvokeCustomHelper {
public static boolean isInvokeCustom(@Nonnull JAbstractMethodCall call) {
- Collection<JMethod> methods = call.getMethodId().getMethods();
+ Collection<JMethod> methods = call.getMethodIdWide().getMethods();
Iterator<JMethod> methodsIt = methods.iterator();
boolean isInvokeCustom = false;
while (methodsIt.hasNext()) {
@@ -129,11 +128,8 @@
assert callSiteArgumentTypes != null;
assert callSiteReturnType != null;
- Prototype callSitePrototype =
- Prototype.intern(buildSignature(callSiteArgumentTypes, callSiteReturnType));
-
return new CstCallSiteRef(methodHandle, callSiteMethodName.getValue(),
- new CstPrototypeRef(callSitePrototype), extraArgs);
+ new CstPrototypeRef(buildPrototype(callSiteArgumentTypes, callSiteReturnType)), extraArgs);
}
@CheckForNull
@@ -198,7 +194,7 @@
break;
}
case "classValue" : {
- cst = RopHelper.getCstType(((JClassLiteral) jLiteral).getRefType());
+ cst = RopHelper.convertTypeToDx(((JClassLiteral) jLiteral).getRefType());
break;
}
default: {
@@ -235,12 +231,9 @@
type = (JClassLiteral) typeValuePair.getValue();
}
assert type != null;
- BinarySignatureFormatter bsf = BinarySignatureFormatter.getFormatter();
- CstNat nat =
- new CstNat(new CstString(name.getValue()), new CstString(bsf.getName(type.getRefType())));
-
- CstFieldRef fieldRef = new CstFieldRef(RopHelper.getCstType(owner.getRefType()), nat);
+ CstFieldRef fieldRef = new CstFieldRef(RopHelper.convertTypeToDx(owner.getRefType()),
+ new CstString(name.getValue()), RopHelper.convertTypeToDx(type.getRefType()));
return new CstMethodHandleRef(kind, fieldRef);
}
@@ -276,10 +269,9 @@
argumentsTypes = (JArrayLiteral) argumentTypesValuePair.getValue();
}
assert argumentsTypes != null;
- CstNat nat = new CstNat(new CstString(name.getValue()),
- new CstString(buildSignature(argumentsTypes, returnType)));
- CstMethodRef methodRef = new CstMethodRef(RopHelper.getCstType(owner.getRefType()), nat);
+ CstMethodRef methodRef = new CstMethodRef(RopHelper.convertTypeToDx(owner.getRefType()),
+ new CstString(name.getValue()), buildPrototype(argumentsTypes, returnType));
return new CstMethodHandleRef(kind, methodRef);
}
@@ -312,20 +304,18 @@
}
@Nonnull
- private static String buildSignature(@Nonnull JArrayLiteral signature,
+ private static Prototype buildPrototype(@Nonnull JArrayLiteral signature,
@Nonnull JClassLiteral returnType) {
- BinarySignatureFormatter bsf = BinarySignatureFormatter.getFormatter();
+ List<JLiteral> values = signature.getValues();
+ StdTypeList stdTypeList = new StdTypeList(values.size());
- StringBuilder signatureStr = new StringBuilder();
- signatureStr.append('(');
- for (JLiteral lit : signature.getValues()) {
+ int idx = 0;
+ for (JLiteral lit : values) {
assert lit instanceof JClassLiteral;
JClassLiteral classLit = (JClassLiteral) lit;
- signatureStr.append(bsf.getName(classLit.getRefType()));
+ stdTypeList.set(idx++, RopHelper.convertTypeToDx(classLit.getRefType()));
}
- assert returnType != null;
- signatureStr.append(')');
- signatureStr.append(bsf.getName(returnType.getRefType()));
- return signatureStr.toString();
+
+ return Prototype.intern(stdTypeList, RopHelper.convertTypeToDx(returnType.getRefType()));
}
}
diff --git a/jack/src/com/android/jack/backend/dex/rop/CodeItemBuilder.java b/jack/src/com/android/jack/backend/dex/rop/CodeItemBuilder.java
index b5ed141..7baa30a 100644
--- a/jack/src/com/android/jack/backend/dex/rop/CodeItemBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/rop/CodeItemBuilder.java
@@ -388,9 +388,9 @@
}
}
- RopMethod ropMethod =
- new RopMethod(ropBb.getBasicBlockList(),
- ropBb.getSpecialLabel(RopBasicBlockManager.PARAM_ASSIGNMENT));
+ RopMethod ropMethod = new RopMethod(ropBb.getBasicBlockList(),
+ ropBb.getSpecialLabel(RopBasicBlockManager.PARAM_ASSIGNMENT),
+ /* withDexCallingConvention= */ false);
if (runDxOptimizations) {
try (Event optEvent = tracer.open(JackEventType.DX_OPTIMIZATION)) {
diff --git a/jack/src/com/android/jack/backend/dex/rop/DexCodeMarkerRemover.java b/jack/src/com/android/jack/backend/dex/rop/DexCodeMarkerRemover.java
index 1311093..044ab08 100644
--- a/jack/src/com/android/jack/backend/dex/rop/DexCodeMarkerRemover.java
+++ b/jack/src/com/android/jack/backend/dex/rop/DexCodeMarkerRemover.java
@@ -17,10 +17,12 @@
package com.android.jack.backend.dex.rop;
import com.android.jack.ir.ast.JMethod;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
import com.android.jack.scheduling.marker.DexCodeMarker;
import com.android.sched.item.Description;
import com.android.sched.item.Name;
import com.android.sched.schedulable.Constraint;
+import com.android.sched.schedulable.Filter;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
@@ -33,6 +35,7 @@
@Name("DexCodeMarkerRemover")
@Constraint(need = DexCodeMarker.class)
@Transform(remove = DexCodeMarker.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
public class DexCodeMarkerRemover implements RunnableSchedulable<JMethod> {
@Override
diff --git a/jack/src/com/android/jack/backend/dex/rop/RopBuilderVisitor.java b/jack/src/com/android/jack/backend/dex/rop/RopBuilderVisitor.java
index e26adce..c7572e8 100644
--- a/jack/src/com/android/jack/backend/dex/rop/RopBuilderVisitor.java
+++ b/jack/src/com/android/jack/backend/dex/rop/RopBuilderVisitor.java
@@ -46,10 +46,8 @@
import com.android.jack.dx.rop.cst.CstLiteral64;
import com.android.jack.dx.rop.cst.CstLong;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstPrototypeRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Prototype;
import com.android.jack.dx.rop.type.StdTypeList;
import com.android.jack.dx.rop.type.Type;
@@ -63,7 +61,6 @@
import com.android.jack.ir.ast.JAnnotation;
import com.android.jack.ir.ast.JArrayLength;
import com.android.jack.ir.ast.JArrayRef;
-import com.android.jack.ir.ast.JArrayType;
import com.android.jack.ir.ast.JBinaryOperation;
import com.android.jack.ir.ast.JBinaryOperator;
import com.android.jack.ir.ast.JBooleanLiteral;
@@ -262,14 +259,10 @@
@Override
public boolean visit(@Nonnull JClassLiteral literal) {
- Constant cst = RopHelper.getCstType(literal.getRefType());
-
- JType type = literal.getType();
-
- Rop constOp = Rops.opConst(RopHelper.convertTypeToDx(type));
+ Rop constOp = Rops.opConst(RopHelper.convertTypeToDx(literal.getType()));
SourcePosition literalSrcPos = RopHelper.getSourcePosition(literal);
Insn constInst = new ThrowingCstInsn(constOp, literalSrcPos,
- RegisterSpecList.EMPTY, getCatchTypes(), cst);
+ RegisterSpecList.EMPTY, getCatchTypes(), RopHelper.convertTypeToDx(literal.getRefType()));
addInstruction(constInst);
addMoveResultPseudoAsExtraInstruction(destReg, literalSrcPos);
return false;
@@ -287,8 +280,7 @@
@Override
public boolean visit(@Nonnull JNewArray newArray) {
- JArrayType type = newArray.getType();
- CstType cstType = RopHelper.getCstType(type);
+ Type dxType = RopHelper.convertTypeToDx(newArray.getType());
SourcePosition newArraySourcePosition = RopHelper.getSourcePosition(newArray);
List<JExpression> valuesSize = newArray.getInitializers();
@@ -304,7 +296,7 @@
Rop op = Rops.opFilledNewArray(arrayType, valuesSize.size());
Insn insn =
- new ThrowingCstInsn(op, newArraySourcePosition, sources, getCatchTypes(), cstType);
+ new ThrowingCstInsn(op, newArraySourcePosition, sources, getCatchTypes(), dxType);
addInstruction(insn);
addMoveResultAsExtraInstruction(arrayType, destReg, newArraySourcePosition);
} else {
@@ -316,10 +308,10 @@
RegisterSpecList sources =
RegisterSpecList.make(getRegisterSpec(dims.get(0)));
- Rop op = Rops.opNewArray(cstType.getClassType());
+ Rop op = Rops.opNewArray(dxType);
Insn insn =
- new ThrowingCstInsn(op, newArraySourcePosition, sources, getCatchTypes(), cstType);
+ new ThrowingCstInsn(op, newArraySourcePosition, sources, getCatchTypes(), dxType);
addInstruction(insn);
addMoveResultPseudoAsExtraInstruction(destReg, newArraySourcePosition);
@@ -331,7 +323,7 @@
}
insn = new FillArrayDataInsn(
Rops.FILL_ARRAY_DATA, newArraySourcePosition, RegisterSpecList.make(destReg),
- initValues, cstType);
+ initValues, dxType);
addExtraInstruction(insn);
}
}
@@ -364,7 +356,7 @@
private void buildArrayRead(@Nonnull RegisterSpec destReg, @Nonnull JArrayRef arrayRef,
@Nonnull SourcePosition sourcePosition) {
assert arrayRef.getInstance() instanceof JVariableRef
- || arrayRef.getInstance() instanceof JNullLiteral;
+ || isNullOrReinterpretCastOfNull(arrayRef.getInstance());
RegisterSpec instanceReg = getRegisterSpec(arrayRef.getInstance());
RegisterSpec indexReg = getRegisterSpec(arrayRef.getIndexExpr());
RegisterSpecList sources = RegisterSpecList.make(instanceReg, indexReg);
@@ -386,7 +378,7 @@
} else {
JExpression instance = fieldRef.getInstance();
assert instance != null;
- assert instance instanceof JVariableRef || instance instanceof JNullLiteral;
+ assert instance instanceof JVariableRef || isNullOrReinterpretCastOfNull(instance);
RegisterSpec instanceReg = getRegisterSpec(instance);
RegisterSpecList sources = RegisterSpecList.make(instanceReg);
@@ -710,10 +702,8 @@
private void buildAlloc(@Nonnull RegisterSpec destReg, @Nonnull JAlloc alloc,
@Nonnull SourcePosition sourcePosition) {
- CstType type = RopHelper.getCstType(alloc.getInstanceType());
- Rop rop = Rops.NEW_INSTANCE;
- addInstruction(
- new ThrowingCstInsn(rop, sourcePosition, RegisterSpecList.EMPTY, getCatchTypes(), type));
+ addInstruction(new ThrowingCstInsn(Rops.NEW_INSTANCE, sourcePosition, RegisterSpecList.EMPTY,
+ getCatchTypes(), RopHelper.convertTypeToDx(alloc.getInstanceType())));
addMoveResultPseudoAsExtraInstruction(destReg, sourcePosition);
}
@@ -724,8 +714,10 @@
throws AssertionError {
if (value instanceof JExceptionRuntimeValue) {
assert dest instanceof JVariableRef;
- assert declaration.getParent() instanceof JCatchBlock
- && ((JCatchBlock) declaration.getParent()).getStatements().get(0) == declaration;
+ final JNode declarationParent = declaration.getParent();
+ assert declarationParent != null;
+ assert declarationParent instanceof JCatchBlock
+ && ((JCatchBlock) declarationParent).getStatements().get(0) == declaration;
RegisterSpec exceptionReg = ropReg.getOrCreateRegisterSpec((JVariableRef) dest);
addInstruction(new PlainInsn(
Rops.opMoveException(exceptionReg.getTypeBearer()), RopHelper.getSourcePosition(dest),
@@ -746,7 +738,7 @@
private void buildArrayWrite(JArrayRef arrayRef, JExpression value,
SourcePosition sourcePosition) {
assert arrayRef.getInstance() instanceof JVariableRef
- || arrayRef.getInstance() instanceof JNullLiteral;
+ || isNullOrReinterpretCastOfNull(arrayRef.getInstance());
RegisterSpec valueReg = getRegisterSpec(value);
RegisterSpec instanceReg = getRegisterSpec(arrayRef.getInstance());
RegisterSpec indexReg = getRegisterSpec(arrayRef.getIndexExpr());
@@ -758,10 +750,9 @@
private void buildInstanceOf(RegisterSpec destReg, JInstanceOf instanceOf) {
SourcePosition srcPos = RopHelper.getSourcePosition(instanceOf);
- RegisterSpec regExpr = getRegisterSpec(instanceOf.getExpr());
- CstType type = RopHelper.getCstType(instanceOf.getTestType());
- addInstruction(new ThrowingCstInsn(Rops.INSTANCE_OF, srcPos, RegisterSpecList.make(regExpr),
- getCatchTypes(), type));
+ addInstruction(new ThrowingCstInsn(Rops.INSTANCE_OF, srcPos,
+ RegisterSpecList.make(getRegisterSpec(instanceOf.getExpr())), getCatchTypes(),
+ RopHelper.convertTypeToDx(instanceOf.getTestType())));
addMoveResultPseudoAsExtraInstruction(destReg, srcPos);
}
@@ -800,7 +791,7 @@
} else {
JExpression instance = fieldRef.getInstance();
assert instance != null;
- assert instance instanceof JVariableRef || instance instanceof JNullLiteral;
+ assert instance instanceof JVariableRef || isNullOrReinterpretCastOfNull(instance);
RegisterSpec instanceReg = getRegisterSpec(instance);
RegisterSpecList sources = RegisterSpecList.make(valueReg, instanceReg);
@@ -865,7 +856,7 @@
Insn insn =
new ThrowingCstInsn(Rops.CHECK_CAST, sourcePosition, sources, getCatchTypes(),
- RopHelper.getCstType(castTo));
+ RopHelper.convertTypeToDx(castTo));
addInstruction(insn);
addMoveResultPseudoAsExtraInstruction(destReg, sourcePosition);
@@ -1186,11 +1177,11 @@
private void buildInvokePolymorphic(@CheckForNull RegisterSpec result,
@Nonnull JPolymorphicMethodCall methodCall) {
- CstType definingClass = RopHelper.getCstType(methodCall.getReceiverType());
- String signatureWithoutName = RopHelper.getMethodSignatureWithoutName(methodCall);
- CstNat nat = new CstNat(new CstString(methodCall.getMethodName()),
- new CstString(signatureWithoutName));
- CstMethodRef methodRef = new CstMethodRef(definingClass, nat);
+ CstMethodRef methodRef =
+ new CstMethodRef(RopHelper.convertTypeToDx(methodCall.getReceiverType()),
+ new CstString(methodCall.getMethodName()),
+ RopHelper.getPrototypeFromPolymorphicCall(methodCall));
+
SourcePosition methodCallSrcPos = RopHelper.getSourcePosition(methodCall);
Prototype prototype =
Prototype.intern(RopHelper.getPolymorphicCallSiteSymbolicDescriptor(methodCall));
@@ -1222,7 +1213,7 @@
if (InvokeCustomHelper.isInvokeCustom(methodCall)
&& apiLevel.getProvisionalLevel() == ProvisionalLevel.O_BETA2) {
JAnnotation invokeCustomCallSite = InvokeCustomHelper
- .getInvokeCustomCallsite(methodCall.getMethodId().getMethods().iterator().next());
+ .getInvokeCustomCallsite(methodCall.getMethodIdWide().getMethods().iterator().next());
assert invokeCustomCallSite != null;
CstCallSiteRef callSiteRef =
InvokeCustomHelper.readInvokeCustomCallSite(invokeCustomCallSite);
@@ -1247,16 +1238,15 @@
return;
}
- String signatureWithoutName = RopHelper.getMethodSignatureWithoutName(methodCall);
SourcePosition methodCallSrcPos = RopHelper.getSourcePosition(methodCall);
- Prototype prototype = Prototype.intern(signatureWithoutName);
+ Prototype prototype = RopHelper.getPrototype(methodCall.getMethodId());
RegisterSpecList sources;
int paramIndex = 0;
Rop callOp;
- MethodKind methodKind = methodCall.getMethodId().getKind();
+ MethodKind methodKind = methodCall.getMethodIdWide().getKind();
if (methodKind == MethodKind.STATIC) {
// Reserve space for the method arguments
sources = new RegisterSpecList(methodCall.getArgs().size());
@@ -1319,9 +1309,12 @@
if (expr instanceof JVariableRef) {
regSpec = ropReg.getOrCreateRegisterSpec((JVariableRef) expr);
} else {
- assert expr instanceof JValueLiteral;
+ assert (expr instanceof JValueLiteral || isNullOrReinterpretCastOfNull(expr));
regSpec =
ropReg.getOrCreateTmpRegister(RopHelper.convertTypeToDx(expr.getType()));
+ if (expr instanceof JReinterpretCastOperation) {
+ expr = ((JReinterpretCastOperation) expr).getExpr();
+ }
buildConstant(regSpec, (JValueLiteral) expr);
}
@@ -1382,4 +1375,11 @@
public void endVisit(@Nonnull JStatement x) {
ropReg.resetFreeTmpRegister();
}
+
+ private static boolean isNullOrReinterpretCastOfNull(@Nonnull JExpression expr) {
+ if (expr instanceof JReinterpretCastOperation) {
+ return isNullOrReinterpretCastOfNull(((JReinterpretCastOperation) expr).getExpr());
+ }
+ return expr instanceof JNullLiteral;
+ }
}
diff --git a/jack/src/com/android/jack/backend/dex/rop/RopHelper.java b/jack/src/com/android/jack/backend/dex/rop/RopHelper.java
index 6a5dee8..d145c73 100644
--- a/jack/src/com/android/jack/backend/dex/rop/RopHelper.java
+++ b/jack/src/com/android/jack/backend/dex/rop/RopHelper.java
@@ -19,9 +19,8 @@
import com.android.jack.dx.rop.code.SourcePosition;
import com.android.jack.dx.rop.cst.CstFieldRef;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Prototype;
import com.android.jack.dx.rop.type.StdTypeList;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
@@ -31,6 +30,7 @@
import com.android.jack.ir.ast.JFieldId;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JNullType;
import com.android.jack.ir.ast.JParameter;
@@ -77,9 +77,8 @@
@Nonnull
public static CstMethodRef createMethodRef(@Nonnull JReferenceType type,
@Nonnull JMethod method) {
- CstType definingClass = RopHelper.getCstType(type);
- CstNat nat = createSignature(method);
- CstMethodRef methodRef = new CstMethodRef(definingClass, nat);
+ CstMethodRef methodRef = new CstMethodRef(RopHelper.convertTypeToDx(type),
+ new CstString(method.getName()), getPrototype(method.getMethodId()));
return methodRef;
}
@@ -109,11 +108,9 @@
*/
@Nonnull
public static CstMethodRef createMethodRef(@Nonnull JMethodCall methodCall) {
- CstType definingClass = RopHelper.getCstType(methodCall.getReceiverType());
- String signatureWithoutName = getMethodSignatureWithoutName(methodCall);
- CstNat nat =
- new CstNat(new CstString(methodCall.getMethodName()), new CstString(signatureWithoutName));
- CstMethodRef methodRef = new CstMethodRef(definingClass, nat);
+ Type definingClass = RopHelper.convertTypeToDx(methodCall.getReceiverType());
+ CstMethodRef methodRef = new CstMethodRef(definingClass,
+ new CstString(methodCall.getMethodName()), getPrototype(methodCall.getMethodId()));
return methodRef;
}
@@ -132,9 +129,9 @@
@Nonnull
public static CstFieldRef createFieldRef(@Nonnull JFieldId field,
@Nonnull JClassOrInterface receiverType) {
- CstType definingClass = getCstType(receiverType);
- CstNat nat = createSignature(field);
- CstFieldRef fieldRef = new CstFieldRef(definingClass, nat);
+ Type definingClass = convertTypeToDx(receiverType);
+ CstString name = new CstString(field.getName());
+ CstFieldRef fieldRef = new CstFieldRef(definingClass, name, convertTypeToDx(field.getType()));
return fieldRef;
}
@@ -162,34 +159,31 @@
return res;
}
- @Nonnull
- public static String getMethodSignatureWithoutName(@Nonnull JPolymorphicMethodCall call) {
- StringBuilder sb = new StringBuilder();
- sb.append('(');
- for (JType p : call.getMethodId().getParamTypes()) {
- sb.append(formatter.getName(p));
+ @Nonnull
+ public static Prototype getPrototype(@Nonnull JMethodId method) {
+ List<JType> parameterTypes = method.getMethodIdWide().getParamTypes();
+ StdTypeList stdTypeList = new StdTypeList(parameterTypes.size());
+
+ int idx = 0;
+ for (JType parameterType : parameterTypes) {
+ stdTypeList.set(idx++, convertTypeToDx(parameterType));
}
- sb.append(')');
- sb.append(formatter.getName(call.getReturnTypeOfPolymorphicMethod()));
-
- return sb.toString();
+ return Prototype.intern(stdTypeList, convertTypeToDx(method.getType()));
}
@Nonnull
- public static String getMethodSignatureWithoutName(@Nonnull JMethodCall call) {
- StringBuilder sb = new StringBuilder();
- sb.append('(');
+ public static Prototype getPrototypeFromPolymorphicCall(@Nonnull JPolymorphicMethodCall call) {
+ List<JType> parameterTypes = call.getMethodIdWide().getParamTypes();
+ StdTypeList stdTypeList = new StdTypeList(parameterTypes.size());
- for (JType p : call.getMethodId().getParamTypes()) {
- sb.append(formatter.getName(p));
+ int idx = 0;
+ for (JType parameterType : parameterTypes) {
+ stdTypeList.set(idx++, convertTypeToDx(parameterType));
}
- sb.append(')');
- sb.append(formatter.getName(call.getType()));
-
- return sb.toString();
+ return Prototype.intern(stdTypeList, convertTypeToDx(call.getReturnTypeOfPolymorphicMethod()));
}
/**
@@ -250,39 +244,11 @@
}
}
- /**
- * Builds a constant name and type ({@code CstNat}) from a {@code JMethod}
- *
- * @param method The {@code JMethod} used to build a {@code CstNat}.
- * @return The built {@code CstNat}.
- */
@Nonnull
- private static CstNat createSignature(@Nonnull JMethod method) {
- CstString name = new CstString(method.getName());
- CstString descriptor = new CstString(formatter.getName(method));
- CstNat signature = new CstNat(name, descriptor);
- return signature;
- }
-
- /**
- * Builds a constant name and type ({@code CstNat}) from a {@code JField}
- *
- * @param field The {@code JField} used to build a {@code CstNat}.
- * @return The built {@code CstNat}.
- */
- @Nonnull
- public static CstNat createSignature(@Nonnull JField field) {
- return createSignature(field.getId());
- }
-
- @Nonnull
- public static CstNat createSignature(@Nonnull JFieldId field) {
- String fieldName = field.getName();
+ public static CstString createSignature(@Nonnull JFieldId field) {
String fieldSignature = formatter.getName(field.getType());
- CstString name = new CstString(fieldName);
CstString descriptor = new CstString(fieldSignature);
- CstNat signature = new CstNat(name, descriptor);
- return signature;
+ return descriptor;
}
/**
@@ -314,19 +280,6 @@
return typesList;
}
- /**
- * Converts a {@code JType} to a {@code CstType}.
- *
- * @param type a non-null {@code JType}.
- * @throws NullPointerException if given type is null.
- */
- @Nonnull
- public static CstType getCstType(@Nonnull JType type) {
- Type ropType = convertTypeToDx(type);
- CstType cstType = CstType.intern(ropType);
- return cstType;
- }
-
private static class RopFormatter extends InternalFormatter {
/**
diff --git a/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java b/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java
index 7e56db8..5e41877 100644
--- a/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java
+++ b/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java
@@ -20,7 +20,6 @@
import com.android.jack.dx.rop.code.LocalItem;
import com.android.jack.dx.rop.code.RegisterSpec;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.ast.JParameter;
@@ -99,7 +98,7 @@
cstSignature = new CstString(thisMarker.getGenericSignature());
}
LocalItem localItem =
- LocalItem.make(new CstString(name), RopHelper.getCstType(type), cstSignature);
+ LocalItem.make(new CstString(name), RopHelper.convertTypeToDx(type), cstSignature);
thisReg = RegisterSpec.make(nextFreeReg, dexRegType, localItem);
} else {
thisReg = RegisterSpec.make(nextFreeReg, dexRegType);
@@ -177,7 +176,6 @@
*/
@Nonnull
RegisterSpec getOrCreateRegisterSpec(@Nonnull JParameter parameter) {
- assert parameter.getMarker(DebugVariableInfoMarker.class) == null;
return getRegisterSpec(getRegisterNumber(parameter), parameter, /* debugInfo= */ null);
}
@@ -188,26 +186,35 @@
JType variableType = variable.getType();
Type regType = RopHelper.convertTypeToDx(variableType);
- if (emitDebugInfo && variable.getName() != null
+ String name = variable.getName();
+ if (emitDebugInfo && name != null
&& (emitSyntheticDebugInfo || !variable.isSynthetic())) {
if (debugInfo != null) {
// Debug info marker exists, uses debug information from it
- CstString cstSignature = null;
- String genericSignature = debugInfo.getGenericSignature();
- if (genericSignature != null) {
- cstSignature = new CstString(genericSignature);
+ if (debugInfo == DebugVariableInfoMarker.NO_DEBUG_INFO) {
+ // There is no debug information when coming from Jill, do not get name from JVariable
+ reg = RegisterSpec.make(regNum, regType);
+ } else {
+ CstString cstSignature = null;
+ String genericSignature = debugInfo.getGenericSignature();
+ if (genericSignature != null) {
+ cstSignature = new CstString(genericSignature);
+ }
+ String debugName = debugInfo.getName();
+ assert debugName != null;
+ JType debugType = debugInfo.getType();
+ assert debugType != null;
+ LocalItem localItem = LocalItem.make(new CstString(debugName),
+ RopHelper.convertTypeToDx(debugType), cstSignature);
+ reg = RegisterSpec.make(regNum, regType, localItem);
}
- LocalItem localItem = LocalItem.make(new CstString(debugInfo.getName()),
- CstType.intern(RopHelper.convertTypeToDx(debugInfo.getType())), cstSignature);
- reg = RegisterSpec.make(regNum, regType, localItem);
} else {
CstString cstSignature = null;
GenericSignature infoMarker = variable.getMarker(GenericSignature.class);
if (infoMarker != null) {
cstSignature = new CstString(infoMarker.getGenericSignature());
}
- LocalItem localItem = LocalItem.make(new CstString(variable.getName()),
- CstType.intern(regType), cstSignature);
+ LocalItem localItem = LocalItem.make(new CstString(name), regType, cstSignature);
reg = RegisterSpec.make(regNum, regType, localItem);
}
} else {
diff --git a/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java b/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java
index 31c6877..6e89f6e 100644
--- a/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java
+++ b/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java
@@ -47,7 +47,6 @@
import com.android.sched.util.log.LoggerFactory;
import com.android.sched.util.log.Tracer;
import com.android.sched.util.log.TracerFactory;
-import com.android.sched.vfs.GenericInputVFile;
import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.VPath;
@@ -174,11 +173,11 @@
path.substring(0, path.lastIndexOf(JAYCE_FILE_EXTENSION));
try {
String previousDigest =
- ((GenericInputVFile)
- previousInputLibrary.getFile(
- FileType.PREBUILT, new VPath(pathWithoutExt, '/'))).getDigest();
+ previousInputLibrary
+ .getFile(FileType.PREBUILT, new VPath(pathWithoutExt, '/'))
+ .getDigest();
if (previousDigest != null
- && previousDigest.equals(((GenericInputVFile) jayceFile).getDigest())) {
+ && previousDigest.equals(jayceFile.getDigest())) {
return; // both types are identical, ignore
}
} catch (FileTypeDoesNotExistException e) {
diff --git a/jack/src/com/android/jack/backend/jayce/JayceInLibraryWriter.java b/jack/src/com/android/jack/backend/jayce/JayceInLibraryWriter.java
index 5644d59..44d5d14 100644
--- a/jack/src/com/android/jack/backend/jayce/JayceInLibraryWriter.java
+++ b/jack/src/com/android/jack/backend/jayce/JayceInLibraryWriter.java
@@ -20,6 +20,7 @@
import com.android.jack.JackAbortException;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter;
+import com.android.jack.jayce.JayceInternalWriter;
import com.android.jack.jayce.JayceWriterFactory;
import com.android.jack.library.FileType;
import com.android.jack.library.InputLibrary;
@@ -33,15 +34,13 @@
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
-import com.android.sched.util.file.CannotReadException;
+import com.android.sched.util.file.CannotWriteException;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.Location;
import com.android.sched.vfs.OutputVFile;
import com.android.sched.vfs.VPath;
import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
import javax.annotation.Nonnull;
@@ -81,16 +80,12 @@
try {
OutputVFile vFile = outputJackLibrary.createFile(FileType.JAYCE,
new VPath(BinaryQualifiedNameFormatter.getFormatter().getName(type), '/'));
- try (OutputStream out = new BufferedOutputStream(vFile.getOutputStream())) {
- try {
- JayceWriterFactory.get(outputJackLibrary, out).write(type);
- } catch (IOException e) {
- throw new CannotReadException(vFile, e);
- }
- } catch (IOException e) {
- throw new CannotCloseException(vFile, e);
+ try (JayceInternalWriter jayceWriter =
+ JayceWriterFactory.get(
+ outputJackLibrary, new BufferedOutputStream(vFile.getOutputStream()), vFile)) {
+ jayceWriter.write(type);
}
- } catch (CannotReadException | CannotCloseException | CannotCreateFileException
+ } catch (CannotWriteException | CannotCloseException | CannotCreateFileException
| WrongPermissionException e) {
LibraryWritingException reportable =
new LibraryWritingException(new LibraryIOException(outputJackLibrary.getLocation(), e));
diff --git a/jack/src/com/android/jack/cfg/CfgBuilder.java b/jack/src/com/android/jack/cfg/CfgBuilder.java
index 153f577..2a25498 100644
--- a/jack/src/com/android/jack/cfg/CfgBuilder.java
+++ b/jack/src/com/android/jack/cfg/CfgBuilder.java
@@ -270,8 +270,6 @@
ConditionalBasicBlock condBlock = new ConditionalBasicBlock(basicBlockId++, currentStmts);
setBlockOfStatement(condBlock);
- assert ifStmt.getThenStmt() != null;
-
accept(ifStmt.getThenStmt());
JStatement elseStmt = ifStmt.getElseStmt();
diff --git a/jack/src/com/android/jack/debug/DebugVariableInfoMarker.java b/jack/src/com/android/jack/debug/DebugVariableInfoMarker.java
index 42ad19f..3101a37 100644
--- a/jack/src/com/android/jack/debug/DebugVariableInfoMarker.java
+++ b/jack/src/com/android/jack/debug/DebugVariableInfoMarker.java
@@ -17,6 +17,7 @@
package com.android.jack.debug;
import com.android.jack.ir.ast.JLocalRef;
+import com.android.jack.ir.ast.JParameterRef;
import com.android.jack.ir.ast.JType;
import com.android.sched.item.Description;
import com.android.sched.marker.Marker;
@@ -29,32 +30,40 @@
/**
* This {@link Marker} contains debug information related to variable.
*/
-@ValidOn({JLocalRef.class})
+@ValidOn({JLocalRef.class, JParameterRef.class})
@Description("This marker contains debug information related to variable.")
public class DebugVariableInfoMarker implements SerializableMarker {
@Nonnull
- private final String name;
+ public static final DebugVariableInfoMarker NO_DEBUG_INFO =
+ new DebugVariableInfoMarker(null, null, null);
- @Nonnull
+ @CheckForNull
+ private String name;
+
+ @CheckForNull
private final JType type;
@CheckForNull
private String genericSignature;
- public DebugVariableInfoMarker(@Nonnull String name, @Nonnull JType type,
+ public DebugVariableInfoMarker(@CheckForNull String name, @CheckForNull JType type,
@CheckForNull String genericSignature) {
this.name = name;
this.type = type;
this.genericSignature = genericSignature;
}
- @Nonnull
+ @CheckForNull
public String getName() {
return name;
}
- @Nonnull
+ public void setName(@CheckForNull String name) {
+ this.name = name;
+ }
+
+ @CheckForNull
public JType getType() {
return type;
}
diff --git a/jack/src/com/android/jack/dx/dex/SizeOf.java b/jack/src/com/android/jack/dx/dex/SizeOf.java
index 3534591..63a382d 100644
--- a/jack/src/com/android/jack/dx/dex/SizeOf.java
+++ b/jack/src/com/android/jack/dx/dex/SizeOf.java
@@ -34,7 +34,7 @@
public static final int SIGNATURE = UBYTE * 20;
@Nonnegative
- public static final int getHeaderSize(@Nonnegative int dexVersion) {
+ public static int getHeaderSize() {
/*
* magic ubyte[8]
* checksum uint
@@ -62,16 +62,6 @@
*/
int headerSize = (8 * UBYTE) + UINT + SIGNATURE + (20 * UINT); // 0x70;
- if (dexVersion == DexFormat.O_BETA2_DEX_VERSION) {
- /*
- * call_site_ids_size uint
- * call_site_ids_off uint
- * method_handle_ids_size uint
- * method_handle_ids_off uint
- */
- headerSize += 4 * UINT; // 0x80
- }
-
return headerSize;
}
diff --git a/jack/src/com/android/jack/dx/dex/TableOfContents.java b/jack/src/com/android/jack/dx/dex/TableOfContents.java
index cab1da5..b42caf4 100644
--- a/jack/src/com/android/jack/dx/dex/TableOfContents.java
+++ b/jack/src/com/android/jack/dx/dex/TableOfContents.java
@@ -97,7 +97,7 @@
signature = headerIn.readByteArray(20);
fileSize = headerIn.readInt();
int headerSize = headerIn.readInt();
- if (headerSize != SizeOf.getHeaderSize(dexVersion)) {
+ if (headerSize != SizeOf.getHeaderSize()) {
throw new DexException("Unexpected header: 0x" + Integer.toHexString(headerSize));
}
int endianTag = headerIn.readInt();
@@ -122,12 +122,6 @@
methodIds.off = headerIn.readInt();
classDefs.size = headerIn.readInt();
classDefs.off = headerIn.readInt();
- if (dexVersion == DexFormat.O_BETA2_DEX_VERSION) {
- callSiteIds.size = headerIn.readInt();
- callSiteIds.off = headerIn.readInt();
- methodHandleIds.size = headerIn.readInt();
- methodHandleIds.off = headerIn.readInt();
- }
dataSize = headerIn.readInt();
dataOff = headerIn.readInt();
}
diff --git a/jack/src/com/android/jack/dx/dex/code/ArrayData.java b/jack/src/com/android/jack/dx/dex/code/ArrayData.java
index 81f7ac0..21b801e 100644
--- a/jack/src/com/android/jack/dx/dex/code/ArrayData.java
+++ b/jack/src/com/android/jack/dx/dex/code/ArrayData.java
@@ -22,7 +22,7 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstLiteral32;
import com.android.jack.dx.rop.cst.CstLiteral64;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.Hex;
@@ -62,14 +62,8 @@
public ArrayData(SourcePosition position, CodeAddress user, ArrayList<Constant> values,
Constant arrayType) {
super(position, RegisterSpecList.EMPTY);
-
- if (user == null) {
- throw new NullPointerException("user == null");
- }
-
- if (values == null) {
- throw new NullPointerException("values == null");
- }
+ assert user != null;
+ assert values != null;
int sz = values.size();
@@ -79,13 +73,13 @@
this.arrayType = arrayType;
- if (arrayType == CstType.BYTE_ARRAY || arrayType == CstType.BOOLEAN_ARRAY) {
+ if (arrayType == Type.BYTE_ARRAY || arrayType == Type.BOOLEAN_ARRAY) {
elemWidth = 1;
- } else if (arrayType == CstType.SHORT_ARRAY || arrayType == CstType.CHAR_ARRAY) {
+ } else if (arrayType == Type.SHORT_ARRAY || arrayType == Type.CHAR_ARRAY) {
elemWidth = 2;
- } else if (arrayType == CstType.INT_ARRAY || arrayType == CstType.FLOAT_ARRAY) {
+ } else if (arrayType == Type.INT_ARRAY || arrayType == Type.FLOAT_ARRAY) {
elemWidth = 4;
- } else if (arrayType == CstType.LONG_ARRAY || arrayType == CstType.DOUBLE_ARRAY) {
+ } else if (arrayType == Type.LONG_ARRAY || arrayType == Type.DOUBLE_ARRAY) {
elemWidth = 8;
} else {
throw new IllegalArgumentException("Unexpected constant type");
diff --git a/jack/src/com/android/jack/dx/dex/code/CatchHandlerList.java b/jack/src/com/android/jack/dx/dex/code/CatchHandlerList.java
index cfec0ab..e72f6ea 100644
--- a/jack/src/com/android/jack/dx/dex/code/CatchHandlerList.java
+++ b/jack/src/com/android/jack/dx/dex/code/CatchHandlerList.java
@@ -16,7 +16,7 @@
package com.android.jack.dx.dex.code;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.FixedSizeList;
import com.android.jack.dx.util.Hex;
@@ -108,7 +108,7 @@
}
Entry last = get(size - 1);
- return last.getExceptionType().equals(CstType.OBJECT);
+ return last.getExceptionType().equals(Type.OBJECT);
}
/**
@@ -118,7 +118,7 @@
* @param exceptionType {@code non-null;} type of exception handled
* @param handler {@code >= 0;} exception handler address
*/
- public void set(int n, CstType exceptionType, int handler) {
+ public void set(int n, Type exceptionType, int handler) {
set0(n, new Entry(exceptionType, handler));
}
@@ -167,7 +167,7 @@
*/
public static class Entry implements Comparable<Entry> {
/** {@code non-null;} type of exception handled */
- private final CstType exceptionType;
+ private final Type exceptionType;
/** {@code >= 0;} exception handler address */
private final int handler;
@@ -178,15 +178,13 @@
* @param exceptionType {@code non-null;} type of exception handled
* @param handler {@code >= 0;} exception handler address
*/
- public Entry(CstType exceptionType, int handler) {
+ public Entry(Type exceptionType, int handler) {
+ assert exceptionType != null;
+
if (handler < 0) {
throw new IllegalArgumentException("handler < 0");
}
- if (exceptionType == null) {
- throw new NullPointerException("exceptionType == null");
- }
-
this.handler = handler;
this.exceptionType = exceptionType;
}
@@ -224,7 +222,7 @@
*
* @return {@code non-null;} the exception type
*/
- public CstType getExceptionType() {
+ public Type getExceptionType() {
return exceptionType;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/CstInsn.java b/jack/src/com/android/jack/dx/dex/code/CstInsn.java
index 878a4e8..7b558f2 100644
--- a/jack/src/com/android/jack/dx/dex/code/CstInsn.java
+++ b/jack/src/com/android/jack/dx/dex/code/CstInsn.java
@@ -48,11 +48,7 @@
public CstInsn(Dop opcode, SourcePosition position, RegisterSpecList registers,
Constant constant) {
super(opcode, position, registers);
-
- if (constant == null) {
- throw new NullPointerException("constant == null");
- }
-
+ assert constant != null;
this.constant = constant;
this.index = -1;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/DalvCode.java b/jack/src/com/android/jack/dx/dex/code/DalvCode.java
index bf92ad4..74ff7f2 100644
--- a/jack/src/com/android/jack/dx/dex/code/DalvCode.java
+++ b/jack/src/com/android/jack/dx/dex/code/DalvCode.java
@@ -80,13 +80,8 @@
*/
public DalvCode(int positionInfo, OutputFinisher unprocessedInsns,
CatchBuilder unprocessedCatches) {
- if (unprocessedInsns == null) {
- throw new NullPointerException("unprocessedInsns == null");
- }
-
- if (unprocessedCatches == null) {
- throw new NullPointerException("unprocessedCatches == null");
- }
+ assert unprocessedInsns != null;
+ assert unprocessedCatches != null;
this.positionInfo = positionInfo;
this.unprocessedInsns = unprocessedInsns;
diff --git a/jack/src/com/android/jack/dx/dex/code/DalvInsn.java b/jack/src/com/android/jack/dx/dex/code/DalvInsn.java
index 0cb8964..da6c0be 100644
--- a/jack/src/com/android/jack/dx/dex/code/DalvInsn.java
+++ b/jack/src/com/android/jack/dx/dex/code/DalvInsn.java
@@ -89,17 +89,9 @@
* ins and outs)
*/
public DalvInsn(Dop opcode, SourcePosition position, RegisterSpecList registers) {
- if (opcode == null) {
- throw new NullPointerException("opcode == null");
- }
-
- if (position == null) {
- throw new NullPointerException("position == null");
- }
-
- if (registers == null) {
- throw new NullPointerException("registers == null");
- }
+ assert opcode != null;
+ assert position != null;
+ assert registers != null;
this.address = -1;
this.opcode = opcode;
diff --git a/jack/src/com/android/jack/dx/dex/code/Dop.java b/jack/src/com/android/jack/dx/dex/code/Dop.java
index 0a0cbc2..b819d5b 100644
--- a/jack/src/com/android/jack/dx/dex/code/Dop.java
+++ b/jack/src/com/android/jack/dx/dex/code/Dop.java
@@ -58,6 +58,8 @@
* is always the first register
*/
public Dop(int opcode, int family, int nextOpcode, InsnFormat format, boolean hasResult) {
+ assert format != null;
+
if (!Opcodes.isValidShape(opcode)) {
throw new IllegalArgumentException("bogus opcode");
}
@@ -70,10 +72,6 @@
throw new IllegalArgumentException("bogus nextOpcode");
}
- if (format == null) {
- throw new NullPointerException("format == null");
- }
-
this.opcode = opcode;
this.family = family;
this.nextOpcode = nextOpcode;
diff --git a/jack/src/com/android/jack/dx/dex/code/LocalList.java b/jack/src/com/android/jack/dx/dex/code/LocalList.java
index 8c8263c..407582b 100644
--- a/jack/src/com/android/jack/dx/dex/code/LocalList.java
+++ b/jack/src/com/android/jack/dx/dex/code/LocalList.java
@@ -19,7 +19,6 @@
import com.android.jack.dx.rop.code.RegisterSpec;
import com.android.jack.dx.rop.code.RegisterSpecSet;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.FixedSizeList;
@@ -128,7 +127,7 @@
private final RegisterSpec spec;
/** {@code non-null;} variable type (derived from {@code spec}) */
- private final CstType type;
+ private final Type type;
/**
* Constructs an instance.
@@ -139,23 +138,14 @@
* the variable
*/
public Entry(int address, Disposition disposition, RegisterSpec spec) {
+ assert disposition != null;
+ assert spec != null;
+ assert spec.getLocalItem() != null;
+
if (address < 0) {
throw new IllegalArgumentException("address < 0");
}
- if (disposition == null) {
- throw new NullPointerException("disposition == null");
- }
-
- try {
- if (spec.getLocalItem() == null) {
- throw new NullPointerException("spec.getLocalItem() == null");
- }
- } catch (NullPointerException ex) {
- // Elucidate the exception.
- throw new NullPointerException("spec == null");
- }
-
this.address = address;
this.disposition = disposition;
this.spec = spec;
@@ -263,7 +253,7 @@
*
* @return {@code non-null;} the type
*/
- public CstType getType() {
+ public Type getType() {
return type;
}
@@ -467,7 +457,7 @@
private int[] endIndices;
/** {@code >= 0;} last address seen */
- private int lastAddress;
+ private final int lastAddress;
/**
* Constructs an instance.
diff --git a/jack/src/com/android/jack/dx/dex/code/LocalSnapshot.java b/jack/src/com/android/jack/dx/dex/code/LocalSnapshot.java
index 8b87e39..5472aad 100644
--- a/jack/src/com/android/jack/dx/dex/code/LocalSnapshot.java
+++ b/jack/src/com/android/jack/dx/dex/code/LocalSnapshot.java
@@ -40,11 +40,7 @@
*/
public LocalSnapshot(SourcePosition position, RegisterSpecSet locals) {
super(position);
-
- if (locals == null) {
- throw new NullPointerException("locals == null");
- }
-
+ assert locals != null;
this.locals = locals;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/LocalStart.java b/jack/src/com/android/jack/dx/dex/code/LocalStart.java
index 60b7577..583f685 100644
--- a/jack/src/com/android/jack/dx/dex/code/LocalStart.java
+++ b/jack/src/com/android/jack/dx/dex/code/LocalStart.java
@@ -55,11 +55,7 @@
*/
public LocalStart(SourcePosition position, RegisterSpec local) {
super(position);
-
- if (local == null) {
- throw new NullPointerException("local == null");
- }
-
+ assert local != null;
this.local = local;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/OutputFinisher.java b/jack/src/com/android/jack/dx/dex/code/OutputFinisher.java
index a7cc59a..a083783 100644
--- a/jack/src/com/android/jack/dx/dex/code/OutputFinisher.java
+++ b/jack/src/com/android/jack/dx/dex/code/OutputFinisher.java
@@ -26,7 +26,6 @@
import com.android.jack.dx.rop.code.SourcePosition;
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.ssa.BasicRegisterMapper;
import com.android.jack.dx.util.DexException;
@@ -212,10 +211,10 @@
CstString name = local.getName();
CstString signature = local.getSignature();
Type type = spec.getType();
- CstType localType = local.getType();
+ Type localType = local.getType();
if (type != Type.KNOWN_NULL) {
- result.add(CstType.intern(type));
+ result.add(type);
}
if (localType != null) {
diff --git a/jack/src/com/android/jack/dx/dex/code/PositionList.java b/jack/src/com/android/jack/dx/dex/code/PositionList.java
index 3869b6e..6faaef2 100644
--- a/jack/src/com/android/jack/dx/dex/code/PositionList.java
+++ b/jack/src/com/android/jack/dx/dex/code/PositionList.java
@@ -159,14 +159,12 @@
* @param position {@code non-null;} corresponding source position information
*/
public Entry(int address, SourcePosition position) {
+ assert position != null;
+
if (address < 0) {
throw new IllegalArgumentException("address < 0");
}
- if (position == null) {
- throw new NullPointerException("position == null");
- }
-
this.address = address;
this.position = position;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/RopToDop.java b/jack/src/com/android/jack/dx/dex/code/RopToDop.java
index 19636ec..9d114fa 100644
--- a/jack/src/com/android/jack/dx/dex/code/RopToDop.java
+++ b/jack/src/com/android/jack/dx/dex/code/RopToDop.java
@@ -27,7 +27,6 @@
import com.android.jack.dx.rop.cst.CstFieldRef;
import com.android.jack.dx.rop.cst.CstKnownNull;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import java.util.HashMap;
@@ -598,7 +597,7 @@
}
case RegOps.CONST: {
Constant cst = ((CstInsn) insn).getConstant();
- if (cst instanceof CstType) {
+ if (cst instanceof Type) {
return Dops.CONST_CLASS;
} else if (cst instanceof CstString) {
return Dops.CONST_STRING;
diff --git a/jack/src/com/android/jack/dx/dex/code/RopTranslator.java b/jack/src/com/android/jack/dx/dex/code/RopTranslator.java
index cf4c360..d9eff2a 100644
--- a/jack/src/com/android/jack/dx/dex/code/RopTranslator.java
+++ b/jack/src/com/android/jack/dx/dex/code/RopTranslator.java
@@ -80,12 +80,6 @@
private final int paramSize;
/**
- * true if the parameters to this method happen to be in proper order
- * at the end of the frame (as the optimizer emits them)
- */
- private boolean paramsAreInOrder;
-
- /**
* Translates a {@link RopMethod}. This may modify the given
* input.
*
@@ -124,7 +118,6 @@
this.addresses = new BlockAddresses(method);
this.paramSize = paramSize;
this.order = null;
- this.paramsAreInOrder = calculateParamsAreInOrder(method, paramSize);
BasicBlockList blocks = method.getBlocks();
int bsz = blocks.size();
@@ -151,7 +144,7 @@
* If params are not in order, we will need register space
* for them before this is all over...
*/
- this.regCount = blocks.getRegCount() + (paramsAreInOrder ? 0 : this.paramSize);
+ this.regCount = blocks.getRegCount() + (method.withDexCallingConvention() ? 0 : this.paramSize);
this.output = new OutputCollector(dexOptions, maxInsns, bsz * 3, regCount, paramSize);
@@ -163,40 +156,6 @@
}
/**
- * Checks to see if the move-param instructions that occur in this
- * method happen to slot the params in an order at the top of the
- * stack frame that matches dalvik's calling conventions. This will
- * alway result in "true" for methods that have run through the
- * SSA optimizer.
- *
- * @param paramSize size, in register units, of all the parameters
- * to this method
- */
- private static boolean calculateParamsAreInOrder(RopMethod method, final int paramSize) {
- final boolean[] paramsAreInOrder = {true};
- final int initialRegCount = method.getBlocks().getRegCount();
-
- /*
- * We almost could just check the first block here, but the
- * {@code cf} layer will put in a second move-param in a
- * subsequent block in the case of synchronized methods.
- */
- method.getBlocks().forEachInsn(new Insn.BaseVisitor() {
- @Override
- public void visitPlainCstInsn(PlainCstInsn insn) {
- if (insn.getOpcode().getOpcode() == RegOps.MOVE_PARAM) {
- int param = ((CstInteger) insn.getConstant()).getValue();
-
- paramsAreInOrder[0] = paramsAreInOrder[0]
- && ((initialRegCount - paramSize + param) == insn.getResult().getReg());
- }
- }
- });
-
- return paramsAreInOrder[0];
- }
-
- /**
* Does the translation and returns the result.
*
* @return {@code non-null;} the result
@@ -559,7 +518,7 @@
}
if (ropOpcode == RegOps.MOVE_PARAM) {
- if (!paramsAreInOrder) {
+ if (!method.withDexCallingConvention()) {
/*
* Parameters are not in order at the top of the reg space.
* We need to add moves.
diff --git a/jack/src/com/android/jack/dx/dex/code/StdCatchBuilder.java b/jack/src/com/android/jack/dx/dex/code/StdCatchBuilder.java
index 07c63c3..b2520ef 100644
--- a/jack/src/com/android/jack/dx/dex/code/StdCatchBuilder.java
+++ b/jack/src/com/android/jack/dx/dex/code/StdCatchBuilder.java
@@ -19,7 +19,6 @@
import com.android.jack.dx.rop.code.BasicBlock;
import com.android.jack.dx.rop.code.BasicBlockList;
import com.android.jack.dx.rop.code.RopMethod;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
import com.android.jack.dx.util.IntList;
@@ -53,18 +52,9 @@
* @param addresses {@code non-null;} address objects for each block
*/
public StdCatchBuilder(RopMethod method, int[] order, BlockAddresses addresses) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
- if (order == null) {
- throw new NullPointerException("order == null");
- }
-
- if (addresses == null) {
- throw new NullPointerException("addresses == null");
- }
-
+ assert method != null;
+ assert order != null;
+ assert addresses != null;
this.method = method;
this.order = order;
this.addresses = addresses;
@@ -246,9 +236,8 @@
CatchHandlerList result = new CatchHandlerList(catchSize);
for (int i = 0; i < catchSize; i++) {
- CstType oneType = new CstType(catches.getType(i));
CodeAddress oneHandler = addresses.getStart(successors.get(i));
- result.set(i, oneType, oneHandler.getAddress());
+ result.set(i, catches.getType(i), oneHandler.getAddress());
}
result.setImmutable();
@@ -289,18 +278,11 @@
* @return {@code true} if the range is valid as a catch range
*/
private static boolean rangeIsValid(BasicBlock start, BasicBlock end, BlockAddresses addresses) {
- if (start == null) {
- throw new NullPointerException("start == null");
- }
-
- if (end == null) {
- throw new NullPointerException("end == null");
- }
-
+ assert start != null;
+ assert end != null;
// See above about selection of instructions.
int startAddress = addresses.getLast(start).getAddress();
int endAddress = addresses.getEnd(end).getAddress();
-
return (endAddress - startAddress) <= MAX_CATCH_RANGE;
}
}
diff --git a/jack/src/com/android/jack/dx/dex/code/SwitchData.java b/jack/src/com/android/jack/dx/dex/code/SwitchData.java
index 2e6c268..9c5c061 100644
--- a/jack/src/com/android/jack/dx/dex/code/SwitchData.java
+++ b/jack/src/com/android/jack/dx/dex/code/SwitchData.java
@@ -61,19 +61,9 @@
public SwitchData(SourcePosition position, CodeAddress user, IntList cases,
CodeAddress[] targets) {
super(position, RegisterSpecList.EMPTY);
-
- if (user == null) {
- throw new NullPointerException("user == null");
- }
-
- if (cases == null) {
- throw new NullPointerException("cases == null");
- }
-
- if (targets == null) {
- throw new NullPointerException("targets == null");
- }
-
+ assert user != null;
+ assert cases != null;
+ assert targets != null;
int sz = cases.size();
if (sz != targets.length) {
diff --git a/jack/src/com/android/jack/dx/dex/code/TargetInsn.java b/jack/src/com/android/jack/dx/dex/code/TargetInsn.java
index b97025d..545e821 100644
--- a/jack/src/com/android/jack/dx/dex/code/TargetInsn.java
+++ b/jack/src/com/android/jack/dx/dex/code/TargetInsn.java
@@ -24,7 +24,7 @@
*/
public final class TargetInsn extends FixedSizeInsn {
/** {@code non-null;} the branch target */
- private CodeAddress target;
+ private final CodeAddress target;
/**
* Constructs an instance. The output address of this instance is initially
@@ -41,11 +41,7 @@
public TargetInsn(Dop opcode, SourcePosition position, RegisterSpecList registers,
CodeAddress target) {
super(opcode, position, registers);
-
- if (target == null) {
- throw new NullPointerException("target == null");
- }
-
+ assert target != null;
this.target = target;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/form/Form21c.java b/jack/src/com/android/jack/dx/dex/code/form/Form21c.java
index 61236fa..d0fa581 100644
--- a/jack/src/com/android/jack/dx/dex/code/form/Form21c.java
+++ b/jack/src/com/android/jack/dx/dex/code/form/Form21c.java
@@ -24,7 +24,7 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstFieldRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import java.util.BitSet;
@@ -111,7 +111,7 @@
return false;
}
- return (cst instanceof CstType) || (cst instanceof CstFieldRef) || (cst instanceof CstString);
+ return (cst instanceof Type) || (cst instanceof CstFieldRef) || (cst instanceof CstString);
}
/** {@inheritDoc} */
diff --git a/jack/src/com/android/jack/dx/dex/code/form/Form22c.java b/jack/src/com/android/jack/dx/dex/code/form/Form22c.java
index 95144d2..8fc181a 100644
--- a/jack/src/com/android/jack/dx/dex/code/form/Form22c.java
+++ b/jack/src/com/android/jack/dx/dex/code/form/Form22c.java
@@ -22,7 +22,7 @@
import com.android.jack.dx.rop.code.RegisterSpecList;
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstFieldRef;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import java.util.BitSet;
@@ -85,7 +85,7 @@
}
Constant cst = ci.getConstant();
- return (cst instanceof CstType) || (cst instanceof CstFieldRef);
+ return (cst instanceof Type) || (cst instanceof CstFieldRef);
}
/** {@inheritDoc} */
diff --git a/jack/src/com/android/jack/dx/dex/code/form/Form31c.java b/jack/src/com/android/jack/dx/dex/code/form/Form31c.java
index 599119e..42c1277 100644
--- a/jack/src/com/android/jack/dx/dex/code/form/Form31c.java
+++ b/jack/src/com/android/jack/dx/dex/code/form/Form31c.java
@@ -24,7 +24,7 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstFieldRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import java.util.BitSet;
@@ -106,7 +106,7 @@
CstInsn ci = (CstInsn) insn;
Constant cst = ci.getConstant();
- return (cst instanceof CstType) || (cst instanceof CstFieldRef) || (cst instanceof CstString);
+ return (cst instanceof Type) || (cst instanceof CstFieldRef) || (cst instanceof CstString);
}
/** {@inheritDoc} */
diff --git a/jack/src/com/android/jack/dx/dex/code/form/Form35c.java b/jack/src/com/android/jack/dx/dex/code/form/Form35c.java
index 7334e54..ea8614d 100644
--- a/jack/src/com/android/jack/dx/dex/code/form/Form35c.java
+++ b/jack/src/com/android/jack/dx/dex/code/form/Form35c.java
@@ -24,7 +24,6 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstCallSiteRef;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
@@ -87,7 +86,7 @@
}
Constant cst = ci.getConstant();
- if (!((cst instanceof CstMethodRef) || (cst instanceof CstType)
+ if (!((cst instanceof CstMethodRef) || (cst instanceof Type)
|| (cst instanceof CstCallSiteRef))) {
return false;
}
diff --git a/jack/src/com/android/jack/dx/dex/code/form/Form3rc.java b/jack/src/com/android/jack/dx/dex/code/form/Form3rc.java
index ec815fd..62bf430 100644
--- a/jack/src/com/android/jack/dx/dex/code/form/Form3rc.java
+++ b/jack/src/com/android/jack/dx/dex/code/form/Form3rc.java
@@ -23,7 +23,7 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstCallSiteRef;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
/**
@@ -79,7 +79,7 @@
return false;
}
- if (!((cst instanceof CstMethodRef) || (cst instanceof CstType)
+ if (!((cst instanceof CstMethodRef) || (cst instanceof Type)
|| (cst instanceof CstCallSiteRef))) {
return false;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/AnnotationItem.java b/jack/src/com/android/jack/dx/dex/file/AnnotationItem.java
index 492da3f..52b82b9 100644
--- a/jack/src/com/android/jack/dx/dex/file/AnnotationItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/AnnotationItem.java
@@ -107,11 +107,7 @@
* leb128 type is used to represent some things.
*/
super(ALIGNMENT, -1);
-
- if (annotation == null) {
- throw new NullPointerException("annotation == null");
- }
-
+ assert annotation != null;
this.annotation = annotation;
this.type = null;
this.encodedForm = null;
diff --git a/jack/src/com/android/jack/dx/dex/file/AnnotationSetItem.java b/jack/src/com/android/jack/dx/dex/file/AnnotationSetItem.java
index eea7fa6..79927e6 100644
--- a/jack/src/com/android/jack/dx/dex/file/AnnotationSetItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/AnnotationSetItem.java
@@ -67,13 +67,8 @@
*/
private static int writeSize(Annotations annotations) {
// This includes an int size at the start of the list.
-
- try {
- return (annotations.size() * ENTRY_WRITE_SIZE) + 4;
- } catch (NullPointerException ex) {
- // Elucidate the exception.
- throw new NullPointerException("list == null");
- }
+ assert annotations != null;
+ return (annotations.size() * ENTRY_WRITE_SIZE) + 4;
}
/**
diff --git a/jack/src/com/android/jack/dx/dex/file/AnnotationSetRefItem.java b/jack/src/com/android/jack/dx/dex/file/AnnotationSetRefItem.java
index 2759ebd..e2af2b4 100644
--- a/jack/src/com/android/jack/dx/dex/file/AnnotationSetRefItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/AnnotationSetRefItem.java
@@ -39,11 +39,7 @@
*/
public AnnotationSetRefItem(AnnotationSetItem annotations) {
super(ALIGNMENT, WRITE_SIZE);
-
- if (annotations == null) {
- throw new NullPointerException("annotations == null");
- }
-
+ assert annotations != null;
this.annotations = annotations;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/AnnotationUtils.java b/jack/src/com/android/jack/dx/dex/file/AnnotationUtils.java
index 6ab032b..49d4b1b 100644
--- a/jack/src/com/android/jack/dx/dex/file/AnnotationUtils.java
+++ b/jack/src/com/android/jack/dx/dex/file/AnnotationUtils.java
@@ -27,7 +27,6 @@
import com.android.jack.dx.rop.cst.CstKnownNull;
import com.android.jack.dx.rop.cst.CstMethodRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
@@ -36,28 +35,25 @@
*/
public final class AnnotationUtils {
/** {@code non-null;} type for {@code AnnotationDefault} annotations */
- private static final CstType ANNOTATION_DEFAULT_TYPE =
- CstType.intern(Type.intern("Ldalvik/annotation/AnnotationDefault;"));
+ private static final Type ANNOTATION_DEFAULT_TYPE =
+ Type.intern("Ldalvik/annotation/AnnotationDefault;");
/** {@code non-null;} type for {@code EnclosingClass} annotations */
- private static final CstType ENCLOSING_CLASS_TYPE =
- CstType.intern(Type.intern("Ldalvik/annotation/EnclosingClass;"));
+ private static final Type ENCLOSING_CLASS_TYPE =
+ Type.intern("Ldalvik/annotation/EnclosingClass;");
/** {@code non-null;} type for {@code EnclosingMethod} annotations */
- private static final CstType ENCLOSING_METHOD_TYPE =
- CstType.intern(Type.intern("Ldalvik/annotation/EnclosingMethod;"));
+ private static final Type ENCLOSING_METHOD_TYPE =
+ Type.intern("Ldalvik/annotation/EnclosingMethod;");
/** {@code non-null;} type for {@code InnerClass} annotations */
- private static final CstType INNER_CLASS_TYPE =
- CstType.intern(Type.intern("Ldalvik/annotation/InnerClass;"));
+ private static final Type INNER_CLASS_TYPE = Type.intern("Ldalvik/annotation/InnerClass;");
/** {@code non-null;} type for {@code MemberClasses} annotations */
- private static final CstType MEMBER_CLASSES_TYPE =
- CstType.intern(Type.intern("Ldalvik/annotation/MemberClasses;"));
+ private static final Type MEMBER_CLASSES_TYPE = Type.intern("Ldalvik/annotation/MemberClasses;");
/** {@code non-null;} type for {@code Throws} annotations */
- private static final CstType THROWS_TYPE =
- CstType.intern(Type.intern("Ldalvik/annotation/Throws;"));
+ private static final Type THROWS_TYPE = Type.intern("Ldalvik/annotation/Throws;");
/** {@code non-null;} the UTF-8 constant {@code "accessFlags"} */
private static final CstString ACCESS_FLAGS_STRING = new CstString("accessFlags");
@@ -95,7 +91,7 @@
* @param clazz {@code non-null;} the enclosing class
* @return {@code non-null;} the annotation
*/
- public static Annotation makeEnclosingClass(CstType clazz) {
+ public static Annotation makeEnclosingClass(Type clazz) {
Annotation result = new Annotation(ENCLOSING_CLASS_TYPE, SYSTEM);
result.put(new NameValuePair(VALUE_STRING, clazz));
@@ -174,7 +170,7 @@
CstArray.List list = new CstArray.List(size);
for (int i = 0; i < size; i++) {
- list.set(i, CstType.intern(types.getType(i)));
+ list.set(i, types.getType(i));
}
list.setImmutable();
diff --git a/jack/src/com/android/jack/dx/dex/file/AnnotationsDirectoryItem.java b/jack/src/com/android/jack/dx/dex/file/AnnotationsDirectoryItem.java
index 481b7fb..1260851 100644
--- a/jack/src/com/android/jack/dx/dex/file/AnnotationsDirectoryItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/AnnotationsDirectoryItem.java
@@ -130,9 +130,7 @@
* @param annotations {@code non-null;} annotations to set for this class
*/
public void setClassAnnotations(Annotations annotations) {
- if (annotations == null) {
- throw new NullPointerException("annotations == null");
- }
+ assert annotations != null;
if (classAnnotations != null) {
throw new UnsupportedOperationException("class annotations already set");
diff --git a/jack/src/com/android/jack/dx/dex/file/CallSiteIdsSection.java b/jack/src/com/android/jack/dx/dex/file/CallSiteIdsSection.java
index 36672c1..196c009 100644
--- a/jack/src/com/android/jack/dx/dex/file/CallSiteIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/CallSiteIdsSection.java
@@ -18,8 +18,6 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstCallSiteRef;
-import com.android.jack.dx.util.AnnotatedOutput;
-import com.android.jack.dx.util.Hex;
import java.util.Collection;
import java.util.LinkedHashMap;
@@ -61,30 +59,6 @@
return result;
}
- /**
- * Writes the portion of the file header that refers to this instance.
- *
- * @param out {@code non-null;} where to write
- */
- public void writeHeaderPart(AnnotatedOutput out) {
- throwIfNotPrepared();
-
- int sz = callSiteIds.size();
- int offset = (sz == 0) ? 0 : getFileOffset();
-
- if (sz > 65536) {
- throw new UnsupportedOperationException("too many call site ids");
- }
-
- if (out.annotates()) {
- out.annotate(4, "call_site_ids_size: " + Hex.u4(sz));
- out.annotate(4, "call_site_ids_off: " + Hex.u4(offset));
- }
-
- out.writeInt(sz);
- out.writeInt(offset);
- }
-
public void add(@Nonnull CstCallSiteRef cstCallSiteRef) {
throwIfPrepared();
diff --git a/jack/src/com/android/jack/dx/dex/file/ClassDataItem.java b/jack/src/com/android/jack/dx/dex/file/ClassDataItem.java
index 19538d7..3250018 100644
--- a/jack/src/com/android/jack/dx/dex/file/ClassDataItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/ClassDataItem.java
@@ -19,8 +19,8 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstArray;
import com.android.jack.dx.rop.cst.CstLiteralBits;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.cst.Zeroes;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.ByteArrayAnnotatedOutput;
import com.android.jack.dx.util.Writers;
@@ -39,7 +39,7 @@
*/
public final class ClassDataItem extends OffsettedItem {
/** {@code non-null;} what class this data is for, just for listing generation */
- private final CstType thisClass;
+ private final Type thisClass;
/** {@code non-null;} list of static fields */
private final ArrayList<EncodedField> staticFields;
@@ -72,13 +72,9 @@
* @param thisClass {@code non-null;} what class this data is for, just
* for listing generation
*/
- public ClassDataItem(CstType thisClass) {
+ public ClassDataItem(Type thisClass) {
super(1, -1);
-
- if (thisClass == null) {
- throw new NullPointerException("thisClass == null");
- }
-
+ assert thisClass != null;
this.thisClass = thisClass;
this.staticFields = new ArrayList<EncodedField>(20);
this.staticValues = new HashMap<EncodedField, Constant>(40);
@@ -118,9 +114,7 @@
* @param value {@code null-ok;} initial value for the field, if any
*/
public void addStaticField(EncodedField field, Constant value) {
- if (field == null) {
- throw new NullPointerException("field == null");
- }
+ assert field != null;
if (staticValuesConstant != null) {
throw new UnsupportedOperationException("static fields already sorted");
@@ -136,10 +130,7 @@
* @param field {@code non-null;} the field to add
*/
public void addInstanceField(EncodedField field) {
- if (field == null) {
- throw new NullPointerException("field == null");
- }
-
+ assert field != null;
instanceFields.add(field);
}
@@ -149,10 +140,7 @@
* @param method {@code non-null;} the method to add
*/
public void addDirectMethod(EncodedMethod method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
+ assert method != null;
directMethods.add(method);
}
@@ -162,10 +150,7 @@
* @param method {@code non-null;} the method to add
*/
public void addVirtualMethod(EncodedMethod method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
+ assert method != null;
virtualMethods.add(method);
}
diff --git a/jack/src/com/android/jack/dx/dex/file/ClassDefItem.java b/jack/src/com/android/jack/dx/dex/file/ClassDefItem.java
index a75a2fd..144d4e8 100644
--- a/jack/src/com/android/jack/dx/dex/file/ClassDefItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/ClassDefItem.java
@@ -25,8 +25,8 @@
import com.android.jack.dx.rop.cst.CstFieldRef;
import com.android.jack.dx.rop.cst.CstMethodRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.StdTypeList;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.Hex;
@@ -44,7 +44,7 @@
public final class ClassDefItem extends IndexedItem {
/** {@code non-null;} type constant for this class */
- private final CstType thisClass;
+ private final Type thisClass;
/** access flags */
private final int accessFlags;
@@ -53,7 +53,7 @@
* {@code null-ok;} superclass or {@code null} if this class is a/the
* root class
*/
- private final CstType superclass;
+ private final Type superclass;
/** {@code null-ok;} list of implemented interfaces */
private TypeListItem interfaces;
@@ -85,21 +85,14 @@
* @param sourceFile {@code null-ok;} source file name or
* {@code null} if unknown
*/
- public ClassDefItem(CstType thisClass, int accessFlags, CstType superclass, TypeList interfaces,
+ public ClassDefItem(Type thisClass, int accessFlags, Type superclass, TypeList interfaces,
CstString sourceFile) {
- if (thisClass == null) {
- throw new NullPointerException("thisClass == null");
- }
-
+ assert thisClass != null;
+ assert interfaces != null;
/*
* TODO(dx team): Maybe check accessFlags and superclass, at
* least for easily-checked stuff?
*/
-
- if (interfaces == null) {
- throw new NullPointerException("interfaces == null");
- }
-
this.thisClass = thisClass;
this.accessFlags = accessFlags;
this.superclass = superclass;
@@ -213,7 +206,7 @@
*
* @return {@code non-null;} the constant
*/
- public CstType getThisClass() {
+ public Type getThisClass() {
return thisClass;
}
@@ -232,7 +225,7 @@
* @return {@code null-ok;} the superclass or {@code null} if
* this class is a/the root class
*/
- public CstType getSuperclass() {
+ public Type getSuperclass() {
return superclass;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/ClassDefsSection.java b/jack/src/com/android/jack/dx/dex/file/ClassDefsSection.java
index 0c66c50..77681c2 100644
--- a/jack/src/com/android/jack/dx/dex/file/ClassDefsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/ClassDefsSection.java
@@ -17,7 +17,6 @@
package com.android.jack.dx.dex.file;
import com.android.jack.dx.rop.cst.Constant;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
import com.android.jack.dx.util.AnnotatedOutput;
@@ -65,14 +64,11 @@
/** {@inheritDoc} */
@Override
public IndexedItem get(Constant cst) {
- if (cst == null) {
- throw new NullPointerException("cst == null");
- }
+ assert cst != null;
throwIfNotPrepared();
- Type type = ((CstType) cst).getClassType();
- IndexedItem result = classDefs.get(type);
+ IndexedItem result = classDefs.get(cst);
if (result == null) {
throw new IllegalArgumentException("not found");
@@ -108,14 +104,9 @@
* @param clazz {@code non-null;} the class def to add
*/
public void add(ClassDefItem clazz) {
- Type type;
+ assert clazz != null;
+ Type type = clazz.getThisClass();
- try {
- type = clazz.getThisClass().getClassType();
- } catch (NullPointerException ex) {
- // Elucidate the exception.
- throw new NullPointerException("clazz == null");
- }
throwIfPrepared();
@@ -168,9 +159,8 @@
maxDepth--;
- CstType superclassCst = c.getSuperclass();
- if (superclassCst != null) {
- Type superclass = superclassCst.getClassType();
+ Type superclass = c.getSuperclass();
+ if (superclass != null) {
idx = orderItems0(superclass, idx, maxDepth);
}
diff --git a/jack/src/com/android/jack/dx/dex/file/CodeItem.java b/jack/src/com/android/jack/dx/dex/file/CodeItem.java
index 97041a8..f69801e 100644
--- a/jack/src/com/android/jack/dx/dex/file/CodeItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/CodeItem.java
@@ -71,19 +71,9 @@
*/
public CodeItem(CstMethodRef ref, DalvCode code, boolean isStatic, TypeList throwsList) {
super(ALIGNMENT, -1);
-
- if (ref == null) {
- throw new NullPointerException("ref == null");
- }
-
- if (code == null) {
- throw new NullPointerException("code == null");
- }
-
- if (throwsList == null) {
- throw new NullPointerException("throwsList == null");
- }
-
+ assert ref != null;
+ assert code != null;
+ assert throwsList != null;
this.ref = ref;
this.code = code;
this.isStatic = isStatic;
diff --git a/jack/src/com/android/jack/dx/dex/file/DebugInfoDecoder.java b/jack/src/com/android/jack/dx/dex/file/DebugInfoDecoder.java
index 3672450..0d17a37 100644
--- a/jack/src/com/android/jack/dx/dex/file/DebugInfoDecoder.java
+++ b/jack/src/com/android/jack/dx/dex/file/DebugInfoDecoder.java
@@ -116,10 +116,7 @@
*/
public DebugInfoDecoder(ByteInput encoded, int regSize, boolean isStatic, Prototype desc,
int thisIdx) {
- if (encoded == null) {
- throw new NullPointerException("encoded == null");
- }
-
+ assert encoded != null;
this.encoded = encoded;
this.isStatic = isStatic;
this.desc = desc;
diff --git a/jack/src/com/android/jack/dx/dex/file/DebugInfoEncoder.java b/jack/src/com/android/jack/dx/dex/file/DebugInfoEncoder.java
index cb41406..f584b68 100644
--- a/jack/src/com/android/jack/dx/dex/file/DebugInfoEncoder.java
+++ b/jack/src/com/android/jack/dx/dex/file/DebugInfoEncoder.java
@@ -34,7 +34,6 @@
import com.android.jack.dx.rop.code.SourcePosition;
import com.android.jack.dx.rop.cst.CstMethodRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Prototype;
import com.android.jack.dx.rop.type.StdTypeList;
import com.android.jack.dx.rop.type.Type;
@@ -580,7 +579,7 @@
}
sb.append(' ');
- CstType type = e.getType();
+ Type type = e.getType();
if (type == null) {
sb.append("null");
} else {
@@ -649,7 +648,7 @@
* @param type {@code null-ok;} type to emit
* @throws IOException
*/
- private void emitTypeIndex(CstType type) throws IOException {
+ private void emitTypeIndex(Type type) throws IOException {
if ((type == null) || (file == null)) {
output.writeUleb128(0);
} else {
diff --git a/jack/src/com/android/jack/dx/dex/file/DebugInfoItem.java b/jack/src/com/android/jack/dx/dex/file/DebugInfoItem.java
index 8f5ceb6..51c4f5a 100644
--- a/jack/src/com/android/jack/dx/dex/file/DebugInfoItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/DebugInfoItem.java
@@ -46,11 +46,7 @@
public DebugInfoItem(DalvCode code, boolean isStatic, CstMethodRef ref) {
// We don't know the write size yet.
super(ALIGNMENT, -1);
-
- if (code == null) {
- throw new NullPointerException("code == null");
- }
-
+ assert code != null;
this.code = code;
this.isStatic = isStatic;
this.ref = ref;
diff --git a/jack/src/com/android/jack/dx/dex/file/DexFile.java b/jack/src/com/android/jack/dx/dex/file/DexFile.java
index 38788c8..7217d7d 100644
--- a/jack/src/com/android/jack/dx/dex/file/DexFile.java
+++ b/jack/src/com/android/jack/dx/dex/file/DexFile.java
@@ -28,7 +28,7 @@
import com.android.jack.dx.rop.cst.CstMethodRef;
import com.android.jack.dx.rop.cst.CstPrototypeRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.ByteArrayAnnotatedOutput;
import com.android.jack.dx.util.ExceptionWithContext;
@@ -492,10 +492,11 @@
* @param cst {@code non-null;} constant to possibly intern
*/
/*package*/void internIfAppropriate(Constant cst) {
+ assert cst != null;
if (cst instanceof CstString) {
stringIds.intern((CstString) cst);
- } else if (cst instanceof CstType) {
- typeIds.intern((CstType) cst);
+ } else if (cst instanceof Type) {
+ typeIds.intern((Type) cst);
} else if (cst instanceof CstBaseMethodRef) {
methodIds.intern((CstBaseMethodRef) cst);
} else if (cst instanceof CstFieldRef) {
@@ -506,16 +507,13 @@
protoIds.intern(((CstPrototypeRef) cst).getPrototype());
} else if (cst instanceof CstMethodHandleRef) {
methodHandleIds.intern((CstMethodHandleRef) cst);
- } else if (cst == null) {
- throw new NullPointerException("cst == null");
}
}
public void appendIfAppropriate(Constant cst) {
+ assert cst != null;
if (cst instanceof CstCallSiteRef) {
callSiteIds.add((CstCallSiteRef) cst);
- } else if (cst == null) {
- throw new NullPointerException("cst == null");
}
}
@@ -533,7 +531,7 @@
public IndexedItem findItemOrNull(Constant cst) {
if (cst instanceof CstString) {
return stringIds.get(cst);
- } else if (cst instanceof CstType) {
+ } else if (cst instanceof Type) {
return typeIds.get(cst);
} else if (cst instanceof CstBaseMethodRef) {
return methodIds.get(cst);
@@ -557,7 +555,7 @@
*/
public void prepare() {
prepare(Collections.<CstString>emptyList(), Collections.<CstFieldRef>emptyList(),
- Collections.<CstMethodRef>emptyList(), Collections.<CstType>emptyList(),
+ Collections.<CstMethodRef>emptyList(), Collections.<Type>emptyList(),
Collections.<CstPrototypeRef>emptyList());
}
@@ -568,12 +566,12 @@
* @param cstStrings Collection of CstString to intern
* @param cstFieldRefs Collection of CstFieldRef to intern
* @param cstMethodRefs Collection of CstMethodRef to intern
- * @param cstTypes Collection of CstType to intern
+ * @param types Collection of {@link Type} to intern
* @param cstPrototypeRefs Collection of CstPrototypeRef to intern
*/
public void prepare(@Nonnull Collection<CstString> cstStrings,
@Nonnull Collection<CstFieldRef> cstFieldRefs,
- @Nonnull Collection<CstMethodRef> cstMethodRefs, @Nonnull Collection<CstType> cstTypes,
+ @Nonnull Collection<CstMethodRef> cstMethodRefs, @Nonnull Collection<Type> types,
@Nonnull Collection<CstPrototypeRef> cstPrototypeRefs) {
for (CstString cst : cstStrings) {
stringIds.intern(cst);
@@ -584,7 +582,7 @@
for (CstMethodRef cst : cstMethodRefs) {
methodIds.intern(cst);
}
- for (CstType cst : cstTypes) {
+ for (Type cst : types) {
typeIds.intern(cst);
}
for (CstPrototypeRef cts : cstPrototypeRefs) {
diff --git a/jack/src/com/android/jack/dx/dex/file/EncodedArrayItem.java b/jack/src/com/android/jack/dx/dex/file/EncodedArrayItem.java
index 7bad073..07494bc 100644
--- a/jack/src/com/android/jack/dx/dex/file/EncodedArrayItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/EncodedArrayItem.java
@@ -47,11 +47,7 @@
* leb128 type is used to represent some things.
*/
super(ALIGNMENT, -1);
-
- if (array == null) {
- throw new NullPointerException("array == null");
- }
-
+ assert array != null;
this.array = array;
this.encodedForm = null;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/EncodedField.java b/jack/src/com/android/jack/dx/dex/file/EncodedField.java
index 46faa65..a934d11 100644
--- a/jack/src/com/android/jack/dx/dex/file/EncodedField.java
+++ b/jack/src/com/android/jack/dx/dex/file/EncodedField.java
@@ -40,17 +40,12 @@
*/
public EncodedField(CstFieldRef field, int accessFlags) {
super(accessFlags);
-
- if (field == null) {
- throw new NullPointerException("field == null");
- }
-
+ assert field != null;
/*
* TODO(dx team): Maybe check accessFlags, at least for
* easily-checked stuff?
*/
-
-this.field = field;
+ this.field = field;
}
/** {@inheritDoc} */
@@ -106,7 +101,7 @@
/** {@inheritDoc} */
@Override
public CstString getName() {
- return field.getNat().getName();
+ return field.getName();
}
/** {@inheritDoc} */
diff --git a/jack/src/com/android/jack/dx/dex/file/EncodedMethod.java b/jack/src/com/android/jack/dx/dex/file/EncodedMethod.java
index c7a65e4..482a94e 100644
--- a/jack/src/com/android/jack/dx/dex/file/EncodedMethod.java
+++ b/jack/src/com/android/jack/dx/dex/file/EncodedMethod.java
@@ -48,15 +48,9 @@
*/
public EncodedMethod(CstMethodRef method, int accessFlags, OffsettedItem code) {
super(accessFlags);
-
assert code == null || code instanceof Code;
-
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
+ assert method != null;
this.method = method;
-
this.code = code;
}
@@ -131,7 +125,7 @@
/** {@inheritDoc} */
@Override
public final CstString getName() {
- return method.getNat().getName();
+ return method.getName();
}
/** {@inheritDoc} */
diff --git a/jack/src/com/android/jack/dx/dex/file/FieldAnnotationStruct.java b/jack/src/com/android/jack/dx/dex/file/FieldAnnotationStruct.java
index 23fb729..4f82500 100644
--- a/jack/src/com/android/jack/dx/dex/file/FieldAnnotationStruct.java
+++ b/jack/src/com/android/jack/dx/dex/file/FieldAnnotationStruct.java
@@ -39,14 +39,8 @@
* @param annotations {@code non-null;} the associated annotations
*/
public FieldAnnotationStruct(CstFieldRef field, AnnotationSetItem annotations) {
- if (field == null) {
- throw new NullPointerException("field == null");
- }
-
- if (annotations == null) {
- throw new NullPointerException("annotations == null");
- }
-
+ assert field != null;
+ assert annotations != null;
this.field = field;
this.annotations = annotations;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/FieldIdsSection.java b/jack/src/com/android/jack/dx/dex/file/FieldIdsSection.java
index d623b74..26c24a3 100644
--- a/jack/src/com/android/jack/dx/dex/file/FieldIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/FieldIdsSection.java
@@ -54,9 +54,7 @@
/** {@inheritDoc} */
@Override
public IndexedItem get(Constant cst) {
- if (cst == null) {
- throw new NullPointerException("cst == null");
- }
+ assert cst != null;
throwIfNotPrepared();
@@ -96,9 +94,7 @@
* @return {@code non-null;} the interned reference
*/
public FieldIdItem intern(CstFieldRef field) {
- if (field == null) {
- throw new NullPointerException("field == null");
- }
+ assert field != null;
throwIfPrepared();
@@ -120,9 +116,7 @@
* @return {@code >= 0;} the reference's index
*/
public int indexOf(CstFieldRef ref) {
- if (ref == null) {
- throw new NullPointerException("ref == null");
- }
+ assert ref != null;
throwIfNotPrepared();
diff --git a/jack/src/com/android/jack/dx/dex/file/HeaderItem.java b/jack/src/com/android/jack/dx/dex/file/HeaderItem.java
index cc4cfff..980da27 100644
--- a/jack/src/com/android/jack/dx/dex/file/HeaderItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/HeaderItem.java
@@ -29,14 +29,10 @@
*/
public final class HeaderItem extends IndexedItem {
- @Nonnegative
- private final int dexVersion;
-
/**
* Constructs an instance.
*/
- public HeaderItem(@Nonnegative int dexVersion) {
- this.dexVersion = dexVersion;
+ public HeaderItem() {
}
/** {@inheritDoc} */
@@ -49,7 +45,7 @@
@Override
@Nonnegative
public int writeSize() {
- return SizeOf.getHeaderSize(dexVersion);
+ return SizeOf.getHeaderSize();
}
/** {@inheritDoc} */
@@ -74,7 +70,7 @@
out.annotate(4, "checksum");
out.annotate(20, "signature");
out.annotate(4, "file_size: " + Hex.u4(file.getFileSize()));
- out.annotate(4, "header_size: " + Hex.u4(SizeOf.getHeaderSize(dexVersion)));
+ out.annotate(4, "header_size: " + Hex.u4(SizeOf.getHeaderSize()));
out.annotate(4, "endian_tag: " + Hex.u4(DexFormat.ENDIAN_TAG));
out.annotate(4, "link_size: 0");
out.annotate(4, "link_off: 0");
@@ -90,7 +86,7 @@
out.writeZeroes(24);
out.writeInt(file.getFileSize());
- out.writeInt(SizeOf.getHeaderSize(dexVersion));
+ out.writeInt(SizeOf.getHeaderSize());
out.writeInt(DexFormat.ENDIAN_TAG);
/*
@@ -109,11 +105,6 @@
file.getMethodIds().writeHeaderPart(out);
file.getClassDefs().writeHeaderPart(out);
- if (dexVersion == DexFormat.O_BETA2_DEX_VERSION) {
- file.getCallSiteIds().writeHeaderPart(out);
- file.getMethodHandleIds().writeHeaderPart(out);
- }
-
if (out.annotates()) {
out.annotate(4, "data_size: " + Hex.u4(dataSize));
out.annotate(4, "data_off: " + Hex.u4(dataOff));
diff --git a/jack/src/com/android/jack/dx/dex/file/HeaderSection.java b/jack/src/com/android/jack/dx/dex/file/HeaderSection.java
index e9db77c..a5df91b 100644
--- a/jack/src/com/android/jack/dx/dex/file/HeaderSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/HeaderSection.java
@@ -37,7 +37,7 @@
public HeaderSection(DexFile file) {
super(null, file, 4);
- HeaderItem item = new HeaderItem(file.getDexOptions().getDexVersion());
+ HeaderItem item = new HeaderItem();
item.setIndex(0);
this.list = Collections.singletonList(item);
diff --git a/jack/src/com/android/jack/dx/dex/file/IdItem.java b/jack/src/com/android/jack/dx/dex/file/IdItem.java
index df27a71..666b8e5 100644
--- a/jack/src/com/android/jack/dx/dex/file/IdItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/IdItem.java
@@ -16,29 +16,24 @@
package com.android.jack.dx.dex.file;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
/**
* Representation of a reference to an item inside a Dalvik file.
*/
public abstract class IdItem extends IndexedItem {
/**
- * {@code non-null;} the type constant for the defining class of
- * the reference
+ * {@code non-null;} the type for the defining class of the reference
*/
- private final CstType type;
+ private final Type type;
/**
* Constructs an instance.
*
- * @param type {@code non-null;} the type constant for the defining
- * class of the reference
+ * @param type {@code non-null;} the type for the defining class of the reference
*/
- public IdItem(CstType type) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
+ public IdItem(Type type) {
+ assert type != null;
this.type = type;
}
@@ -50,12 +45,11 @@
}
/**
- * Gets the type constant for the defining class of the
- * reference.
+ * Gets the type for the defining class of the reference.
*
* @return {@code non-null;} the type constant
*/
- public final CstType getDefiningClass() {
+ public final Type getDefiningClass() {
return type;
}
}
diff --git a/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java b/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java
index fcc0107..27f2fc0 100644
--- a/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/ImportedCodeItem.java
@@ -77,22 +77,12 @@
public ImportedCodeItem(CstMethodRef ref, Code code, ImportedDebugInfoItem debugInfoItem,
CstIndexMap cstIndexMap) {
super(ALIGNMENT, -1);
-
- if (ref == null) {
- throw new NullPointerException("ref == null");
- }
+ assert ref != null;
+ assert code != null;
+ assert cstIndexMap != null;
this.ref = ref;
-
- if (code == null) {
- throw new NullPointerException("code == null");
- }
this.code = code;
-
this.debugInfoItem = debugInfoItem;
-
- if (cstIndexMap == null) {
- throw new NullPointerException("cstIndexMap == null");
- }
this.cstIndexMap = cstIndexMap;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/MapItem.java b/jack/src/com/android/jack/dx/dex/file/MapItem.java
index 21f1724..7ffac12 100644
--- a/jack/src/com/android/jack/dx/dex/file/MapItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/MapItem.java
@@ -59,9 +59,7 @@
* should be added to; it should be empty on entry to this method
*/
public static void addMap(Section[] sections, MixedItemSection mapSection) {
- if (sections == null) {
- throw new NullPointerException("sections == null");
- }
+ assert sections != null;
if (mapSection.items().size() != 0) {
throw new IllegalArgumentException("mapSection.items().size() != 0");
@@ -109,23 +107,12 @@
*/
private MapItem(ItemType type, Section section, Item firstItem, int itemCount) {
super(ALIGNMENT, WRITE_SIZE);
-
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
- if (section == null) {
- throw new NullPointerException("section == null");
- }
-
- if (firstItem == null) {
- throw new NullPointerException("firstItem == null");
- }
-
+ assert type != null;
+ assert section != null;
+ assert firstItem != null;
if (itemCount <= 0) {
throw new IllegalArgumentException("itemCount <= 0");
}
-
this.type = type;
this.section = section;
this.firstItem = firstItem;
@@ -140,11 +127,7 @@
*/
private MapItem(Section section) {
super(ALIGNMENT, WRITE_SIZE);
-
- if (section == null) {
- throw new NullPointerException("section == null");
- }
-
+ assert section != null;
this.type = ItemType.TYPE_MAP_LIST;
this.section = section;
this.firstItem = null;
diff --git a/jack/src/com/android/jack/dx/dex/file/MemberIdItem.java b/jack/src/com/android/jack/dx/dex/file/MemberIdItem.java
index c2011a4..645f28d 100644
--- a/jack/src/com/android/jack/dx/dex/file/MemberIdItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/MemberIdItem.java
@@ -18,7 +18,6 @@
import com.android.jack.dx.dex.SizeOf;
import com.android.jack.dx.rop.cst.CstMemberRef;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.Hex;
@@ -53,7 +52,7 @@
super.addContents(file);
StringIdsSection stringIds = file.getStringIds();
- stringIds.intern(getRef().getNat().getName());
+ stringIds.intern(getRef().getName());
}
/** {@inheritDoc} */
@@ -61,9 +60,8 @@
public final void writeTo(DexFile file, AnnotatedOutput out) {
TypeIdsSection typeIds = file.getTypeIds();
StringIdsSection stringIds = file.getStringIds();
- CstNat nat = cst.getNat();
int classIdx = typeIds.indexOf(getDefiningClass());
- int nameIdx = stringIds.indexOf(nat.getName());
+ int nameIdx = stringIds.indexOf(cst.getName());
int typoidIdx = getTypoidIdx(file);
if (out.annotates()) {
diff --git a/jack/src/com/android/jack/dx/dex/file/MethodAnnotationStruct.java b/jack/src/com/android/jack/dx/dex/file/MethodAnnotationStruct.java
index a01882f..6c70d24 100644
--- a/jack/src/com/android/jack/dx/dex/file/MethodAnnotationStruct.java
+++ b/jack/src/com/android/jack/dx/dex/file/MethodAnnotationStruct.java
@@ -39,14 +39,8 @@
* @param annotations {@code non-null;} the associated annotations
*/
public MethodAnnotationStruct(CstMethodRef method, AnnotationSetItem annotations) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
- if (annotations == null) {
- throw new NullPointerException("annotations == null");
- }
-
+ assert method != null;
+ assert annotations != null;
this.method = method;
this.annotations = annotations;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/MethodHandleIdsSection.java b/jack/src/com/android/jack/dx/dex/file/MethodHandleIdsSection.java
index 5380c47..0e1880a 100644
--- a/jack/src/com/android/jack/dx/dex/file/MethodHandleIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/MethodHandleIdsSection.java
@@ -18,8 +18,6 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstMethodHandleRef;
-import com.android.jack.dx.util.AnnotatedOutput;
-import com.android.jack.dx.util.Hex;
import java.util.Collection;
import java.util.TreeMap;
@@ -62,30 +60,6 @@
}
/**
- * Writes the portion of the file header that refers to this instance.
- *
- * @param out {@code non-null;} where to write
- */
- public void writeHeaderPart(@Nonnull AnnotatedOutput out) {
- throwIfNotPrepared();
-
- int sz = methodHandleIds.size();
- int offset = (sz == 0) ? 0 : getFileOffset();
-
- if (sz > 65536) {
- throw new UnsupportedOperationException("too many method handle ids");
- }
-
- if (out.annotates()) {
- out.annotate(4, "method_handle_ids_size: " + Hex.u4(sz));
- out.annotate(4, "method_handle_ids_off: " + Hex.u4(offset));
- }
-
- out.writeInt(sz);
- out.writeInt(offset);
- }
-
- /**
* Interns an element into this instance.
*
* @param cstMethodHandleRef {@code non-null;} the method handle to intern
diff --git a/jack/src/com/android/jack/dx/dex/file/MethodIdsSection.java b/jack/src/com/android/jack/dx/dex/file/MethodIdsSection.java
index f3dc0a6..3830df1 100644
--- a/jack/src/com/android/jack/dx/dex/file/MethodIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/MethodIdsSection.java
@@ -54,9 +54,7 @@
/** {@inheritDoc} */
@Override
public IndexedItem get(Constant cst) {
- if (cst == null) {
- throw new NullPointerException("cst == null");
- }
+ assert cst != null;
throwIfNotPrepared();
@@ -96,9 +94,7 @@
* @return {@code non-null;} the interned reference
*/
public MethodIdItem intern(CstBaseMethodRef method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
+ assert method != null;
throwIfPrepared();
@@ -120,9 +116,7 @@
* @return {@code >= 0;} the reference's index
*/
public int indexOf(CstBaseMethodRef ref) {
- if (ref == null) {
- throw new NullPointerException("ref == null");
- }
+ assert ref != null;
throwIfNotPrepared();
diff --git a/jack/src/com/android/jack/dx/dex/file/MixedItemSection.java b/jack/src/com/android/jack/dx/dex/file/MixedItemSection.java
index 68909b1..93682ca 100644
--- a/jack/src/com/android/jack/dx/dex/file/MixedItemSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/MixedItemSection.java
@@ -166,15 +166,12 @@
* @param item {@code non-null;} the item to add
*/
public void add(OffsettedItem item) {
+ assert item != null;
+
throwIfPrepared();
- try {
- if (item.getAlignment() > getAlignment()) {
- throw new IllegalArgumentException("incompatible item alignment");
- }
- } catch (NullPointerException ex) {
- // Elucidate the exception.
- throw new NullPointerException("item == null");
+ if (item.getAlignment() > getAlignment()) {
+ throw new IllegalArgumentException("incompatible item alignment");
}
items.add(item);
diff --git a/jack/src/com/android/jack/dx/dex/file/OffsettedItem.java b/jack/src/com/android/jack/dx/dex/file/OffsettedItem.java
index 020c3ab..5cc429b 100644
--- a/jack/src/com/android/jack/dx/dex/file/OffsettedItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/OffsettedItem.java
@@ -231,9 +231,7 @@
* in order to meet its alignment constraint
*/
public final int place(Section addedTo, int offset) {
- if (addedTo == null) {
- throw new NullPointerException("addedTo == null");
- }
+ assert addedTo != null;
if (offset < 0) {
throw new IllegalArgumentException("offset < 0");
diff --git a/jack/src/com/android/jack/dx/dex/file/ParameterAnnotationStruct.java b/jack/src/com/android/jack/dx/dex/file/ParameterAnnotationStruct.java
index da4ebc9..97c0270 100644
--- a/jack/src/com/android/jack/dx/dex/file/ParameterAnnotationStruct.java
+++ b/jack/src/com/android/jack/dx/dex/file/ParameterAnnotationStruct.java
@@ -46,14 +46,8 @@
* @param annotationsList {@code non-null;} the associated annotations list
*/
public ParameterAnnotationStruct(CstMethodRef method, AnnotationsList annotationsList) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
- if (annotationsList == null) {
- throw new NullPointerException("annotationsList == null");
- }
-
+ assert method != null;
+ assert annotationsList != null;
this.method = method;
this.annotationsList = annotationsList;
diff --git a/jack/src/com/android/jack/dx/dex/file/ProtoIdItem.java b/jack/src/com/android/jack/dx/dex/file/ProtoIdItem.java
index f971c05..29185a8 100644
--- a/jack/src/com/android/jack/dx/dex/file/ProtoIdItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/ProtoIdItem.java
@@ -49,9 +49,7 @@
* @param prototype {@code non-null;} the constant for the prototype
*/
public ProtoIdItem(Prototype prototype) {
- if (prototype == null) {
- throw new NullPointerException("prototype == null");
- }
+ assert prototype != null;
this.prototype = prototype;
this.shortForm = makeShortForm(prototype);
@@ -87,7 +85,7 @@
* @return the corresponding short-form character
*/
private static char shortFormCharFor(Type type) {
- char descriptorChar = type.getDescriptor().charAt(0);
+ char descriptorChar = type.getDescriptor().getString().charAt(0);
if (descriptorChar == '[') {
return 'L';
diff --git a/jack/src/com/android/jack/dx/dex/file/ProtoIdsSection.java b/jack/src/com/android/jack/dx/dex/file/ProtoIdsSection.java
index 4740173..2d8a80c 100644
--- a/jack/src/com/android/jack/dx/dex/file/ProtoIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/ProtoIdsSection.java
@@ -97,9 +97,7 @@
* @return {@code non-null;} the interned reference
*/
public ProtoIdItem intern(Prototype prototype) {
- if (prototype == null) {
- throw new NullPointerException("prototype == null");
- }
+ assert prototype != null;
throwIfPrepared();
@@ -121,9 +119,7 @@
* @return {@code >= 0;} the reference's index
*/
public int indexOf(Prototype prototype) {
- if (prototype == null) {
- throw new NullPointerException("prototype == null");
- }
+ assert prototype != null;
throwIfNotPrepared();
diff --git a/jack/src/com/android/jack/dx/dex/file/Section.java b/jack/src/com/android/jack/dx/dex/file/Section.java
index 46d332d..918d585 100644
--- a/jack/src/com/android/jack/dx/dex/file/Section.java
+++ b/jack/src/com/android/jack/dx/dex/file/Section.java
@@ -66,9 +66,7 @@
* must be a power of 2
*/
public Section(String name, DexFile file, int alignment) {
- if (file == null) {
- throw new NullPointerException("file == null");
- }
+ assert file != null;
validateAlignment(alignment);
diff --git a/jack/src/com/android/jack/dx/dex/file/StringIdItem.java b/jack/src/com/android/jack/dx/dex/file/StringIdItem.java
index c42f264..409aebc 100644
--- a/jack/src/com/android/jack/dx/dex/file/StringIdItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/StringIdItem.java
@@ -37,10 +37,7 @@
* @param value {@code non-null;} the string value
*/
public StringIdItem(CstString value) {
- if (value == null) {
- throw new NullPointerException("value == null");
- }
-
+ assert value != null;
this.value = value;
this.data = null;
}
diff --git a/jack/src/com/android/jack/dx/dex/file/StringIdsSection.java b/jack/src/com/android/jack/dx/dex/file/StringIdsSection.java
index 53e5241..f054936 100644
--- a/jack/src/com/android/jack/dx/dex/file/StringIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/StringIdsSection.java
@@ -17,7 +17,6 @@
package com.android.jack.dx.dex.file;
import com.android.jack.dx.rop.cst.Constant;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstString;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.Hex;
@@ -55,9 +54,7 @@
/** {@inheritDoc} */
@Override
public IndexedItem get(Constant cst) {
- if (cst == null) {
- throw new NullPointerException("cst == null");
- }
+ assert cst != null;
throwIfNotPrepared();
@@ -108,9 +105,7 @@
* @return {@code non-null;} the interned string
*/
public StringIdItem intern(CstString string) {
- if (string == null) {
- throw new NullPointerException("string == null");
- }
+ assert string != null;
throwIfPrepared();
@@ -132,9 +127,7 @@
* @return {@code non-null;} the interned string
*/
public StringIdItem intern(StringIdItem string) {
- if (string == null) {
- throw new NullPointerException("string == null");
- }
+ assert string != null;
throwIfPrepared();
@@ -150,16 +143,6 @@
}
/**
- * Interns the components of a name-and-type into this instance.
- *
- * @param nat {@code non-null;} the name-and-type
- */
- public void intern(CstNat nat) {
- intern(nat.getName());
- intern(nat.getDescriptor());
- }
-
- /**
* Gets the index of the given string, which must have been added
* to this instance.
*
@@ -167,9 +150,7 @@
* @return {@code >= 0;} the string's index
*/
public int indexOf(CstString string) {
- if (string == null) {
- throw new NullPointerException("string == null");
- }
+ assert string != null;
throwIfNotPrepared();
diff --git a/jack/src/com/android/jack/dx/dex/file/TypeIdItem.java b/jack/src/com/android/jack/dx/dex/file/TypeIdItem.java
index 417afb5..0361dc2 100644
--- a/jack/src/com/android/jack/dx/dex/file/TypeIdItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/TypeIdItem.java
@@ -18,7 +18,7 @@
import com.android.jack.dx.dex.SizeOf;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.Hex;
@@ -29,9 +29,9 @@
/**
* Constructs an instance.
*
- * @param type {@code non-null;} the constant for the type
+ * @param type {@code non-null;} the type
*/
- public TypeIdItem(CstType type) {
+ public TypeIdItem(Type type) {
super(type);
}
@@ -56,7 +56,7 @@
/** {@inheritDoc} */
@Override
public void writeTo(DexFile file, AnnotatedOutput out) {
- CstType type = getDefiningClass();
+ Type type = getDefiningClass();
CstString descriptor = type.getDescriptor();
int idx = file.getStringIds().indexOf(descriptor);
diff --git a/jack/src/com/android/jack/dx/dex/file/TypeIdsSection.java b/jack/src/com/android/jack/dx/dex/file/TypeIdsSection.java
index fd1186a..e8dd6d0 100644
--- a/jack/src/com/android/jack/dx/dex/file/TypeIdsSection.java
+++ b/jack/src/com/android/jack/dx/dex/file/TypeIdsSection.java
@@ -18,7 +18,6 @@
import com.android.jack.dx.dex.DexFormat;
import com.android.jack.dx.rop.cst.Constant;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.DexIndexOverflowException;
@@ -56,14 +55,11 @@
/** {@inheritDoc} */
@Override
public IndexedItem get(Constant cst) {
- if (cst == null) {
- throw new NullPointerException("cst == null");
- }
+ assert cst != null;
throwIfNotPrepared();
- Type type = ((CstType) cst).getClassType();
- IndexedItem result = typeIds.get(type);
+ IndexedItem result = typeIds.get(cst);
if (result == null) {
throw new IllegalArgumentException("not found: " + cst);
@@ -104,41 +100,15 @@
* @return {@code non-null;} the interned reference
*/
public TypeIdItem intern(Type type) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
+ assert type != null;
throwIfPrepared();
TypeIdItem result = typeIds.get(type);
if (result == null) {
- result = new TypeIdItem(new CstType(type));
- typeIds.put(type, result);
- }
-
- return result;
- }
-
- /**
- * Interns an element into this instance.
- *
- * @param type {@code non-null;} the type to intern
- * @return {@code non-null;} the interned reference
- */
- public TypeIdItem intern(CstType type) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
- throwIfPrepared();
-
- Type typePerSe = type.getClassType();
- TypeIdItem result = typeIds.get(typePerSe);
-
- if (result == null) {
result = new TypeIdItem(type);
- typeIds.put(typePerSe, result);
+ typeIds.put(type, result);
}
return result;
@@ -152,9 +122,7 @@
* @return {@code >= 0;} the reference's index
*/
public int indexOf(Type type) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
+ assert type != null;
throwIfNotPrepared();
@@ -167,21 +135,6 @@
return item.getIndex();
}
- /**
- * Gets the index of the given type, which must have
- * been added to this instance.
- *
- * @param type {@code non-null;} the type to look up
- * @return {@code >= 0;} the reference's index
- */
- public int indexOf(CstType type) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
- return indexOf(type.getClassType());
- }
-
/** {@inheritDoc} */
@Override
protected void orderItems() {
diff --git a/jack/src/com/android/jack/dx/dex/file/UniformListItem.java b/jack/src/com/android/jack/dx/dex/file/UniformListItem.java
index 9eb36ae..39dd114 100644
--- a/jack/src/com/android/jack/dx/dex/file/UniformListItem.java
+++ b/jack/src/com/android/jack/dx/dex/file/UniformListItem.java
@@ -52,11 +52,7 @@
*/
public UniformListItem(ItemType itemType, List<T> items) {
super(getAlignment(items), writeSize(items));
-
- if (itemType == null) {
- throw new NullPointerException("itemType == null");
- }
-
+ assert itemType != null;
this.items = items;
this.itemType = itemType;
}
@@ -70,15 +66,13 @@
* @return {@code >= 4;} the alignment requirement
*/
private static int getAlignment(List<? extends OffsettedItem> items) {
+ assert items != null;
try {
// Since they all must have the same alignment, any one will do.
return Math.max(HEADER_SIZE, items.get(0).getAlignment());
} catch (IndexOutOfBoundsException ex) {
// Translate the exception.
throw new IllegalArgumentException("items.size() == 0");
- } catch (NullPointerException ex) {
- // Translate the exception.
- throw new NullPointerException("items == null");
}
}
diff --git a/jack/src/com/android/jack/dx/dex/file/ValueEncoder.java b/jack/src/com/android/jack/dx/dex/file/ValueEncoder.java
index 767339c..9178278 100644
--- a/jack/src/com/android/jack/dx/dex/file/ValueEncoder.java
+++ b/jack/src/com/android/jack/dx/dex/file/ValueEncoder.java
@@ -32,7 +32,7 @@
import com.android.jack.dx.rop.cst.CstMethodRef;
import com.android.jack.dx.rop.cst.CstPrototypeRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.AnnotatedOutput;
import com.android.jack.dx.util.Hex;
@@ -163,14 +163,8 @@
* @param out {@code non-null;} output stream to write to
*/
public ValueEncoder(DexFile file, AnnotatedOutput out) {
- if (file == null) {
- throw new NullPointerException("file == null");
- }
-
- if (out == null) {
- throw new NullPointerException("out == null");
- }
-
+ assert file != null;
+ assert out != null;
this.file = file;
this.out = out;
}
@@ -214,7 +208,7 @@
break;
}
case VALUE_TYPE: {
- int index = file.getTypeIds().indexOf((CstType) cst);
+ int index = file.getTypeIds().indexOf((Type) cst);
writeUnsignedIntegralValue(type, index);
break;
}
@@ -326,7 +320,7 @@
StringIdsSection stringIds = file.getStringIds();
TypeIdsSection typeIds = file.getTypeIds();
- CstType type = annotation.getType();
+ Type type = annotation.getType();
int typeIdx = typeIds.indexOf(type);
if (annotates) {
diff --git a/jack/src/com/android/jack/dx/io/DexBuffer.java b/jack/src/com/android/jack/dx/io/DexBuffer.java
index bacc0a9..b90e567 100644
--- a/jack/src/com/android/jack/dx/io/DexBuffer.java
+++ b/jack/src/com/android/jack/dx/io/DexBuffer.java
@@ -32,6 +32,11 @@
import com.android.jack.dx.util.Leb128Utils;
import com.android.jack.dx.util.Mutf8;
import com.android.jack.tools.merger.MergerTools;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
+import com.android.sched.util.location.FileLocation;
+import com.android.sched.util.location.Location;
+import com.android.sched.util.location.ZipLocation;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -127,10 +132,10 @@
}
/**
- * Creates a new dex buffer of the dex in {@code in}, and closes {@code in}.
+ * Creates a new dex buffer of the dex in {@code in}.
*/
- public DexBuffer(InputStream in) throws IOException {
- loadFrom(in);
+ public DexBuffer(@Nonnull InputStream in, @Nonnull Location location) throws CannotReadException {
+ loadFrom(in, location);
this.internalSection = new Section(0);
this.strings = readStrings();
this.typeIds = readTypeIds();
@@ -144,19 +149,29 @@
/**
* Creates a new dex buffer from the dex file {@code file}.
*/
- public DexBuffer(File file) throws IOException {
+ public DexBuffer(File file) throws CannotReadException, CannotCloseException {
+ FileLocation fileLocation = new FileLocation(file);
if (FileUtils.hasArchiveSuffix(file.getName())) {
- ZipFile zipFile = new ZipFile(file);
- ZipEntry entry = zipFile.getEntry(DexFormat.DEX_IN_JAR_NAME);
- if (entry != null) {
- loadFrom(zipFile.getInputStream(entry));
- zipFile.close();
- } else {
- zipFile.close();
- throw new DexException("Expected " + DexFormat.DEX_IN_JAR_NAME + " in " + file);
+ try (ZipFile zipFile = new ZipFile(file)) {
+ ZipEntry entry = zipFile.getEntry(DexFormat.DEX_IN_JAR_NAME);
+ if (entry != null) {
+ try (InputStream is = zipFile.getInputStream(entry)) {
+ loadFrom(is, new ZipLocation(fileLocation, entry));
+ } catch (IOException e) {
+ throw new CannotCloseException(new ZipLocation(fileLocation, entry), e);
+ }
+ } else {
+ throw new DexException("Expected " + DexFormat.DEX_IN_JAR_NAME + " in " + file);
+ }
+ } catch (IOException e) {
+ throw new CannotCloseException(fileLocation, e);
}
} else if (file.getName().endsWith(".dex")) {
- loadFrom(new FileInputStream(file));
+ try (InputStream is = new FileInputStream(file)) {
+ loadFrom(is, fileLocation);
+ } catch (IOException e) {
+ throw new CannotCloseException(fileLocation, e);
+ }
} else {
throw new DexException("unknown output extension: " + file);
}
@@ -252,15 +267,19 @@
return Arrays.asList(result);
}
- private void loadFrom(InputStream in) throws IOException {
+ private void loadFrom(@Nonnull InputStream in, @Nonnull Location location)
+ throws CannotReadException {
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
- int count;
- while ((count = in.read(buffer)) != -1) {
- bytesOut.write(buffer, 0, count);
+ try {
+ int count;
+ while ((count = in.read(buffer)) != -1) {
+ bytesOut.write(buffer, 0, count);
+ }
+ } catch (IOException e) {
+ throw new CannotReadException(location, e);
}
- in.close();
this.data = bytesOut.toByteArray();
this.length = data.length;
@@ -512,7 +531,7 @@
@Override
protected void visitType(int index) {
- callSiteArrayList.set(idx++, cstIndexMap.getCstType(index));
+ callSiteArrayList.set(idx++, cstIndexMap.getType(index));
}
}
diff --git a/jack/src/com/android/jack/dx/io/DexIndexPrinter.java b/jack/src/com/android/jack/dx/io/DexIndexPrinter.java
index d194b43..dbd9cfc 100644
--- a/jack/src/com/android/jack/dx/io/DexIndexPrinter.java
+++ b/jack/src/com/android/jack/dx/io/DexIndexPrinter.java
@@ -17,9 +17,10 @@
package com.android.jack.dx.io;
import com.android.jack.dx.dex.TableOfContents;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotReadException;
import java.io.File;
-import java.io.IOException;
/**
* Executable that prints all indices of a dex file.
@@ -28,7 +29,7 @@
private final DexBuffer dexBuffer;
private final TableOfContents tableOfContents;
- public DexIndexPrinter(File file) throws IOException {
+ public DexIndexPrinter(File file) throws CannotReadException, CannotCloseException {
this.dexBuffer = new DexBuffer(file);
this.tableOfContents = dexBuffer.getTableOfContents();
}
@@ -110,7 +111,7 @@
}
}
- public static void main(String[] args) throws IOException {
+ public static void main(String[] args) throws CannotReadException, CannotCloseException {
DexIndexPrinter indexPrinter = new DexIndexPrinter(new File(args[0]));
indexPrinter.printMap();
indexPrinter.printStrings();
diff --git a/jack/src/com/android/jack/dx/io/instructions/ShortArrayCodeInput.java b/jack/src/com/android/jack/dx/io/instructions/ShortArrayCodeInput.java
index 4f3fba1..ed7ca8d 100644
--- a/jack/src/com/android/jack/dx/io/instructions/ShortArrayCodeInput.java
+++ b/jack/src/com/android/jack/dx/io/instructions/ShortArrayCodeInput.java
@@ -29,10 +29,7 @@
* Constructs an instance.
*/
public ShortArrayCodeInput(short[] array) {
- if (array == null) {
- throw new NullPointerException("array == null");
- }
-
+ assert array != null;
this.array = array;
}
diff --git a/jack/src/com/android/jack/dx/rop/annotation/Annotation.java b/jack/src/com/android/jack/dx/rop/annotation/Annotation.java
index a0453e8..c978b6a 100644
--- a/jack/src/com/android/jack/dx/rop/annotation/Annotation.java
+++ b/jack/src/com/android/jack/dx/rop/annotation/Annotation.java
@@ -17,7 +17,7 @@
package com.android.jack.dx.rop.annotation;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.MutabilityControl;
import com.android.jack.dx.util.ToHuman;
@@ -33,7 +33,7 @@
*/
public final class Annotation extends MutabilityControl implements Comparable<Annotation>, ToHuman {
/** {@code non-null;} type of the annotation */
- private final CstType type;
+ private final Type type;
/** {@code non-null;} the visibility of the annotation */
private final AnnotationVisibility visibility;
@@ -47,15 +47,9 @@
* @param type {@code non-null;} type of the annotation
* @param visibility {@code non-null;} the visibility of the annotation
*/
- public Annotation(CstType type, AnnotationVisibility visibility) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
- if (visibility == null) {
- throw new NullPointerException("visibility == null");
- }
-
+ public Annotation(Type type, AnnotationVisibility visibility) {
+ assert type != null;
+ assert visibility != null;
this.type = type;
this.visibility = visibility;
this.elements = new TreeMap<CstString, NameValuePair>();
@@ -160,7 +154,7 @@
*
* @return {@code non-null;} the type
*/
- public CstType getType() {
+ public Type getType() {
return type;
}
@@ -181,12 +175,8 @@
* @param pair {@code non-null;} the (name, value) pair to place into this instance
*/
public void put(NameValuePair pair) {
+ assert pair != null;
throwIfImmutable();
-
- if (pair == null) {
- throw new NullPointerException("pair == null");
- }
-
elements.put(pair.getName(), pair);
}
@@ -198,12 +188,8 @@
* @param pair {@code non-null;} the (name, value) pair to add to this instance
*/
public void add(NameValuePair pair) {
+ assert pair != null;
throwIfImmutable();
-
- if (pair == null) {
- throw new NullPointerException("pair == null");
- }
-
CstString name = pair.getName();
if (elements.get(name) != null) {
diff --git a/jack/src/com/android/jack/dx/rop/annotation/Annotations.java b/jack/src/com/android/jack/dx/rop/annotation/Annotations.java
index 626f963..708bd9f 100644
--- a/jack/src/com/android/jack/dx/rop/annotation/Annotations.java
+++ b/jack/src/com/android/jack/dx/rop/annotation/Annotations.java
@@ -16,7 +16,7 @@
package com.android.jack.dx.rop.annotation;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.MutabilityControl;
import java.util.Collection;
@@ -36,7 +36,7 @@
}
/** {@code non-null;} map from types to annotations */
- private final TreeMap<CstType, Annotation> annotations;
+ private final TreeMap<Type, Annotation> annotations;
/**
* Constructs an immutable instance which is the combination of the
@@ -82,7 +82,7 @@
* Constructs an empty instance.
*/
public Annotations() {
- annotations = new TreeMap<CstType, Annotation>();
+ annotations = new TreeMap<Type, Annotation>();
}
/** {@inheritDoc} */
@@ -166,13 +166,11 @@
* @throws IllegalArgumentException thrown if there is a duplicate type
*/
public void add(Annotation annotation) {
+ assert annotation != null;
+
throwIfImmutable();
- if (annotation == null) {
- throw new NullPointerException("annotation == null");
- }
-
- CstType type = annotation.getType();
+ Type type = annotation.getType();
if (annotations.containsKey(type)) {
throw new IllegalArgumentException("duplicate type: " + type.toHuman());
@@ -189,11 +187,9 @@
* @throws IllegalArgumentException thrown if there is a duplicate type
*/
public void addAll(Annotations toAdd) {
- throwIfImmutable();
+ assert toAdd != null;
- if (toAdd == null) {
- throw new NullPointerException("toAdd == null");
- }
+ throwIfImmutable();
for (Annotation a : toAdd.annotations.values()) {
add(a);
diff --git a/jack/src/com/android/jack/dx/rop/annotation/NameValuePair.java b/jack/src/com/android/jack/dx/rop/annotation/NameValuePair.java
index ac88345..35d34b5 100644
--- a/jack/src/com/android/jack/dx/rop/annotation/NameValuePair.java
+++ b/jack/src/com/android/jack/dx/rop/annotation/NameValuePair.java
@@ -41,14 +41,8 @@
* @param value {@code non-null;} the value
*/
public NameValuePair(@Nonnull CstString name, @Nonnull Constant value) {
- if (name == null) {
- throw new NullPointerException("name == null");
- }
-
- if (value == null) {
- throw new NullPointerException("value == null");
- }
-
+ assert name != null;
+ assert value != null;
this.name = name;
this.value = value;
}
diff --git a/jack/src/com/android/jack/dx/rop/code/BasicBlock.java b/jack/src/com/android/jack/dx/rop/code/BasicBlock.java
index 6fa8306..40875e7 100644
--- a/jack/src/com/android/jack/dx/rop/code/BasicBlock.java
+++ b/jack/src/com/android/jack/dx/rop/code/BasicBlock.java
@@ -61,12 +61,8 @@
throw new IllegalArgumentException("label < 0");
}
- try {
- insns.throwIfMutable();
- } catch (NullPointerException ex) {
- // Elucidate exception.
- throw new NullPointerException("insns == null");
- }
+ assert insns != null;
+ insns.throwIfMutable();
int sz = insns.size();
@@ -87,12 +83,8 @@
"insns does not end with " + "a branch or throwing " + "instruction");
}
- try {
- successors.throwIfMutable();
- } catch (NullPointerException ex) {
- // Elucidate exception.
- throw new NullPointerException("successors == null");
- }
+ assert successors != null;
+ successors.throwIfMutable();
if (primarySuccessor < -1) {
throw new IllegalArgumentException("primarySuccessor < -1");
diff --git a/jack/src/com/android/jack/dx/rop/code/CstInsn.java b/jack/src/com/android/jack/dx/rop/code/CstInsn.java
index c639863..a3af7df 100644
--- a/jack/src/com/android/jack/dx/rop/code/CstInsn.java
+++ b/jack/src/com/android/jack/dx/rop/code/CstInsn.java
@@ -37,11 +37,7 @@
public CstInsn(Rop opcode, SourcePosition position, RegisterSpec result, RegisterSpecList sources,
Constant cst) {
super(opcode, position, result, sources);
-
- if (cst == null) {
- throw new NullPointerException("cst == null");
- }
-
+ assert cst != null;
this.cst = cst;
}
diff --git a/jack/src/com/android/jack/dx/rop/code/Insn.java b/jack/src/com/android/jack/dx/rop/code/Insn.java
index 6ed8b67..2830bbb 100644
--- a/jack/src/com/android/jack/dx/rop/code/Insn.java
+++ b/jack/src/com/android/jack/dx/rop/code/Insn.java
@@ -49,18 +49,9 @@
* @param sources {@code non-null;} specs for all the sources
*/
public Insn(Rop opcode, SourcePosition position, RegisterSpec result, RegisterSpecList sources) {
- if (opcode == null) {
- throw new NullPointerException("opcode == null");
- }
-
- if (position == null) {
- throw new NullPointerException("position == null");
- }
-
- if (sources == null) {
- throw new NullPointerException("sources == null");
- }
-
+ assert opcode != null;
+ assert position != null;
+ assert sources != null;
this.opcode = opcode;
this.position = position;
this.result = result;
diff --git a/jack/src/com/android/jack/dx/rop/code/LocalItem.java b/jack/src/com/android/jack/dx/rop/code/LocalItem.java
index 9ebf093..bd9b83b 100644
--- a/jack/src/com/android/jack/dx/rop/code/LocalItem.java
+++ b/jack/src/com/android/jack/dx/rop/code/LocalItem.java
@@ -16,8 +16,9 @@
package com.android.jack.dx.rop.code;
+import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
/**
* A local variable item: either a name or a signature or both.
@@ -27,7 +28,7 @@
private final CstString name;
/** {@code null-ok;} local variable type */
- private final CstType type;
+ private final Type type;
/** {@code null-ok;} local variable signature */
private final CstString signature;
@@ -44,7 +45,7 @@
* discussion under {@code dalvik.annotation.Signature} in "dex-format.html")
* @return {@code null-ok;} appropriate instance.
*/
- public static LocalItem make(CstString name, CstType type, CstString signature) {
+ public static LocalItem make(CstString name, Type type, CstString signature) {
if (name == null && type == null) {
return null;
}
@@ -59,7 +60,7 @@
* @param type {@code null-ok;} local variable type
* @param signature {@code null-ok;} local variable signature
*/
- private LocalItem(CstString name, CstType type, CstString signature) {
+ private LocalItem(CstString name, Type type, CstString signature) {
this.name = name;
this.type = type;
this.signature = signature;
@@ -97,13 +98,13 @@
}
/**
- * Compares two CstType like CstType.compareTo(), excepts treats a null
+ * Compares two {@link Type} like {@link Type#compareTo(Constant)}, excepts treats a null
* as the least-possible string value.
*
* @return negative integer, zero, or positive integer in accordance
* with Comparable.compareTo()
*/
- private static int compareHandlesNulls(CstType a, CstType b) {
+ private static int compareHandlesNulls(Type a, Type b) {
if (a == b) {
return 0;
} else if (a == null) {
@@ -183,7 +184,7 @@
*
* @return {@code null-ok;} type.
*/
- public CstType getType() {
+ public Type getType() {
return type;
}
}
diff --git a/jack/src/com/android/jack/dx/rop/code/LocalVariableExtractor.java b/jack/src/com/android/jack/dx/rop/code/LocalVariableExtractor.java
index 739150c..2ad2807 100644
--- a/jack/src/com/android/jack/dx/rop/code/LocalVariableExtractor.java
+++ b/jack/src/com/android/jack/dx/rop/code/LocalVariableExtractor.java
@@ -53,9 +53,7 @@
* @param method {@code non-null;} the method to extract from
*/
private LocalVariableExtractor(RopMethod method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
+ assert method != null;
BasicBlockList blocks = method.getBlocks();
int maxLabel = blocks.getMaxLabel();
diff --git a/jack/src/com/android/jack/dx/rop/code/LocalVariableInfo.java b/jack/src/com/android/jack/dx/rop/code/LocalVariableInfo.java
index bd00bc2..c26e785 100644
--- a/jack/src/com/android/jack/dx/rop/code/LocalVariableInfo.java
+++ b/jack/src/com/android/jack/dx/rop/code/LocalVariableInfo.java
@@ -52,9 +52,7 @@
* @param method {@code non-null;} the method being represented by this instance
*/
public LocalVariableInfo(RopMethod method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
+ assert method != null;
BasicBlockList blocks = method.getBlocks();
int maxLabel = blocks.getMaxLabel();
@@ -75,11 +73,9 @@
* @param specs {@code non-null;} the register set to associate with the block
*/
public void setStarts(int label, RegisterSpecSet specs) {
- throwIfImmutable();
+ assert specs != null;
- if (specs == null) {
- throw new NullPointerException("specs == null");
- }
+ throwIfImmutable();
try {
blockStarts[label] = specs;
@@ -184,16 +180,11 @@
* @param spec {@code non-null;} the associated register spec
*/
public void addAssignment(Insn insn, RegisterSpec spec) {
+ assert insn != null;
+ assert spec != null;
+
throwIfImmutable();
- if (insn == null) {
- throw new NullPointerException("insn == null");
- }
-
- if (spec == null) {
- throw new NullPointerException("spec == null");
- }
-
insnAssignments.put(insn, spec);
}
diff --git a/jack/src/com/android/jack/dx/rop/code/RegisterSpec.java b/jack/src/com/android/jack/dx/rop/code/RegisterSpec.java
index 4be552f..2ba4d58 100644
--- a/jack/src/com/android/jack/dx/rop/code/RegisterSpec.java
+++ b/jack/src/com/android/jack/dx/rop/code/RegisterSpec.java
@@ -101,10 +101,7 @@
* @return {@code non-null;} an appropriately-constructed instance
*/
public static RegisterSpec make(int reg, TypeBearer type, LocalItem local) {
- if (local == null) {
- throw new NullPointerException("local == null");
- }
-
+ assert local != null;
return intern(reg, type, local);
}
@@ -148,11 +145,7 @@
if (reg < 0) {
throw new IllegalArgumentException("reg < 0");
}
-
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
+ assert type != null;
this.reg = reg;
this.type = type;
this.local = local;
diff --git a/jack/src/com/android/jack/dx/rop/code/RegisterSpecSet.java b/jack/src/com/android/jack/dx/rop/code/RegisterSpecSet.java
index 7538027..c282204 100644
--- a/jack/src/com/android/jack/dx/rop/code/RegisterSpecSet.java
+++ b/jack/src/com/android/jack/dx/rop/code/RegisterSpecSet.java
@@ -259,11 +259,9 @@
* @param spec {@code non-null;} the register spec to put in the instance
*/
public void put(RegisterSpec spec) {
- throwIfImmutable();
+ assert spec != null;
- if (spec == null) {
- throw new NullPointerException("spec == null");
- }
+ throwIfImmutable();
size = -1;
diff --git a/jack/src/com/android/jack/dx/rop/code/Rop.java b/jack/src/com/android/jack/dx/rop/code/Rop.java
index 3ae002b..71853b1 100644
--- a/jack/src/com/android/jack/dx/rop/code/Rop.java
+++ b/jack/src/com/android/jack/dx/rop/code/Rop.java
@@ -98,17 +98,9 @@
int branchingness,
boolean isCallLike,
String nickname) {
- if (result == null) {
- throw new NullPointerException("result == null");
- }
-
- if (sources == null) {
- throw new NullPointerException("sources == null");
- }
-
- if (exceptions == null) {
- throw new NullPointerException("exceptions == null");
- }
+ assert result != null;
+ assert sources != null;
+ assert exceptions != null;
if ((branchingness < BRANCH_MIN) || (branchingness > BRANCH_MAX)) {
throw new IllegalArgumentException("bogus branchingness");
diff --git a/jack/src/com/android/jack/dx/rop/code/RopMethod.java b/jack/src/com/android/jack/dx/rop/code/RopMethod.java
index 3133652..6310458 100644
--- a/jack/src/com/android/jack/dx/rop/code/RopMethod.java
+++ b/jack/src/com/android/jack/dx/rop/code/RopMethod.java
@@ -23,6 +23,12 @@
* All of the parts that make up a method at the rop layer.
*/
public final class RopMethod {
+
+ /**
+ * Tells if parameters are compliant with the Dex calling convention.
+ */
+ private final boolean withDexCallingConvention;
+
/** {@code non-null;} basic block list of the method */
private final BasicBlockList blocks;
@@ -46,11 +52,11 @@
*
* @param blocks {@code non-null;} basic block list of the method
* @param firstLabel {@code >= 0;} the label of the first block to execute
+ * @param withDexCallingConvention tells if parameters are compliant with the Dex calling
+ * convention
*/
- public RopMethod(BasicBlockList blocks, int firstLabel) {
- if (blocks == null) {
- throw new NullPointerException("blocks == null");
- }
+ public RopMethod(BasicBlockList blocks, int firstLabel, boolean withDexCallingConvention) {
+ assert blocks != null;
if (firstLabel < 0) {
throw new IllegalArgumentException("firstLabel < 0");
@@ -61,6 +67,8 @@
this.predecessors = null;
this.exitPredecessors = null;
+
+ this.withDexCallingConvention = withDexCallingConvention;
}
/**
@@ -116,32 +124,6 @@
return exitPredecessors;
}
-
- /**
- * Returns an instance that is identical to this one, except that
- * the registers in each instruction are offset by the given
- * amount.
- *
- * @param delta the amount to offset register numbers by
- * @return {@code non-null;} an appropriately-constructed instance
- */
- public RopMethod withRegisterOffset(int delta) {
- RopMethod result = new RopMethod(blocks.withRegisterOffset(delta), firstLabel);
-
- if (exitPredecessors != null) {
- /*
- * The predecessors have been calculated. It's safe to
- * inject these into the new instance, since the
- * transformation being applied doesn't affect the
- * predecessors.
- */
- result.exitPredecessors = exitPredecessors;
- result.predecessors = predecessors;
- }
-
- return result;
- }
-
/**
* Calculates the predecessor sets for each block as well as for the
* exit.
@@ -202,4 +184,8 @@
this.predecessors = predecessors;
this.exitPredecessors = exitPredecessors;
}
+
+ public boolean withDexCallingConvention() {
+ return withDexCallingConvention;
+ }
}
diff --git a/jack/src/com/android/jack/dx/rop/code/Rops.java b/jack/src/com/android/jack/dx/rop/code/Rops.java
index 4a6f022..a13abaf 100644
--- a/jack/src/com/android/jack/dx/rop/code/Rops.java
+++ b/jack/src/com/android/jack/dx/rop/code/Rops.java
@@ -19,7 +19,6 @@
import com.android.jack.dx.rop.cst.Constant;
import com.android.jack.dx.rop.cst.CstBaseMethodRef;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Prototype;
import com.android.jack.dx.rop.type.StdTypeList;
import com.android.jack.dx.rop.type.Type;
@@ -1068,29 +1067,25 @@
case RegOps.INVOKE_VIRTUAL: {
CstBaseMethodRef cstMeth = (CstMethodRef) cst;
Prototype meth = cstMeth.getPrototype();
- CstType definer = cstMeth.getDefiningClass();
- meth = meth.withFirstParameter(definer.getClassType());
+ meth = meth.withFirstParameter(cstMeth.getDefiningClass());
return opInvokeVirtual(meth);
}
case RegOps.INVOKE_SUPER: {
CstBaseMethodRef cstMeth = (CstMethodRef) cst;
Prototype meth = cstMeth.getPrototype();
- CstType definer = cstMeth.getDefiningClass();
- meth = meth.withFirstParameter(definer.getClassType());
+ meth = meth.withFirstParameter(cstMeth.getDefiningClass());
return opInvokeSuper(meth);
}
case RegOps.INVOKE_DIRECT: {
CstBaseMethodRef cstMeth = (CstMethodRef) cst;
Prototype meth = cstMeth.getPrototype();
- CstType definer = cstMeth.getDefiningClass();
- meth = meth.withFirstParameter(definer.getClassType());
+ meth = meth.withFirstParameter(cstMeth.getDefiningClass());
return opInvokeDirect(meth);
}
case RegOps.INVOKE_INTERFACE: {
CstBaseMethodRef cstMeth = (CstMethodRef) cst;
Prototype meth = cstMeth.getPrototype();
- CstType definer = cstMeth.getDefiningClass();
- meth = meth.withFirstParameter(definer.getClassType());
+ meth = meth.withFirstParameter(cstMeth.getDefiningClass());
return opInvokeInterface(meth);
}
}
diff --git a/jack/src/com/android/jack/dx/rop/code/SwitchInsn.java b/jack/src/com/android/jack/dx/rop/code/SwitchInsn.java
index 81e286b..86694bb 100644
--- a/jack/src/com/android/jack/dx/rop/code/SwitchInsn.java
+++ b/jack/src/com/android/jack/dx/rop/code/SwitchInsn.java
@@ -45,10 +45,7 @@
throw new IllegalArgumentException("bogus branchingness");
}
- if (cases == null) {
- throw new NullPointerException("cases == null");
- }
-
+ assert cases != null;
this.cases = cases;
}
diff --git a/jack/src/com/android/jack/dx/rop/code/ThrowingCstInsn.java b/jack/src/com/android/jack/dx/rop/code/ThrowingCstInsn.java
index b8c93e8..28a36a5 100644
--- a/jack/src/com/android/jack/dx/rop/code/ThrowingCstInsn.java
+++ b/jack/src/com/android/jack/dx/rop/code/ThrowingCstInsn.java
@@ -46,10 +46,7 @@
throw new IllegalArgumentException("bogus branchingness");
}
- if (catches == null) {
- throw new NullPointerException("catches == null");
- }
-
+ assert catches != null;
this.catches = catches;
}
diff --git a/jack/src/com/android/jack/dx/rop/code/ThrowingInsn.java b/jack/src/com/android/jack/dx/rop/code/ThrowingInsn.java
index 21956cf..1e013f9 100644
--- a/jack/src/com/android/jack/dx/rop/code/ThrowingInsn.java
+++ b/jack/src/com/android/jack/dx/rop/code/ThrowingInsn.java
@@ -66,10 +66,7 @@
throw new IllegalArgumentException("bogus branchingness");
}
- if (catches == null) {
- throw new NullPointerException("catches == null");
- }
-
+ assert catches != null;
this.catches = catches;
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstAnnotation.java b/jack/src/com/android/jack/dx/rop/cst/CstAnnotation.java
index e89424d..7f94251 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstAnnotation.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstAnnotation.java
@@ -34,9 +34,7 @@
* @param annotation {@code non-null;} the annotation to hold
*/
public CstAnnotation(Annotation annotation) {
- if (annotation == null) {
- throw new NullPointerException("annotation == null");
- }
+ assert annotation != null;
annotation.throwIfMutable();
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstArray.java b/jack/src/com/android/jack/dx/rop/cst/CstArray.java
index 940e084..fb7fd5a 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstArray.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstArray.java
@@ -34,9 +34,7 @@
* @param list {@code non-null;} the actual list of contents
*/
public CstArray(List list) {
- if (list == null) {
- throw new NullPointerException("list == null");
- }
+ assert list != null;
list.throwIfMutable();
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstBaseMethodRef.java b/jack/src/com/android/jack/dx/rop/cst/CstBaseMethodRef.java
index 1ba7d88..e5e4e9e 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstBaseMethodRef.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstBaseMethodRef.java
@@ -19,6 +19,9 @@
import com.android.jack.dx.rop.type.Prototype;
import com.android.jack.dx.rop.type.Type;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
/**
* Base class for constants of "methodish" type.
*
@@ -27,25 +30,27 @@
*/
public abstract class CstBaseMethodRef extends CstMemberRef {
/** {@code non-null;} the raw prototype for this method */
+ @Nonnull
private final Prototype prototype;
/**
* {@code null-ok;} the prototype for this method taken to be an instance
* method, or {@code null} if not yet calculated
*/
+ @CheckForNull
private Prototype instancePrototype;
/**
* Constructs an instance.
*
* @param definingClass {@code non-null;} the type of the defining class
- * @param nat {@code non-null;} the name-and-type
+ * @param name {@code non-null;} the member reference name
+ * @param prototype {@code non-null;} the member reference prototype
*/
- /*package*/CstBaseMethodRef(CstType definingClass, CstNat nat) {
- super(definingClass, nat);
-
- String descriptor = getNat().getDescriptor().getString();
- this.prototype = Prototype.intern(descriptor);
+ /* package */ CstBaseMethodRef(@Nonnull Type definingClass, @Nonnull CstString name,
+ @Nonnull Prototype prototype) {
+ super(definingClass, name);
+ this.prototype = prototype;
this.instancePrototype = null;
}
@@ -55,6 +60,7 @@
*
* @return {@code non-null;} the method prototype
*/
+ @Nonnull
public final Prototype getPrototype() {
return prototype;
}
@@ -70,12 +76,13 @@
* @param isStatic whether the method should be considered static
* @return {@code non-null;} the method prototype
*/
+ @Nonnull
public final Prototype getPrototype(boolean isStatic) {
if (isStatic) {
return prototype;
} else {
if (instancePrototype == null) {
- Type thisType = getDefiningClass().getClassType();
+ Type thisType = getDefiningClass();
instancePrototype = prototype.withFirstParameter(thisType);
}
return instancePrototype;
@@ -103,6 +110,7 @@
* @return {@code non-null;} the method's return type
*/
@Override
+ @Nonnull
public final Type getType() {
return prototype.getReturnType();
}
@@ -124,27 +132,29 @@
return getPrototype(isStatic).getParameterTypes().getWordCount();
}
- /**
- * Gets whether this is a reference to an instance initialization
- * method. This is just a convenient shorthand for
- * {@code getNat().isInstanceInit()}.
- *
- * @return {@code true} iff this is a reference to an
- * instance initialization method
- */
- public final boolean isInstanceInit() {
- return getNat().isInstanceInit();
+ /** {@inheritDoc} */
+ @Override
+ public final boolean equals(Object other) {
+ if ((other == null) || (getClass() != other.getClass())) {
+ return false;
+ }
+
+ CstBaseMethodRef otherRef = (CstBaseMethodRef) other;
+ return getDefiningClass().equals(otherRef.getDefiningClass())
+ && getName().equals(otherRef.getName()) && prototype.equals(otherRef.prototype);
}
- /**
- * Gets whether this is a reference to a class initialization
- * method. This is just a convenient shorthand for
- * {@code getNat().isClassInit()}.
- *
- * @return {@code true} iff this is a reference to an
- * instance initialization method
- */
- public final boolean isClassInit() {
- return getNat().isClassInit();
+ /** {@inheritDoc} */
+ @Override
+ public final int hashCode() {
+ return ((getDefiningClass().hashCode() * 31) + getName().hashCode() * 31)
+ + getType().hashCode();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ @Nonnull
+ public final String toHuman() {
+ return getDefiningClass().toHuman() + '.' + getName().toHuman() + ':' + prototype.toString();
}
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstEnumRef.java b/jack/src/com/android/jack/dx/rop/cst/CstEnumRef.java
index 9e206a4..c389e7d 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstEnumRef.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstEnumRef.java
@@ -32,17 +32,18 @@
/**
* Constructs an instance.
*
- * @param nat {@code non-null;} the name-and-type; the defining class is derived
- * from this
+ * @param name {@code non-null;} the member reference name
+ * @param type {@code non-null;} the member reference type
*/
- public CstEnumRef(CstNat nat) {
- super(new CstType(nat.getFieldType()), nat);
+ public CstEnumRef(@Nonnull CstString name, @Nonnull Type type) {
+ super(type, name);
fieldRef = null;
}
/** {@inheritDoc} */
@Override
+ @Nonnull
public String typeName() {
return "enum";
}
@@ -53,8 +54,9 @@
* <b>Note:</b> This returns the enumerated type.
*/
@Override
+ @Nonnull
public Type getType() {
- return getDefiningClass().getClassType();
+ return getDefiningClass();
}
/**
@@ -62,9 +64,10 @@
*
* @return {@code non-null;} the corresponding field reference
*/
+ @Nonnull
public CstFieldRef getFieldRef() {
if (fieldRef == null) {
- fieldRef = new CstFieldRef(getDefiningClass(), getNat());
+ fieldRef = new CstFieldRef(getDefiningClass(), getName(), getDefiningClass());
}
return fieldRef;
@@ -75,4 +78,30 @@
public ValueType getEncodedValueType() {
return ValueType.VALUE_ENUM;
}
+
+ /** {@inheritDoc} */
+ @Override
+ public final boolean equals(Object other) {
+ if ((other == null) || (getClass() != other.getClass())) {
+ return false;
+ }
+
+ CstEnumRef otherRef = (CstEnumRef) other;
+ return getDefiningClass().equals(otherRef.getDefiningClass())
+ && getName().equals(otherRef.getName()) && getType().equals(otherRef.getType());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public final int hashCode() {
+ return ((getDefiningClass().hashCode() * 31) + getName().hashCode() * 31)
+ + getType().hashCode();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ @Nonnull
+ public final String toHuman() {
+ return getDefiningClass().toHuman() + '.' + getName().toHuman() + ':' + getType().toHuman();
+ }
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstFieldRef.java b/jack/src/com/android/jack/dx/rop/cst/CstFieldRef.java
index 50b2181..49f4d2f 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstFieldRef.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstFieldRef.java
@@ -25,32 +25,28 @@
* Constants of type {@code CONSTANT_Fieldref_info}.
*/
public final class CstFieldRef extends CstMemberRef {
- /**
- * Returns an instance of this class that represents the static
- * field which should hold the class corresponding to a given
- * primitive type. For example, if given {@link Type#INT}, this
- * method returns an instance corresponding to the field
- * {@code java.lang.Integer.TYPE}.
- *
- * @param primitiveType {@code non-null;} the primitive type
- * @return {@code non-null;} the corresponding static field
- */
- public static CstFieldRef forPrimitiveType(Type primitiveType) {
- return new CstFieldRef(CstType.forBoxedPrimitiveType(primitiveType), CstNat.PRIMITIVE_TYPE_NAT);
- }
+
+ /** {@code non-null;} the field type */
+ @Nonnull
+ private final Type type;
/**
* Constructs an instance.
*
* @param definingClass {@code non-null;} the type of the defining class
- * @param nat {@code non-null;} the name-and-type
+ * @param name {@code non-null;} the member reference name
+ * @param type {@code non-null;} the member reference type
*/
- public CstFieldRef(CstType definingClass, CstNat nat) {
- super(definingClass, nat);
+ public CstFieldRef(@Nonnull Type definingClass, @Nonnull CstString name,
+ @Nonnull Type type) {
+ super(definingClass, name);
+ this.type = type;
+
}
/** {@inheritDoc} */
@Override
+ @Nonnull
public String typeName() {
return "field";
}
@@ -61,8 +57,9 @@
* @return {@code non-null;} the field's type
*/
@Override
+ @Nonnull
public Type getType() {
- return getNat().getFieldType();
+ return type;
}
/** {@inheritDoc} */
@@ -75,9 +72,7 @@
}
CstFieldRef otherField = (CstFieldRef) other;
- CstString thisDescriptor = getNat().getDescriptor();
- CstString otherDescriptor = otherField.getNat().getDescriptor();
- return thisDescriptor.compareTo(otherDescriptor);
+ return type.compareTo(otherField.type);
}
@Override
@@ -85,4 +80,30 @@
public ValueType getEncodedValueType() {
return ValueType.VALUE_FIELD;
}
+
+ /** {@inheritDoc} */
+ @Override
+ public final boolean equals(Object other) {
+ if ((other == null) || (getClass() != other.getClass())) {
+ return false;
+ }
+
+ CstFieldRef otherRef = (CstFieldRef) other;
+ return getDefiningClass().equals(otherRef.getDefiningClass())
+ && getName().equals(otherRef.getName()) && type.equals(otherRef.type);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public final int hashCode() {
+ return ((getDefiningClass().hashCode() * 31) + getName().hashCode() * 31)
+ + getType().hashCode();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ @Nonnull
+ public final String toHuman() {
+ return getDefiningClass().toHuman() + '.' + getName().toHuman() + ':' + type.toHuman();
+ }
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java b/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java
index 1f0744e..4bc7f33 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstIndexMap.java
@@ -18,6 +18,7 @@
import com.android.jack.dx.dex.file.DexFile;
import com.android.jack.dx.dex.file.IndexedItem;
import com.android.jack.dx.io.DexBuffer;
+import com.android.jack.dx.rop.type.Type;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
@@ -31,9 +32,9 @@
@Nonnull
private final CstString[] strings;
- /** Mapping between index and {@link CstType} value of a dex file.*/
+ /** Mapping between index and {@link Type} value of a dex file.*/
@Nonnull
- private final CstType[] types;
+ private final Type[] types;
/** Mapping between index and {@link CstMethodRef} value of a dex file.*/
@Nonnull
@@ -56,7 +57,7 @@
public CstIndexMap(@Nonnull DexBuffer dexBuffer) {
strings = new CstString[dexBuffer.strings().size()];
- types = new CstType[dexBuffer.typeNames().size()];
+ types = new Type[dexBuffer.typeNames().size()];
methods = new CstMethodRef[dexBuffer.methodIds().size()];
fields = new CstFieldRef[dexBuffer.fieldIds().size()];
prototypes = new CstPrototypeRef[dexBuffer.protoIds().size()];
@@ -79,13 +80,13 @@
/**
* Keeps type mapping of a dex file.
* @param index Type index.
- * @param cstType The type.
+ * @param type The type.
*/
- public void addTypeMapping(@Nonnegative int index, @Nonnull CstType cstType) {
- assert types[index] == null || types[index].compareTo(cstType) == 0;
+ public void addTypeMapping(@Nonnegative int index, @Nonnull Type type) {
+ assert types[index] == null || types[index].compareTo(type) == 0;
if (types[index] == null) {
- types[index] = cstType;
+ types[index] = type;
}
}
@@ -249,8 +250,8 @@
}
@Nonnull
- public CstType getCstType(@Nonnegative int index) {
- CstType cstType = types[index];
+ public Type getType(@Nonnegative int index) {
+ Type cstType = types[index];
assert cstType != null;
return cstType;
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstInterfaceMethodRef.java b/jack/src/com/android/jack/dx/rop/cst/CstInterfaceMethodRef.java
deleted file mode 100644
index c7c419a..0000000
--- a/jack/src/com/android/jack/dx/rop/cst/CstInterfaceMethodRef.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.dx.rop.cst;
-
-import com.android.jack.dx.dex.file.ValueEncoder.ValueType;
-
-import javax.annotation.Nonnull;
-
-/**
- * Constants of type {@code CONSTANT_InterfaceMethodref_info}.
- */
-public final class CstInterfaceMethodRef extends CstBaseMethodRef {
- /**
- * {@code null-ok;} normal {@link CstMethodRef} that corresponds to this
- * instance, if calculated
- */
- private CstMethodRef methodRef;
-
- /**
- * Constructs an instance.
- *
- * @param definingClass {@code non-null;} the type of the defining class
- * @param nat {@code non-null;} the name-and-type
- */
- public CstInterfaceMethodRef(CstType definingClass, CstNat nat) {
- super(definingClass, nat);
- methodRef = null;
- }
-
- /** {@inheritDoc} */
- @Override
- public String typeName() {
- return "ifaceMethod";
- }
-
- /**
- * Gets a normal (non-interface) {@link CstMethodRef} that corresponds to
- * this instance.
- *
- * @return {@code non-null;} an appropriate instance
- */
- public CstMethodRef toMethodRef() {
- if (methodRef == null) {
- methodRef = new CstMethodRef(getDefiningClass(), getNat());
- }
-
- return methodRef;
- }
-
- @Override
- @Nonnull
- public ValueType getEncodedValueType() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstMemberRef.java b/jack/src/com/android/jack/dx/rop/cst/CstMemberRef.java
index 2b36a7d..10cdace 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstMemberRef.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstMemberRef.java
@@ -16,50 +16,33 @@
package com.android.jack.dx.rop.cst;
+import com.android.jack.dx.rop.type.Type;
+
+import javax.annotation.Nonnull;
+
/**
* Constants of type {@code CONSTANT_*ref_info}.
*/
public abstract class CstMemberRef extends TypedConstant {
/** {@code non-null;} the type of the defining class */
- private final CstType definingClass;
- /** {@code non-null;} the name-and-type */
- private final CstNat nat;
+ private final Type definingClass;
+
+ /** {@code non-null;} the name */
+ @Nonnull
+ private final CstString name;
/**
* Constructs an instance.
*
* @param definingClass {@code non-null;} the type of the defining class
- * @param nat {@code non-null;} the name-and-type
+ * @param name {@code non-null;} the member reference name
*/
- /*package*/CstMemberRef(CstType definingClass, CstNat nat) {
- if (definingClass == null) {
- throw new NullPointerException("definingClass == null");
- }
-
- if (nat == null) {
- throw new NullPointerException("nat == null");
- }
-
+ /* package */ CstMemberRef(@Nonnull Type definingClass, @Nonnull CstString name) {
+ assert definingClass != null;
+ assert name != null;
this.definingClass = definingClass;
- this.nat = nat;
- }
-
- /** {@inheritDoc} */
- @Override
- public final boolean equals(Object other) {
- if ((other == null) || (getClass() != other.getClass())) {
- return false;
- }
-
- CstMemberRef otherRef = (CstMemberRef) other;
- return definingClass.equals(otherRef.definingClass) && nat.equals(otherRef.nat);
- }
-
- /** {@inheritDoc} */
- @Override
- public final int hashCode() {
- return (definingClass.hashCode() * 31) ^ nat.hashCode();
+ this.name = name;
}
/**
@@ -78,14 +61,12 @@
return cmp;
}
- CstString thisName = nat.getName();
- CstString otherName = otherMember.nat.getName();
-
- return thisName.compareTo(otherName);
+ return name.compareTo(otherMember.name);
}
/** {@inheritDoc} */
@Override
+ @Nonnull
public final String toString() {
return typeName() + '{' + toHuman() + '}';
}
@@ -96,27 +77,18 @@
return false;
}
- /** {@inheritDoc} */
- @Override
- public final String toHuman() {
- return definingClass.toHuman() + '.' + nat.toHuman();
- }
-
/**
* Gets the type of the defining class.
*
* @return {@code non-null;} the type of defining class
*/
- public final CstType getDefiningClass() {
+ @Nonnull
+ public final Type getDefiningClass() {
return definingClass;
}
- /**
- * Gets the defining name-and-type.
- *
- * @return {@code non-null;} the name-and-type
- */
- public final CstNat getNat() {
- return nat;
+ @Nonnull
+ public CstString getName() {
+ return name;
}
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstMethodRef.java b/jack/src/com/android/jack/dx/rop/cst/CstMethodRef.java
index f725d9d..fee0d77 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstMethodRef.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstMethodRef.java
@@ -17,6 +17,8 @@
package com.android.jack.dx.rop.cst;
import com.android.jack.dx.dex.file.ValueEncoder.ValueType;
+import com.android.jack.dx.rop.type.Prototype;
+import com.android.jack.dx.rop.type.Type;
import javax.annotation.Nonnull;
@@ -24,18 +26,22 @@
* Constants of type {@code CONSTANT_Methodref_info}.
*/
public final class CstMethodRef extends CstBaseMethodRef {
+
/**
* Constructs an instance.
*
* @param definingClass {@code non-null;} the type of the defining class
- * @param nat {@code non-null;} the name-and-type
+ * @param name {@code non-null;} the member reference name
+ * @param prototype {@code non-null;} the member reference prototype
*/
- public CstMethodRef(CstType definingClass, CstNat nat) {
- super(definingClass, nat);
+ public CstMethodRef(@Nonnull Type definingClass, @Nonnull CstString name,
+ @Nonnull Prototype prototype) {
+ super(definingClass, name, prototype);
}
/** {@inheritDoc} */
@Override
+ @Nonnull
public String typeName() {
return "method";
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstNat.java b/jack/src/com/android/jack/dx/rop/cst/CstNat.java
deleted file mode 100644
index cdb923c..0000000
--- a/jack/src/com/android/jack/dx/rop/cst/CstNat.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.dx.rop.cst;
-
-import com.android.jack.dx.dex.file.ValueEncoder.ValueType;
-import com.android.jack.dx.rop.type.Type;
-
-import javax.annotation.Nonnull;
-
-/**
- * Constants of type {@code CONSTANT_NameAndType_info}.
- */
-public final class CstNat extends Constant {
- /**
- * {@code non-null;} the instance for name {@code TYPE} and descriptor
- * {@code java.lang.Class}, which is useful when dealing with
- * wrapped primitives
- */
- public static final CstNat PRIMITIVE_TYPE_NAT =
- new CstNat(new CstString("TYPE"), new CstString("Ljava/lang/Class;"));
-
- /** {@code non-null;} the name */
- private final CstString name;
-
- /** {@code non-null;} the descriptor (type) */
- private final CstString descriptor;
-
- /**
- * Constructs an instance.
- *
- * @param name {@code non-null;} the name
- * @param descriptor {@code non-null;} the descriptor
- */
- public CstNat(CstString name, CstString descriptor) {
- if (name == null) {
- throw new NullPointerException("name == null");
- }
-
- if (descriptor == null) {
- throw new NullPointerException("descriptor == null");
- }
-
- this.name = name;
- this.descriptor = descriptor;
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof CstNat)) {
- return false;
- }
-
- CstNat otherNat = (CstNat) other;
- return name.equals(otherNat.name) && descriptor.equals(otherNat.descriptor);
- }
-
- /** {@inheritDoc} */
- @Override
- public int hashCode() {
- return (name.hashCode() * 31) ^ descriptor.hashCode();
- }
-
- /** {@inheritDoc} */
- @Override
- protected int compareTo0(Constant other) {
- CstNat otherNat = (CstNat) other;
- int cmp = name.compareTo(otherNat.name);
-
- if (cmp != 0) {
- return cmp;
- }
-
- return descriptor.compareTo(otherNat.descriptor);
- }
-
- /** {@inheritDoc} */
- @Override
- public String toString() {
- return "nat{" + toHuman() + '}';
- }
-
- /** {@inheritDoc} */
- @Override
- public String typeName() {
- return "nat";
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean isCategory2() {
- return false;
- }
-
- /**
- * Gets the name.
- *
- * @return {@code non-null;} the name
- */
- public CstString getName() {
- return name;
- }
-
- /**
- * Gets the descriptor.
- *
- * @return {@code non-null;} the descriptor
- */
- public CstString getDescriptor() {
- return descriptor;
- }
-
- /**
- * Returns an unadorned but human-readable version of the name-and-type
- * value.
- *
- * @return {@code non-null;} the human form
- */
- @Override
- public String toHuman() {
- return name.toHuman() + ':' + descriptor.toHuman();
- }
-
- /**
- * Gets the field type corresponding to this instance's descriptor.
- * This method is only valid to call if the descriptor in fact describes
- * a field (and not a method).
- *
- * @return {@code non-null;} the field type
- */
- public Type getFieldType() {
- return Type.intern(descriptor.getString());
- }
-
- /**
- * Gets whether this instance has the name of a standard instance
- * initialization method. This is just a convenient shorthand for
- * {@code getName().getString().equals("<init>")}.
- *
- * @return {@code true} iff this is a reference to an
- * instance initialization method
- */
- public final boolean isInstanceInit() {
- return name.getString().equals("<init>");
- }
-
- /**
- * Gets whether this instance has the name of a standard class
- * initialization method. This is just a convenient shorthand for
- * {@code getName().getString().equals("<clinit>")}.
- *
- * @return {@code true} iff this is a reference to an
- * instance initialization method
- */
- public final boolean isClassInit() {
- return name.getString().equals("<clinit>");
- }
-
- @Override
- @Nonnull
- public ValueType getEncodedValueType() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstString.java b/jack/src/com/android/jack/dx/rop/cst/CstString.java
index f99f290..a97addd 100644
--- a/jack/src/com/android/jack/dx/rop/cst/CstString.java
+++ b/jack/src/com/android/jack/dx/rop/cst/CstString.java
@@ -197,10 +197,7 @@
* @param string {@code non-null;} the UTF-8 value as a string
*/
public CstString(String string) {
- if (string == null) {
- throw new NullPointerException("string == null");
- }
-
+ assert string != null;
this.string = string.intern();
}
diff --git a/jack/src/com/android/jack/dx/rop/cst/CstType.java b/jack/src/com/android/jack/dx/rop/cst/CstType.java
deleted file mode 100644
index 53aeb6a..0000000
--- a/jack/src/com/android/jack/dx/rop/cst/CstType.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.dx.rop.cst;
-
-import com.android.jack.dx.dex.file.ValueEncoder.ValueType;
-import com.android.jack.dx.rop.type.Type;
-
-import java.util.HashMap;
-
-import javax.annotation.Nonnull;
-
-/**
- * Constants that represent an arbitrary type (reference or primitive).
- */
-public final class CstType extends TypedConstant {
- /** {@code non-null;} map of interned types */
- private static final HashMap<Type, CstType> interns = new HashMap<Type, CstType>(100);
-
- /** {@code non-null;} instance corresponding to the class {@code Object} */
- public static final CstType OBJECT = intern(Type.OBJECT);
-
- /** {@code non-null;} instance corresponding to the class {@code Boolean} */
- public static final CstType BOOLEAN = intern(Type.BOOLEAN_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Byte} */
- public static final CstType BYTE = intern(Type.BYTE_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Character} */
- public static final CstType CHARACTER = intern(Type.CHARACTER_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Double} */
- public static final CstType DOUBLE = intern(Type.DOUBLE_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Float} */
- public static final CstType FLOAT = intern(Type.FLOAT_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Long} */
- public static final CstType LONG = intern(Type.LONG_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Integer} */
- public static final CstType INTEGER = intern(Type.INTEGER_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Short} */
- public static final CstType SHORT = intern(Type.SHORT_CLASS);
-
- /** {@code non-null;} instance corresponding to the class {@code Void} */
- public static final CstType VOID = intern(Type.VOID_CLASS);
-
- /** {@code non-null;} instance corresponding to the type {@code boolean[]} */
- public static final CstType BOOLEAN_ARRAY = intern(Type.BOOLEAN_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code byte[]} */
- public static final CstType BYTE_ARRAY = intern(Type.BYTE_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code char[]} */
- public static final CstType CHAR_ARRAY = intern(Type.CHAR_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code double[]} */
- public static final CstType DOUBLE_ARRAY = intern(Type.DOUBLE_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code float[]} */
- public static final CstType FLOAT_ARRAY = intern(Type.FLOAT_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code long[]} */
- public static final CstType LONG_ARRAY = intern(Type.LONG_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code int[]} */
- public static final CstType INT_ARRAY = intern(Type.INT_ARRAY);
-
- /** {@code non-null;} instance corresponding to the type {@code short[]} */
- public static final CstType SHORT_ARRAY = intern(Type.SHORT_ARRAY);
-
- /** {@code non-null;} the underlying type */
- private final Type type;
-
- /**
- * {@code null-ok;} the type descriptor corresponding to this instance, if
- * calculated
- */
- private CstString descriptor;
-
- /**
- * Returns an instance of this class that represents the wrapper
- * class corresponding to a given primitive type. For example, if
- * given {@link Type#INT}, this method returns the class reference
- * {@code java.lang.Integer}.
- *
- * @param primitiveType {@code non-null;} the primitive type
- * @return {@code non-null;} the corresponding wrapper class
- */
- public static CstType forBoxedPrimitiveType(Type primitiveType) {
- switch (primitiveType.getBasicType()) {
- case Type.BT_BOOLEAN:
- return BOOLEAN;
- case Type.BT_BYTE:
- return BYTE;
- case Type.BT_CHAR:
- return CHARACTER;
- case Type.BT_DOUBLE:
- return DOUBLE;
- case Type.BT_FLOAT:
- return FLOAT;
- case Type.BT_INT:
- return INTEGER;
- case Type.BT_LONG:
- return LONG;
- case Type.BT_SHORT:
- return SHORT;
- case Type.BT_VOID:
- return VOID;
- }
-
- throw new IllegalArgumentException("not primitive: " + primitiveType);
- }
-
- /**
- * Returns an interned instance of this class for the given type.
- *
- * @param type {@code non-null;} the underlying type
- * @return {@code non-null;} an appropriately-constructed instance
- */
- public static CstType intern(Type type) {
- synchronized (interns) {
- CstType cst = interns.get(type);
-
- if (cst == null) {
- cst = new CstType(type);
- interns.put(type, cst);
- }
-
- return cst;
- }
- }
-
- /**
- * Constructs an instance.
- *
- * @param type {@code non-null;} the underlying type
- */
- public CstType(Type type) {
- if (type == null) {
- throw new NullPointerException("type == null");
- }
-
- if (type == Type.KNOWN_NULL) {
- throw new UnsupportedOperationException("KNOWN_NULL is not representable");
- }
-
- this.type = type;
- this.descriptor = null;
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof CstType)) {
- return false;
- }
-
- return type == ((CstType) other).type;
- }
-
- /** {@inheritDoc} */
- @Override
- public int hashCode() {
- return type.hashCode();
- }
-
- /** {@inheritDoc} */
- @Override
- protected int compareTo0(Constant other) {
- String thisDescriptor = type.getDescriptor();
- String otherDescriptor = ((CstType) other).type.getDescriptor();
- return thisDescriptor.compareTo(otherDescriptor);
- }
-
- /** {@inheritDoc} */
- @Override
- public String toString() {
- return "type{" + toHuman() + '}';
- }
-
- /** {@inheritDoc} */
- @Override
- public Type getType() {
- return Type.CLASS;
- }
-
- /** {@inheritDoc} */
- @Override
- public String typeName() {
- return "type";
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean isCategory2() {
- return false;
- }
-
- /** {@inheritDoc} */
- @Override
- public String toHuman() {
- return type.toHuman();
- }
-
- /**
- * Gets the underlying type (as opposed to the type corresponding
- * to this instance as a constant, which is always
- * {@code Class}).
- *
- * @return {@code non-null;} the type corresponding to the name
- */
- public Type getClassType() {
- return type;
- }
-
- /**
- * Gets the type descriptor for this instance.
- *
- * @return {@code non-null;} the descriptor
- */
- public CstString getDescriptor() {
- if (descriptor == null) {
- descriptor = new CstString(type.getDescriptor());
- }
-
- return descriptor;
- }
-
- /**
- * Returns a human readable package name for this type, like "java.util".
- * If this is an array type, this returns the package name of the array's
- * component type. If this is a primitive type, this returns "default".
- */
- public String getPackageName() {
- // descriptor is a string like "[[Ljava/util/String;"
- String descriptor = getDescriptor().getString();
- int lastSlash = descriptor.lastIndexOf('/');
- int lastLeftSquare = descriptor.lastIndexOf('['); // -1 unless this is an array
- if (lastSlash == -1) {
- return "default";
- } else {
- // +2 to skip the '[' and the 'L' prefix
- return descriptor.substring(lastLeftSquare + 2, lastSlash).replace('/', '.');
- }
- }
-
- @Override
- @Nonnull
- public ValueType getEncodedValueType() {
- return ValueType.VALUE_TYPE;
- }
-}
diff --git a/jack/src/com/android/jack/dx/rop/cst/TypedConstant.java b/jack/src/com/android/jack/dx/rop/cst/TypedConstant.java
index 2e44b28..7422656 100644
--- a/jack/src/com/android/jack/dx/rop/cst/TypedConstant.java
+++ b/jack/src/com/android/jack/dx/rop/cst/TypedConstant.java
@@ -29,24 +29,24 @@
*/
@Override
public final TypeBearer getFrameType() {
- return this;
+ return getType().getFrameTypeImpl();
}
/** {@inheritDoc} */
@Override
public final int getBasicType() {
- return getType().getBasicType();
+ return getType().getBasicTypeImpl();
}
/** {@inheritDoc} */
@Override
public final int getBasicFrameType() {
- return getType().getBasicFrameType();
+ return getType().getBasicFrameTypeImpl();
}
/** {@inheritDoc} */
@Override
- public final boolean isConstant() {
+ public boolean isConstant() {
return true;
}
}
diff --git a/jack/src/com/android/jack/dx/rop/type/Prototype.java b/jack/src/com/android/jack/dx/rop/type/Prototype.java
index ed4e46c..97c7b8b 100644
--- a/jack/src/com/android/jack/dx/rop/type/Prototype.java
+++ b/jack/src/com/android/jack/dx/rop/type/Prototype.java
@@ -18,6 +18,8 @@
import java.util.HashMap;
+import javax.annotation.Nonnull;
+
/**
* Representation of a method descriptor. Instances of this class are
* generally interned and may be usefully compared with each other
@@ -44,15 +46,45 @@
* given method descriptor. See vmspec-2 sec4.3.3 for details on the
* field descriptor syntax.
*
+ * @param parameterTypes {@code non-null;} the list of parameter types
+ * @param returnType {@code non-null;} the return type
+ * @return {@code non-null;} the corresponding instance
+ */
+ public static Prototype intern(@Nonnull StdTypeList parameterTypes, @Nonnull Type returnType) {
+ StringBuilder descriptorBuff = new StringBuilder();
+ descriptorBuff.append('(');
+ for (int i = 0, length = parameterTypes.size(); i < length; i++) {
+ descriptorBuff.append(parameterTypes.get(i).getDescriptor());
+ }
+ descriptorBuff.append(')');
+ descriptorBuff.append(returnType.getDescriptor());
+
+ String descriptor = descriptorBuff.toString();
+
+ Prototype result;
+ synchronized (internTable) {
+ result = internTable.get(descriptor);
+ }
+ if (result != null) {
+ return result;
+ }
+
+ result = new Prototype(descriptor, returnType, parameterTypes);
+ return putIntern(result);
+ }
+
+ /**
+ * Returns the unique instance corresponding to the
+ * given method descriptor. See vmspec-2 sec4.3.3 for details on the
+ * field descriptor syntax.
+ *
* @param descriptor {@code non-null;} the descriptor
* @return {@code non-null;} the corresponding instance
* @throws IllegalArgumentException thrown if the descriptor has
* invalid syntax
*/
- public static Prototype intern(String descriptor) {
- if (descriptor == null) {
- throw new NullPointerException("descriptor == null");
- }
+ public static Prototype intern(@Nonnull String descriptor) {
+ assert descriptor != null;
Prototype result;
synchronized (internTable) {
@@ -211,18 +243,9 @@
* @param descriptor {@code non-null;} the descriptor string
*/
private Prototype(String descriptor, Type returnType, StdTypeList parameterTypes) {
- if (descriptor == null) {
- throw new NullPointerException("descriptor == null");
- }
-
- if (returnType == null) {
- throw new NullPointerException("returnType == null");
- }
-
- if (parameterTypes == null) {
- throw new NullPointerException("parameterTypes == null");
- }
-
+ assert descriptor != null;
+ assert returnType != null;
+ assert parameterTypes != null;
this.descriptor = descriptor;
this.returnType = returnType;
this.parameterTypes = parameterTypes;
diff --git a/jack/src/com/android/jack/dx/rop/type/Type.java b/jack/src/com/android/jack/dx/rop/type/Type.java
index 1ccb1f3..59a530c 100644
--- a/jack/src/com/android/jack/dx/rop/type/Type.java
+++ b/jack/src/com/android/jack/dx/rop/type/Type.java
@@ -16,11 +16,16 @@
package com.android.jack.dx.rop.type;
+import com.android.jack.dx.dex.file.ValueEncoder.ValueType;
+import com.android.jack.dx.rop.cst.Constant;
+import com.android.jack.dx.rop.cst.CstString;
+import com.android.jack.dx.rop.cst.TypedConstant;
import com.android.jack.dx.util.Hex;
import java.util.HashMap;
import javax.annotation.Nonnegative;
+import javax.annotation.Nonnull;
/**
* Representation of a value type, such as may appear in a field, in a
@@ -28,7 +33,7 @@
* class are generally interned and may be usefully compared with each
* other using {@code ==}.
*/
-public final class Type implements TypeBearer, Comparable<Type> {
+public final class Type extends TypedConstant implements TypeBearer {
/**
* {@code non-null;} intern table mapping string descriptors to
@@ -239,7 +244,7 @@
public static final Type SHORT_ARRAY = SHORT.getArrayType();
/** {@code non-null;} field descriptor for the type */
- private final String descriptor;
+ private final CstString descriptor;
/**
* basic type corresponding to this type; one of the
@@ -301,15 +306,13 @@
return result;
}
+ assert descriptor != null;
char firstChar;
try {
firstChar = descriptor.charAt(0);
} catch (IndexOutOfBoundsException ex) {
// Translate the exception.
throw new IllegalArgumentException("descriptor is empty");
- } catch (NullPointerException ex) {
- // Elucidate the exception.
- throw new NullPointerException("descriptor == null");
}
if (firstChar == '[') {
@@ -376,14 +379,10 @@
* invalid syntax
*/
public static Type internReturnType(String descriptor) {
- try {
- if (descriptor.equals("V")) {
- // This is the one special case where void may be returned.
- return VOID;
- }
- } catch (NullPointerException ex) {
- // Elucidate the exception.
- throw new NullPointerException("descriptor == null");
+ assert descriptor != null;
+ if (descriptor.equals("V")) {
+ // This is the one special case where void may be returned.
+ return VOID;
}
return intern(descriptor);
@@ -400,9 +399,7 @@
* @param newAt {@code >= -1;} allocation bytecode index
*/
private Type(String descriptor, int basicType, int newAt) {
- if (descriptor == null) {
- throw new NullPointerException("descriptor == null");
- }
+ assert descriptor != null;
if ((basicType < 0) || (basicType >= BT_COUNT)) {
throw new IllegalArgumentException("bad basicType");
@@ -412,7 +409,7 @@
throw new IllegalArgumentException("newAt < -1");
}
- this.descriptor = descriptor;
+ this.descriptor = new CstString(descriptor);
this.basicType = basicType;
this.newAt = newAt;
this.arrayType = null;
@@ -459,14 +456,8 @@
/** {@inheritDoc} */
@Override
- public int compareTo(Type other) {
- return descriptor.compareTo(other.descriptor);
- }
-
- /** {@inheritDoc} */
- @Override
public String toString() {
- return descriptor;
+ return descriptor.getString();
}
/** {@inheritDoc} */
@@ -494,7 +485,7 @@
case BT_OBJECT:
break;
default:
- return descriptor;
+ return descriptor.getString();
}
if (isArray()) {
@@ -511,9 +502,7 @@
return this;
}
- /** {@inheritDoc} */
- @Override
- public Type getFrameType() {
+ public Type getFrameTypeImpl() {
switch (basicType) {
case BT_BOOLEAN:
case BT_BYTE:
@@ -527,15 +516,11 @@
return this;
}
- /** {@inheritDoc} */
- @Override
- public int getBasicType() {
+ public int getBasicTypeImpl() {
return basicType;
}
- /** {@inheritDoc} */
- @Override
- public int getBasicFrameType() {
+ public int getBasicFrameTypeImpl() {
switch (basicType) {
case BT_BOOLEAN:
case BT_BYTE:
@@ -549,18 +534,12 @@
return basicType;
}
- /** {@inheritDoc} */
- @Override
- public boolean isConstant() {
- return false;
- }
-
/**
* Gets the descriptor.
*
* @return {@code non-null;} the descriptor
*/
- public String getDescriptor() {
+ public CstString getDescriptor() {
return descriptor;
}
@@ -578,10 +557,11 @@
throw new IllegalArgumentException("not an object type: " + descriptor);
}
- if (descriptor.charAt(0) == '[') {
- className = descriptor;
+ String descriptorStr = descriptor.getString();
+ if (descriptorStr.charAt(0) == '[') {
+ className = descriptorStr;
} else {
- className = descriptor.substring(1, descriptor.length() - 1);
+ className = descriptorStr.substring(1, descriptorStr.length() - 1);
}
}
@@ -632,6 +612,7 @@
* @see #isCategory1
* @return whether or not this is a category 2 type
*/
+ @Override
public boolean isCategory2() {
switch (basicType) {
case BT_LONG:
@@ -708,7 +689,7 @@
* @return whether this type is an array type
*/
public boolean isArray() {
- return (descriptor.charAt(0) == '[');
+ return (descriptor.getString().charAt(0) == '[');
}
/**
@@ -767,7 +748,7 @@
*/
public Type getArrayType() {
if (arrayType == null) {
- arrayType = putIntern(new Type('[' + descriptor, BT_OBJECT));
+ arrayType = putIntern(new Type('[' + descriptor.getString(), BT_OBJECT));
}
return arrayType;
@@ -781,10 +762,11 @@
*/
public Type getComponentType() {
if (componentType == null) {
- if (descriptor.charAt(0) != '[') {
+ String descriptorStr = descriptor.getString();
+ if (descriptorStr.charAt(0) != '[') {
throw new IllegalArgumentException("not an array type: " + descriptor);
}
- componentType = intern(descriptor.substring(1));
+ componentType = intern(descriptorStr.substring(1));
}
return componentType;
@@ -844,7 +826,7 @@
*/
private static Type putIntern(Type type) {
synchronized (internTable) {
- String descriptor = type.getDescriptor();
+ String descriptor = type.getDescriptor().getString();
Type already = internTable.get(descriptor);
if (already != null) {
return already;
@@ -853,4 +835,46 @@
return type;
}
}
+
+ @Override
+ public String typeName() {
+ return "type";
+ }
+
+ @Override
+ protected int compareTo0(Constant other) {
+ assert other instanceof Type;
+ return descriptor.compareTo(((Type) other).descriptor);
+ }
+
+
+ @Override
+ @Nonnull
+ public ValueType getEncodedValueType() {
+ return ValueType.VALUE_TYPE;
+ }
+
+ /**
+ * Returns a human readable package name for this type, like "java.util".
+ * If this is an array type, this returns the package name of the array's
+ * component type. If this is a primitive type, this returns "default".
+ */
+ public String getPackageName() {
+ // descriptor is a string like "[[Ljava/util/String;"
+ String descriptor = getDescriptor().getString();
+ int lastSlash = descriptor.lastIndexOf('/');
+ int lastLeftSquare = descriptor.lastIndexOf('['); // -1 unless this is an array
+ if (lastSlash == -1) {
+ return "default";
+ } else {
+ // +2 to skip the '[' and the 'L' prefix
+ return descriptor.substring(lastLeftSquare + 2, lastSlash).replace('/', '.');
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isConstant() {
+ return false;
+ }
}
diff --git a/jack/src/com/android/jack/dx/ssa/LocalVariableExtractor.java b/jack/src/com/android/jack/dx/ssa/LocalVariableExtractor.java
index 38490ae..9fe2b7a 100644
--- a/jack/src/com/android/jack/dx/ssa/LocalVariableExtractor.java
+++ b/jack/src/com/android/jack/dx/ssa/LocalVariableExtractor.java
@@ -62,12 +62,8 @@
* @param method {@code non-null;} the method to extract from
*/
private LocalVariableExtractor(SsaMethod method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
+ assert method != null;
ArrayList<SsaBasicBlock> blocks = method.getBlocks();
-
this.method = method;
this.blocks = blocks;
this.resultInfo = new LocalVariableInfo(method);
diff --git a/jack/src/com/android/jack/dx/ssa/LocalVariableInfo.java b/jack/src/com/android/jack/dx/ssa/LocalVariableInfo.java
index 14c3799..c3a7434 100644
--- a/jack/src/com/android/jack/dx/ssa/LocalVariableInfo.java
+++ b/jack/src/com/android/jack/dx/ssa/LocalVariableInfo.java
@@ -55,10 +55,7 @@
* @param method {@code non-null;} the method being represented by this instance
*/
public LocalVariableInfo(SsaMethod method) {
- if (method == null) {
- throw new NullPointerException("method == null");
- }
-
+ assert method != null;
List<SsaBasicBlock> blocks = method.getBlocks();
this.regCount = method.getRegCount();
@@ -77,11 +74,9 @@
* @param specs {@code non-null;} the register set to associate with the block
*/
public void setStarts(int index, RegisterSpecSet specs) {
- throwIfImmutable();
+ assert specs != null;
- if (specs == null) {
- throw new NullPointerException("specs == null");
- }
+ throwIfImmutable();
try {
blockStarts[index] = specs;
@@ -182,16 +177,11 @@
* @param spec {@code non-null;} the associated register spec
*/
public void addAssignment(SsaInsn insn, RegisterSpec spec) {
+ assert insn != null;
+ assert spec != null;
+
throwIfImmutable();
- if (insn == null) {
- throw new NullPointerException("insn == null");
- }
-
- if (spec == null) {
- throw new NullPointerException("spec == null");
- }
-
insnAssignments.put(insn, spec);
}
diff --git a/jack/src/com/android/jack/dx/ssa/SsaInsn.java b/jack/src/com/android/jack/dx/ssa/SsaInsn.java
index 403e56d..51e3937 100644
--- a/jack/src/com/android/jack/dx/ssa/SsaInsn.java
+++ b/jack/src/com/android/jack/dx/ssa/SsaInsn.java
@@ -41,10 +41,7 @@
* never change.
*/
protected SsaInsn(RegisterSpec result, SsaBasicBlock block) {
- if (block == null) {
- throw new NullPointerException("block == null");
- }
-
+ assert block != null;
this.block = block;
this.result = result;
}
@@ -85,10 +82,7 @@
* @param result {@code non-null;} the new result register
*/
protected void setResult(RegisterSpec result) {
- if (result == null) {
- throw new NullPointerException("result == null");
- }
-
+ assert result != null;
this.result = result;
}
diff --git a/jack/src/com/android/jack/dx/ssa/back/IdenticalBlockCombiner.java b/jack/src/com/android/jack/dx/ssa/back/IdenticalBlockCombiner.java
index 9e8b870..a47bf34 100644
--- a/jack/src/com/android/jack/dx/ssa/back/IdenticalBlockCombiner.java
+++ b/jack/src/com/android/jack/dx/ssa/back/IdenticalBlockCombiner.java
@@ -108,7 +108,8 @@
newBlocks.shrinkToFit();
newBlocks.setImmutable();
- return new RopMethod(newBlocks, ropMethod.getFirstLabel());
+ return new RopMethod(newBlocks, ropMethod.getFirstLabel(),
+ ropMethod.withDexCallingConvention());
}
/**
diff --git a/jack/src/com/android/jack/dx/ssa/back/SsaToRop.java b/jack/src/com/android/jack/dx/ssa/back/SsaToRop.java
index 1fb22f6..2fa858c 100644
--- a/jack/src/com/android/jack/dx/ssa/back/SsaToRop.java
+++ b/jack/src/com/android/jack/dx/ssa/back/SsaToRop.java
@@ -121,7 +121,8 @@
removeEmptyGotos();
RopMethod ropMethod = new RopMethod(convertBasicBlocks(),
- ssaMeth.blockIndexToRopLabel(ssaMeth.getEntryBlockIndex()));
+ ssaMeth.blockIndexToRopLabel(ssaMeth.getEntryBlockIndex()),
+ /* withDexCallingConvention= */ true);
ropMethod = new IdenticalBlockCombiner(ropMethod).process();
return ropMethod;
diff --git a/jack/src/com/android/jack/dx/util/ByteArray.java b/jack/src/com/android/jack/dx/util/ByteArray.java
index 2b2167a..0dbccbd 100644
--- a/jack/src/com/android/jack/dx/util/ByteArray.java
+++ b/jack/src/com/android/jack/dx/util/ByteArray.java
@@ -45,9 +45,7 @@
* the slice (exclusive)
*/
public ByteArray(byte[] bytes, int start, int end) {
- if (bytes == null) {
- throw new NullPointerException("bytes == null");
- }
+ assert bytes != null;
if (start < 0) {
throw new IllegalArgumentException("start < 0");
diff --git a/jack/src/com/android/jack/dx/util/ByteArrayAnnotatedOutput.java b/jack/src/com/android/jack/dx/util/ByteArrayAnnotatedOutput.java
index fcfab9f..0b448f6 100644
--- a/jack/src/com/android/jack/dx/util/ByteArrayAnnotatedOutput.java
+++ b/jack/src/com/android/jack/dx/util/ByteArrayAnnotatedOutput.java
@@ -99,10 +99,7 @@
* @param stretchy whether the instance is to be stretchy
*/
private ByteArrayAnnotatedOutput(byte[] data, boolean stretchy) {
- if (data == null) {
- throw new NullPointerException("data == null");
- }
-
+ assert data != null;
this.stretchy = stretchy;
this.data = data;
this.cursor = 0;
diff --git a/jack/src/com/android/jack/dx/util/ExceptionWithContext.java b/jack/src/com/android/jack/dx/util/ExceptionWithContext.java
index 028e917..34eadd9 100644
--- a/jack/src/com/android/jack/dx/util/ExceptionWithContext.java
+++ b/jack/src/com/android/jack/dx/util/ExceptionWithContext.java
@@ -108,10 +108,7 @@
* @param str {@code non-null;} new context
*/
public void addContext(String str) {
- if (str == null) {
- throw new NullPointerException("str == null");
- }
-
+ assert str != null;
context.append(str);
if (!str.endsWith("\n")) {
context.append('\n');
diff --git a/jack/src/com/android/jack/dx/util/IndentingWriter.java b/jack/src/com/android/jack/dx/util/IndentingWriter.java
index b7a8e41..ab31a35 100644
--- a/jack/src/com/android/jack/dx/util/IndentingWriter.java
+++ b/jack/src/com/android/jack/dx/util/IndentingWriter.java
@@ -55,19 +55,13 @@
*/
public IndentingWriter(Writer out, int width, String prefix) {
super(out);
-
- if (out == null) {
- throw new NullPointerException("out == null");
- }
+ assert out != null;
+ assert prefix != null;
if (width < 0) {
throw new IllegalArgumentException("width < 0");
}
- if (prefix == null) {
- throw new NullPointerException("prefix == null");
- }
-
this.width = (width != 0) ? width : Integer.MAX_VALUE;
this.maxIndent = width >> 1;
this.prefix = (prefix.length() == 0) ? null : prefix;
diff --git a/jack/src/com/android/jack/dx/util/LabeledList.java b/jack/src/com/android/jack/dx/util/LabeledList.java
index 3579dbf..2f27822 100644
--- a/jack/src/com/android/jack/dx/util/LabeledList.java
+++ b/jack/src/com/android/jack/dx/util/LabeledList.java
@@ -130,9 +130,7 @@
for (int i = 0; i < sz; i++) {
LabeledItem li = (LabeledItem) get0(i);
- if (li == null) {
- throw new NullPointerException("null at index " + i);
- }
+ assert li != null;
result[i] = li.getLabel();
}
diff --git a/jack/src/com/android/jack/dx/util/TwoColumnOutput.java b/jack/src/com/android/jack/dx/util/TwoColumnOutput.java
index 204c20f..f5cc224 100644
--- a/jack/src/com/android/jack/dx/util/TwoColumnOutput.java
+++ b/jack/src/com/android/jack/dx/util/TwoColumnOutput.java
@@ -84,9 +84,8 @@
* @param spacer {@code non-null;} spacer string to sit between the two columns
*/
public TwoColumnOutput(Writer out, int leftWidth, int rightWidth, String spacer) {
- if (out == null) {
- throw new NullPointerException("out == null");
- }
+ assert out != null;
+ assert spacer != null;
if (leftWidth < 1) {
throw new IllegalArgumentException("leftWidth < 1");
@@ -96,10 +95,6 @@
throw new IllegalArgumentException("rightWidth < 1");
}
- if (spacer == null) {
- throw new NullPointerException("spacer == null");
- }
-
StringWriter leftWriter = new StringWriter(1000);
StringWriter rightWriter = new StringWriter(1000);
diff --git a/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java b/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java
index 3080330..d7f4497 100644
--- a/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java
+++ b/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java
@@ -43,6 +43,7 @@
import org.eclipse.jdt.internal.compiler.env.IBinaryType;
import org.eclipse.jdt.internal.compiler.env.IBinaryTypeAnnotation;
import org.eclipse.jdt.internal.compiler.env.ITypeAnnotationWalker;
+import org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.ExternalAnnotationStatus;
import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
@@ -459,4 +460,9 @@
// Jack does not support ecj external annotation file
return walker;
}
+
+ @Override
+ public ExternalAnnotationStatus getExternalAnnotationStatus() {
+ return ExternalAnnotationStatus.FROM_SOURCE;
+ }
}
diff --git a/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java b/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java
index f7bd125..5bb764d 100644
--- a/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java
+++ b/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java
@@ -71,6 +71,20 @@
}
@Nonnull
+ private JMethodId getResolvedMethodId(@Nonnull JClassOrInterface receiverType,
+ @Nonnull JMethodId id) {
+ Collection<JMethod> methods = id.getMethods();
+ if (!methods.isEmpty()) {
+ JMethod method = methods.iterator().next();
+ return method.getMethodId();
+ } else {
+ JMethodIdWide methodIdWide = id.getMethodIdWide();
+ return receiverType.getOrCreateMethodId(methodIdWide.getName(),
+ methodIdWide.getParamTypes(), methodIdWide.getKind(), id.getType());
+ }
+ }
+
+ @Nonnull
private JMethodIdWide getResolvedMethodIdWide(
@Nonnull JClassOrInterface receiverType, @Nonnull JMethodIdWide id) {
Collection<JMethod> methods = id.getMethods();
@@ -100,7 +114,7 @@
@Override
public boolean visit(@Nonnull JMethodCall call) {
- JMethodIdWide id = getResolvedMethodIdWide(call.getReceiverType(), call.getMethodId());
+ JMethodId id = getResolvedMethodId(call.getReceiverType(), call.getMethodId());
call.resolveMethodId(id);
return super.visit(call);
}
diff --git a/jack/src/com/android/jack/frontend/java/JAstBuilder.java b/jack/src/com/android/jack/frontend/java/JAstBuilder.java
index 6e25731..cc20154 100644
--- a/jack/src/com/android/jack/frontend/java/JAstBuilder.java
+++ b/jack/src/com/android/jack/frontend/java/JAstBuilder.java
@@ -19,6 +19,7 @@
import com.android.jack.JackEventType;
import com.android.jack.JackUserException;
+import com.android.jack.Options;
import com.android.jack.frontend.java.JackBatchCompiler.TransportJUEAroundEcjError;
import com.android.jack.ir.JNodeInternalError;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
@@ -28,6 +29,8 @@
import com.android.jack.ir.impl.JackIrBuilder;
import com.android.jack.ir.impl.ReferenceMapper;
import com.android.jack.ir.impl.SourceCompilationException;
+import com.android.sched.util.config.Config;
+import com.android.sched.util.config.ThreadConfig;
import com.android.sched.util.location.FileLocation;
import com.android.sched.util.log.Event;
import com.android.sched.util.log.Tracer;
@@ -63,6 +66,9 @@
class JAstBuilder extends JavaParser {
@Nonnull
+ private final Config config = ThreadConfig.getConfig();
+
+ @Nonnull
private final Tracer tracer = TracerFactory.getTracer();
@Nonnull
@@ -153,6 +159,10 @@
for (JDefinedClassOrInterface type : types) {
session.addTypeToEmit(type);
}
+
+ if (config.get(Options.EMIT_CLASS_FILES).booleanValue()) {
+ unit.generateCode();
+ }
}
} catch (IllegalArgumentException e) {
// This is a workaround to reduce bad handling of IllegalArgumentException in
@@ -260,19 +270,19 @@
}
@Override
- public void compile(ICompilationUnit[] sourceUnits) {
+ protected void backupAptProblems() {
+ resetJack = true;
+ super.backupAptProblems();
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
if (resetJack) {
session.reset();
astBuilder = new JackIrBuilder(lookupEnvironment, session);
resetJack = false;
}
- super.compile(sourceUnits);
- }
-
- @Override
- public void reset() {
- resetJack = true;
- super.reset();
}
public void finishCompilation() {
diff --git a/jack/src/com/android/jack/incremental/CommonFilter.java b/jack/src/com/android/jack/incremental/CommonFilter.java
index d810517..3c12400 100644
--- a/jack/src/com/android/jack/incremental/CommonFilter.java
+++ b/jack/src/com/android/jack/incremental/CommonFilter.java
@@ -56,6 +56,7 @@
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.Directory;
import com.android.sched.util.file.FileOrDirectory;
+import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.FileOrDirectory.Permission;
import com.android.sched.util.file.Files;
import com.android.sched.util.file.InputZipFile;
@@ -71,6 +72,7 @@
import com.android.sched.vfs.ReadZipFS;
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
+import com.android.sched.vfs.WrongVFSTypeException;
import com.android.sched.vfs.ZipUtils;
import java.io.File;
@@ -344,11 +346,11 @@
File jackJar = new File(location.toURI().getPath());
for (String prefix: JACK_DEFAULT_LIB_PATH) {
VFS jackVfs = new PrefixedFS(new ReadZipFS(new InputZipFile(jackJar.getPath())),
- new VPath(prefix, ZipUtils.ZIP_SEPARATOR));
+ new VPath(prefix, ZipUtils.ZIP_SEPARATOR), Existence.MUST_EXIST);
libraries.add(JackLibraryFactory.getInputLibrary(jackVfs));
}
return libraries;
- } catch (LibraryException e) {
+ } catch (LibraryException | WrongVFSTypeException e) {
EmbeddedLibraryLoadingException reportable = new EmbeddedLibraryLoadingException(e);
session.getReporter().report(Severity.FATAL, reportable);
throw new JackAbortException(reportable);
diff --git a/jack/src/com/android/jack/ir/JackFormatIr.java b/jack/src/com/android/jack/ir/JackFormatIr.java
index a071824..b9308f2 100644
--- a/jack/src/com/android/jack/ir/JackFormatIr.java
+++ b/jack/src/com/android/jack/ir/JackFormatIr.java
@@ -17,6 +17,7 @@
package com.android.jack.ir;
import com.android.jack.backend.dex.annotations.AnnotationMethodDefaultValue;
+import com.android.jack.debug.DebugVariableInfoMarker;
import com.android.jack.digest.OriginDigestMarker;
import com.android.jack.ir.ast.JAbsentArrayDimension;
import com.android.jack.ir.ast.JAddOperation;
@@ -139,6 +140,7 @@
@Description("All JNodes, tags or markers that represent the Jack format.")
@ComposedOf({AnnotationMethodDefaultValue.class,
BooleanTestOutsideIf.class,
+ DebugVariableInfoMarker.class,
DefaultBridgeIntoInterface.class,
EmptyClinit.class,
ImplicitBoxingAndUnboxing.class,
diff --git a/jack/src/com/android/jack/ir/ast/JAbstractMethodCall.java b/jack/src/com/android/jack/ir/ast/JAbstractMethodCall.java
index 3cc9f27..cdda0d6 100644
--- a/jack/src/com/android/jack/ir/ast/JAbstractMethodCall.java
+++ b/jack/src/com/android/jack/ir/ast/JAbstractMethodCall.java
@@ -43,22 +43,17 @@
@Nonnull
private final List<JExpression> args = new ArrayList<JExpression>();
@Nonnull
- private JMethodIdWide methodId;
- @Nonnull
- private final JType returnType;
+ private JMethodId methodId;
protected JAbstractMethodCall(@Nonnull SourceInfo info, @CheckForNull JExpression instance,
- @Nonnull JClassOrInterface receiverType, @Nonnull JMethodIdWide methodId,
- @Nonnull JType returnType) {
+ @Nonnull JClassOrInterface receiverType, @Nonnull JMethodId methodId) {
super(info);
assert receiverType != null;
assert methodId != null;
- assert returnType != null;
this.instance = instance;
this.receiverType = receiverType;
this.methodId = methodId;
- this.returnType = returnType;
}
/**
@@ -139,17 +134,22 @@
}
@Nonnull
- public JMethodIdWide getMethodId() {
+ public JMethodIdWide getMethodIdWide() {
+ return methodId.getMethodIdWide();
+ }
+
+ @Nonnull
+ public JMethodId getMethodId() {
return methodId;
}
@Nonnull
@Override
public JType getType() {
- return returnType;
+ return methodId.getType();
}
- public void resolveMethodId(@Nonnull JMethodIdWide methodId) {
+ public void resolveMethodId(@Nonnull JMethodId methodId) {
this.methodId = methodId;
}
@@ -178,22 +178,43 @@
@Nonnull
public String getMethodName() {
- return methodId.getName();
+ return methodId.getMethodIdWide().getName();
}
public abstract boolean isCallToPolymorphicMethod();
static boolean isCallToPolymorphicMethod(@Nonnull JClassOrInterface receiverType,
- @Nonnull JMethodIdWide methodId, @Nonnull JType returnType) {
+ @Nonnull JMethodId methodId) {
UserFriendlyFormatter formatter = UserFriendlyFormatter.getFormatter();
- String calledMethodName = methodId.getName();
- List<JType> paramTypes = methodId.getParamTypes();
+ String calledMethodName = methodId.getMethodIdWide().getName();
+ List<JType> paramTypes = methodId.getMethodIdWide().getParamTypes();
return receiverType != null
- && formatter.getName(returnType).equals("java.lang.Object")
- && formatter.getName(receiverType).equals("java.lang.invoke.MethodHandle")
+ && formatter.getName(methodId.getType()).equals("java.lang.Object")
+ && isSubtypeOfOrMethodHandle(formatter, receiverType)
&& (calledMethodName.equals("invoke") || calledMethodName.equals("invokeExact"))
&& paramTypes.size() == 1
&& formatter.getName(paramTypes.get(0)).equals("java.lang.Object[]");
}
+
+ private static boolean isSubtypeOfOrMethodHandle(@Nonnull UserFriendlyFormatter formatter,
+ @Nonnull JClassOrInterface type) {
+ if (type instanceof JPhantomClass) {
+ return isSubtypeOfOrMethodHandle(formatter, (JPhantomClass) type);
+ } else if (type instanceof JDefinedClass) {
+ return isSubtypeOfOrMethodHandle(formatter, (JDefinedClass) type);
+ }
+ return false;
+ }
+
+ private static boolean isSubtypeOfOrMethodHandle(@Nonnull UserFriendlyFormatter formatter,
+ @Nonnull JPhantomClass type) {
+ return formatter.getName(type).equals("java.lang.invoke.MethodHandle");
+ }
+
+ private static boolean isSubtypeOfOrMethodHandle(@Nonnull UserFriendlyFormatter formatter,
+ @Nonnull JDefinedClass type) {
+ return formatter.getName(type).equals("java.lang.invoke.MethodHandle")
+ || isSubtypeOfOrMethodHandle(formatter, type.getSuperClass());
+ }
}
diff --git a/jack/src/com/android/jack/ir/ast/JClassLiteral.java b/jack/src/com/android/jack/ir/ast/JClassLiteral.java
index f45d916..ec04608 100644
--- a/jack/src/com/android/jack/ir/ast/JClassLiteral.java
+++ b/jack/src/com/android/jack/ir/ast/JClassLiteral.java
@@ -91,7 +91,9 @@
|| parent instanceof JAnnotationMethod
|| parent instanceof JFieldInitializer
|| parent instanceof JReturnStatement
- || parent instanceof JSynchronizedBlock)) {
+ || parent instanceof JSynchronizedBlock
+ || parent instanceof JLock
+ || parent instanceof JUnlock)) {
throw new JNodeInternalError(this, "Invalid parent");
}
}
diff --git a/jack/src/com/android/jack/ir/ast/JDefinedClassOrInterface.java b/jack/src/com/android/jack/ir/ast/JDefinedClassOrInterface.java
index 8ea9ffb..781f660 100644
--- a/jack/src/com/android/jack/ir/ast/JDefinedClassOrInterface.java
+++ b/jack/src/com/android/jack/ir/ast/JDefinedClassOrInterface.java
@@ -287,6 +287,17 @@
* @return Returns the matching method if any, throws a {@link JMethodLookupException} otherwise.
*/
@Nonnull
+ public JMethod getMethod(@Nonnull JMethodId methodId) throws JMethodLookupException {
+ JMethodIdWide methodIdWide = methodId.getMethodIdWide();
+ return getMethod(methodIdWide.getName(), methodId.getType(), methodIdWide.getParamTypes());
+ }
+
+ /**
+ * Returns the {@link JMethod} with the signature {@code signature} declared for this type.
+ *
+ * @return Returns the matching method if any, throws a {@link JMethodLookupException} otherwise.
+ */
+ @Nonnull
public JMethod getMethod(@Nonnull String name, @Nonnull JType returnType,
@Nonnull JType... args) throws JMethodLookupException {
return (getMethod(name, returnType, Arrays.asList(args)));
diff --git a/jack/src/com/android/jack/ir/ast/JDefinedInterface.java b/jack/src/com/android/jack/ir/ast/JDefinedInterface.java
index 2ef2497..d7a9c80 100644
--- a/jack/src/com/android/jack/ir/ast/JDefinedInterface.java
+++ b/jack/src/com/android/jack/ir/ast/JDefinedInterface.java
@@ -129,8 +129,7 @@
continue;
}
try {
- JMethod jloMth = ((JDefinedClass) jlo).getMethod(mth.getName(), mth.getType(),
- mth.getMethodIdWide().getParamTypes());
+ JMethod jloMth = ((JDefinedClass) jlo).getMethod(mth.getMethodId());
if (jloMth.isPublic() && !jloMth.isStatic()) {
// Do not take overriding of jlo public non static methods
continue;
diff --git a/jack/src/com/android/jack/ir/ast/JIfStatement.java b/jack/src/com/android/jack/ir/ast/JIfStatement.java
index a5a2c77..c355980 100644
--- a/jack/src/com/android/jack/ir/ast/JIfStatement.java
+++ b/jack/src/com/android/jack/ir/ast/JIfStatement.java
@@ -21,6 +21,7 @@
import com.android.sched.scheduler.ScheduleInstance;
import com.android.sched.transform.TransformRequest;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
@@ -29,26 +30,34 @@
@Description("Java if statement")
public class JIfStatement extends JStatement {
+ @CheckForNull
private JStatement elseStmt;
+ @Nonnull
private JExpression ifExpr;
+ @Nonnull
private JStatement thenStmt;
- public JIfStatement(
- SourceInfo info, JExpression ifExpr, JStatement thenStmt, JStatement elseStmt) {
+ public JIfStatement(@Nonnull SourceInfo info, @Nonnull JExpression ifExpr,
+ @Nonnull JStatement thenStmt, @CheckForNull JStatement elseStmt) {
super(info);
+ assert ifExpr != null;
+ assert thenStmt != null;
this.ifExpr = ifExpr;
this.thenStmt = thenStmt;
this.elseStmt = elseStmt;
}
+ @CheckForNull
public JStatement getElseStmt() {
return elseStmt;
}
+ @Nonnull
public JExpression getIfExpr() {
return ifExpr;
}
+ @Nonnull
public JStatement getThenStmt() {
return thenStmt;
}
@@ -57,9 +66,7 @@
public void traverse(@Nonnull JVisitor visitor) {
if (visitor.visit(this)) {
visitor.accept(ifExpr);
- if (thenStmt != null) {
- visitor.accept(thenStmt);
- }
+ visitor.accept(thenStmt);
if (elseStmt != null) {
visitor.accept(elseStmt);
}
@@ -71,9 +78,7 @@
public void traverse(@Nonnull ScheduleInstance<? super Component> schedule) throws Exception {
schedule.process(this);
ifExpr.traverse(schedule);
- if (thenStmt != null) {
- thenStmt.traverse(schedule);
- }
+ thenStmt.traverse(schedule);
if (elseStmt != null) {
elseStmt.traverse(schedule);
}
@@ -97,9 +102,8 @@
@Override
protected void removeImpl(@Nonnull JNode existingNode) throws UnsupportedOperationException {
- if (thenStmt == existingNode) {
- thenStmt = null;
- } else if (elseStmt == existingNode) {
+ assert existingNode != thenStmt;
+ if (elseStmt == existingNode) {
elseStmt = null;
} else {
super.removeImpl(existingNode);
diff --git a/jack/src/com/android/jack/ir/ast/JMethodCall.java b/jack/src/com/android/jack/ir/ast/JMethodCall.java
index 7e331ca..de3bbb0 100644
--- a/jack/src/com/android/jack/ir/ast/JMethodCall.java
+++ b/jack/src/com/android/jack/ir/ast/JMethodCall.java
@@ -48,21 +48,20 @@
* forces the caller to potentially deal with cloning objects if needed.
*/
public JMethodCall(@Nonnull JMethodCall other, @CheckForNull JExpression instance) {
- super(other.getSourceInfo(), instance, other.getReceiverType(), other.getMethodId(),
- other.getType());
+ super(other.getSourceInfo(), instance, other.getReceiverType(), other.getMethodId());
dispatchKind = other.getDispatchKind();
assert other.getReceiverType() == null || !JPolymorphicMethodCall
- .isCallToPolymorphicMethod(other.getReceiverType(), other.getMethodId(), other.getType());
+ .isCallToPolymorphicMethod(other.getReceiverType(), other.getMethodId());
}
public JMethodCall(@Nonnull SourceInfo info, @CheckForNull JExpression instance,
- @Nonnull JClassOrInterface receiverType, @Nonnull JMethodIdWide methodId,
- @Nonnull JType returnType, boolean isVirtualDispatch) {
- super(info, instance, receiverType, methodId, returnType);
+ @Nonnull JClassOrInterface receiverType, @Nonnull JMethodId methodId,
+ boolean isVirtualDispatch) {
+ super(info, instance, receiverType, methodId);
assert methodId != null;
assert receiverType == null
- || !JPolymorphicMethodCall.isCallToPolymorphicMethod(receiverType, methodId, returnType);
- assert (!isVirtualDispatch) || methodId.getKind() == MethodKind.INSTANCE_VIRTUAL;
+ || !JPolymorphicMethodCall.isCallToPolymorphicMethod(receiverType, methodId);
+ assert (!isVirtualDispatch) || getMethodIdWide().getKind() == MethodKind.INSTANCE_VIRTUAL;
this.dispatchKind = isVirtualDispatch ? DispatchKind.VIRTUAL : DispatchKind.DIRECT;
}
@@ -93,6 +92,6 @@
@Override
public boolean isCallToPolymorphicMethod() {
- return isCallToPolymorphicMethod(getReceiverType(), getMethodId(), getType());
+ return isCallToPolymorphicMethod(getReceiverType(), getMethodId());
}
}
diff --git a/jack/src/com/android/jack/ir/ast/JModifier.java b/jack/src/com/android/jack/ir/ast/JModifier.java
index f8e937d..76a5ecc 100644
--- a/jack/src/com/android/jack/ir/ast/JModifier.java
+++ b/jack/src/com/android/jack/ir/ast/JModifier.java
@@ -43,6 +43,7 @@
public static final int SYNTHETIC = 0x1000;
public static final int ANNOTATION = 0x2000;
public static final int ENUM = 0x4000;
+ public static final int IMPLICIT = 0x8000;
public static final int STATIC_INIT = 0x10000;
public static final int DEPRECATED = 0x100000;
@@ -53,6 +54,7 @@
public static final int ANONYMOUS_TYPE = 0x40000;
public static final int CAPTURED_VARIABLE = 0x80000;
public static final int LAMBDA_METHOD = 0x200000;
+ public static final int NAME_PRESENT = 0x400000;
private static final int TYPE_MODIFIER_MASK = PUBLIC | PROTECTED | PRIVATE | STATIC | FINAL
| ENUM | SYNTHETIC | ABSTRACT | INTERFACE | ANNOTATION | SUPER | STRICTFP | DEPRECATED;
@@ -66,6 +68,9 @@
private static final int LOCAL_MODIFIER_MASK = FINAL | SYNTHETIC | CAPTURED_VARIABLE;
+ private static final int PARAMETER_MODIFIER_MASK =
+ FINAL | SYNTHETIC | CAPTURED_VARIABLE | IMPLICIT | NAME_PRESENT;
+
public static boolean isPublic(int modifier) {
return ((modifier & PUBLIC) == PUBLIC);
}
@@ -154,6 +159,15 @@
return ((modifier & DEPRECATED) == DEPRECATED);
}
+ public static boolean isImplicit(int modifier) {
+ return ((modifier & IMPLICIT) == IMPLICIT);
+ }
+
+ public static boolean isNamePresent(int modifier) {
+ return ((modifier & NAME_PRESENT) == NAME_PRESENT);
+ }
+
+
/**
* Check that this modifier only has flags meant for types
* @param modifier the modifier to test
@@ -291,7 +305,7 @@
* @return true if the modifier is conform, false otherwise
*/
public static boolean isParameterModifier(int modifier) {
- return ((modifier & LOCAL_MODIFIER_MASK) == modifier);
+ return ((modifier & PARAMETER_MODIFIER_MASK) == modifier);
}
private static void getStringModifierCommon(int modifier, StringBuilder modifierStrBuilder) {
@@ -376,8 +390,8 @@
}
@Nonnull
- public static String getStringVariableModifier(int modifier) {
- assert isLocalModifier(modifier);
+ public static String getStringParameterModifier(int modifier) {
+ assert isParameterModifier(modifier);
StringBuilder modifierStrBuilder = new StringBuilder();
getStringModifierCommon(modifier, modifierStrBuilder);
diff --git a/jack/src/com/android/jack/ir/ast/JNewInstance.java b/jack/src/com/android/jack/ir/ast/JNewInstance.java
index 5e00036..36c688e 100644
--- a/jack/src/com/android/jack/ir/ast/JNewInstance.java
+++ b/jack/src/com/android/jack/ir/ast/JNewInstance.java
@@ -29,6 +29,9 @@
@Description("A new instance expression")
public class JNewInstance extends JMethodCall {
+ @Nonnull
+ private final JClass createdType;
+
/**
* Initialize a new instance operation equivalent to another one. The new
* object has no arguments on initialization. This forces the caller to
@@ -36,17 +39,19 @@
*/
public JNewInstance(JNewInstance other) {
super(other, null);
+ createdType = other.createdType;
}
public JNewInstance(@Nonnull SourceInfo info, @Nonnull JClassOrInterface receiverType,
- @Nonnull JMethodIdWide ctor) {
- super(info, null, receiverType, ctor, receiverType, false /* isVirtualDispatch */);
+ @Nonnull JMethodId ctor) {
+ super(info, null, receiverType, ctor, false /* isVirtualDispatch */);
+ createdType = (JClass) receiverType;
}
@Nonnull
@Override
public JClass getType() {
- return (JClass) super.getType();
+ return createdType;
}
@Override
diff --git a/jack/src/com/android/jack/ir/ast/JNode.java b/jack/src/com/android/jack/ir/ast/JNode.java
index 4f2129e..368ddce 100644
--- a/jack/src/com/android/jack/ir/ast/JNode.java
+++ b/jack/src/com/android/jack/ir/ast/JNode.java
@@ -90,6 +90,7 @@
@Nonnull
protected SourceInfo info;
+ @CheckForNull
protected JNode parent = null;
protected JNode(@Nonnull SourceInfo info) {
@@ -100,6 +101,7 @@
/**
* @return the parent
*/
+ @CheckForNull
public JNode getParent() {
return parent;
}
@@ -255,14 +257,14 @@
return false;
}
- public void updateParents(JNode parent) {
+ public void updateParents(@Nonnull JNode parent) {
new ParentSetterVisitor(parent).accept(this);
}
/**
* @param parent the parent to set
*/
- private void setParent(JNode parent) {
+ private void setParent(@Nonnull JNode parent) {
assert parent != null;
this.parent = parent;
}
diff --git a/jack/src/com/android/jack/ir/ast/JParameter.java b/jack/src/com/android/jack/ir/ast/JParameter.java
index 499ac1a..dce5cde 100644
--- a/jack/src/com/android/jack/ir/ast/JParameter.java
+++ b/jack/src/com/android/jack/ir/ast/JParameter.java
@@ -174,4 +174,20 @@
public void removeLoader() {
loader = NopParameterLoader.INSTANCE;
}
+
+ public void setimplicit() {
+ modifier |= JModifier.IMPLICIT;
+ }
+
+ public boolean isImplicit() {
+ return (JModifier.isImplicit(modifier));
+ }
+
+ public void setNamePresent() {
+ modifier |= JModifier.NAME_PRESENT;
+ }
+
+ public boolean isNamePresent() {
+ return (JModifier.isNamePresent(modifier));
+ }
}
diff --git a/jack/src/com/android/jack/ir/ast/JPolymorphicMethodCall.java b/jack/src/com/android/jack/ir/ast/JPolymorphicMethodCall.java
index 0cdfd36..34cf67e 100644
--- a/jack/src/com/android/jack/ir/ast/JPolymorphicMethodCall.java
+++ b/jack/src/com/android/jack/ir/ast/JPolymorphicMethodCall.java
@@ -44,10 +44,10 @@
public JPolymorphicMethodCall(@Nonnull SourceInfo info, @Nonnull JExpression instance,
@Nonnull JClassOrInterface receiverType, @Nonnull JMethodId methodId,
@Nonnull JType callSiteReturnType, @Nonnull List<JType> callSiteParameterTypes) {
- super(info, instance, receiverType, methodId.getMethodIdWide(), methodId.getType());
+ super(info, instance, receiverType, methodId);
assert instance != null;
- assert isCallToPolymorphicMethod(receiverType, methodId.getMethodIdWide(), methodId.getType());
+ assert isCallToPolymorphicMethod(receiverType, methodId);
this.callSiteReturnType = callSiteReturnType;
this.callSiteParameterTypes = callSiteParameterTypes;
diff --git a/jack/src/com/android/jack/ir/ast/JReferenceTypeCommon.java b/jack/src/com/android/jack/ir/ast/JReferenceTypeCommon.java
index 5c8fdca..7547100 100644
--- a/jack/src/com/android/jack/ir/ast/JReferenceTypeCommon.java
+++ b/jack/src/com/android/jack/ir/ast/JReferenceTypeCommon.java
@@ -83,7 +83,7 @@
@Override
@Nonnull
- public JArrayType getArray() {
+ public synchronized JArrayType getArray() {
if (array == null) {
array = new JArrayType(this);
}
diff --git a/jack/src/com/android/jack/ir/ast/JVariable.java b/jack/src/com/android/jack/ir/ast/JVariable.java
index 302c460..b8ec74e 100644
--- a/jack/src/com/android/jack/ir/ast/JVariable.java
+++ b/jack/src/com/android/jack/ir/ast/JVariable.java
@@ -17,6 +17,7 @@
import com.android.jack.Jack;
+import com.android.jack.debug.DebugVariableInfoMarker;
import com.android.jack.ir.StringInterner;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.sourceinfo.SourceInfo;
@@ -38,6 +39,11 @@
public abstract class JVariable extends JNode implements HasName, CanBeSetFinal,
CanBeRenamed, HasType, Annotable {
+ /**
+ * Name of JParameter is either the name coming from the source code, either the name coming from
+ * Jill through the parameter name information. It is not the name from debug informations. Debug
+ * informations when coming from Jill are put into {@link DebugVariableInfoMarker}.
+ */
@CheckForNull
private String name;
@Nonnull
@@ -110,6 +116,10 @@
modifier |= JModifier.CAPTURED_VARIABLE;
}
+ public void setModifier(int modifier) {
+ this.modifier = modifier;
+ }
+
@Override
public void addAnnotation(@Nonnull JAnnotation annotation) {
annotations.add(annotation);
diff --git a/jack/src/com/android/jack/ir/formatter/BinarySignatureFormatter.java b/jack/src/com/android/jack/ir/formatter/BinarySignatureFormatter.java
index 94bf498..337b7fb 100644
--- a/jack/src/com/android/jack/ir/formatter/BinarySignatureFormatter.java
+++ b/jack/src/com/android/jack/ir/formatter/BinarySignatureFormatter.java
@@ -107,7 +107,7 @@
sb.append(getNameInternal(enclosingPackage));
sb.append(getPackageSeparator());
}
- sb.append(classOrInterfaceSimpleName).append(";");
+ sb.append(classOrInterfaceSimpleName).append(';');
return sb.toString();
}
diff --git a/jack/src/com/android/jack/ir/impl/BaseGenerationVisitor.java b/jack/src/com/android/jack/ir/impl/BaseGenerationVisitor.java
index da5d10e..52090e9 100644
--- a/jack/src/com/android/jack/ir/impl/BaseGenerationVisitor.java
+++ b/jack/src/com/android/jack/ir/impl/BaseGenerationVisitor.java
@@ -673,13 +673,12 @@
accept(x.getIfExpr());
rparen();
- if (x.getThenStmt() != null) {
- nestedStatementPush(x.getThenStmt());
- accept(x.getThenStmt());
- nestedStatementPop(x.getThenStmt());
- }
+ nestedStatementPush(x.getThenStmt());
+ accept(x.getThenStmt());
+ nestedStatementPop(x.getThenStmt());
- if (x.getElseStmt() != null) {
+ JStatement elseStmt = x.getElseStmt();
+ if (elseStmt != null) {
if (needSemi) {
semi();
newline();
@@ -688,15 +687,15 @@
needSemi = true;
}
print(CHARS_ELSE);
- boolean elseIf = x.getElseStmt() instanceof JIfStatement;
+ boolean elseIf = elseStmt instanceof JIfStatement;
if (!elseIf) {
- nestedStatementPush(x.getElseStmt());
+ nestedStatementPush(elseStmt);
} else {
space();
}
- accept(x.getElseStmt());
+ accept(elseStmt);
if (!elseIf) {
- nestedStatementPop(x.getElseStmt());
+ nestedStatementPop(elseStmt);
}
}
@@ -901,7 +900,7 @@
public boolean visit(@Nonnull JPolymorphicMethodCall x) {
JExpression instance = x.getInstance();
assert instance != null;
- JMethodIdWide target = x.getMethodId();
+ JMethodIdWide target = x.getMethodIdWide();
if (x.getInstance() instanceof JThisRef) {
print(CHARS_THIS);
} else {
@@ -921,7 +920,7 @@
@Override
public boolean visit(@Nonnull JMethodCall x) {
JExpression instance = x.getInstance();
- JMethodIdWide target = x.getMethodId();
+ JMethodIdWide target = x.getMethodIdWide();
if (instance == null) {
// Static call.
printTypeName(x.getReceiverType());
@@ -996,7 +995,7 @@
@Override
public boolean visit(@Nonnull JNewInstance x) {
print(CHARS_NEW);
- JMethodIdWide target = x.getMethodId();
+ JMethodIdWide target = x.getMethodIdWide();
printName(target);
lparen();
visitCollectionWithCommas(x.getArgs().iterator());
@@ -1025,7 +1024,7 @@
@Override
public boolean visit(@Nonnull JParameter x) {
printAnnotationLiterals(x.getAnnotations());
- print(JModifier.getStringVariableModifier(x.getModifier()));
+ print(JModifier.getStringParameterModifier(x.getModifier()));
printType(x);
space();
printName(x);
diff --git a/jack/src/com/android/jack/ir/impl/JackIrBuilder.java b/jack/src/com/android/jack/ir/impl/JackIrBuilder.java
index 52c1ec2..705d780 100644
--- a/jack/src/com/android/jack/ir/impl/JackIrBuilder.java
+++ b/jack/src/com/android/jack/ir/impl/JackIrBuilder.java
@@ -182,6 +182,7 @@
import org.eclipse.jdt.internal.compiler.ast.IntLiteral;
import org.eclipse.jdt.internal.compiler.ast.LabeledStatement;
import org.eclipse.jdt.internal.compiler.ast.LambdaExpression;
+import org.eclipse.jdt.internal.compiler.ast.Literal;
import org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
import org.eclipse.jdt.internal.compiler.ast.LongLiteral;
import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation;
@@ -713,8 +714,12 @@
value = pop(x.valueIfFalse);
condition = pop(x.condition);
}
- push(new JMultiExpression(info,
- condition, generateImplicitConversion(x.implicitConversion, value)));
+ if (condition instanceof JBooleanLiteral) {
+ push(generateImplicitConversion(x.implicitConversion, value));
+ } else {
+ push(new JMultiExpression(info, condition,
+ generateImplicitConversion(x.implicitConversion, value)));
+ }
} else {
JExpression valueIfFalse = pop(x.valueIfFalse);
JExpression valueIfTrue = pop(x.valueIfTrue);
@@ -748,8 +753,10 @@
final int typeId = (implicitConversionCode & TypeIds.IMPLICIT_CONVERSION_MASK) >> 4;
JPrimitiveType primitiveType = getJType(typeId);
if (primitiveType != null) {
- convertedExpression = new JDynamicCastOperation(convertedExpression.getSourceInfo(),
- convertedExpression, primitiveType);
+ if (!primitiveType.isSameType(convertedExpression.getType())) {
+ convertedExpression = new JDynamicCastOperation(convertedExpression.getSourceInfo(),
+ convertedExpression, primitiveType);
+ }
if ((implicitConversionCode & TypeIds.BOXING) != 0) {
convertedExpression = TypeLegalizer.box(convertedExpression,
@@ -1503,7 +1510,7 @@
JMethodCall methodCall =
new JMethodCall(sourceInfo, instanceExpr, methodToCall.getEnclosingType(),
- methodToCall.getMethodIdWide(), methodToCall.getType(), isVirtualDispatch);
+ methodToCall.getMethodId(), isVirtualDispatch);
addArgToMethodCall(referenceExpression, argsOfLambdaMth, methodCall, firstParamIdx);
@@ -1559,7 +1566,7 @@
assert constructor instanceof JConstructor;
JNewInstance newInstance =
- new JNewInstance(sourceInfo, (JClassOrInterface) type, constructor.getMethodIdWide());
+ new JNewInstance(sourceInfo, (JClassOrInterface) type, constructor.getMethodId());
boolean isNestedType = referenceExpression.receiverType.isNestedType();
@@ -3138,18 +3145,22 @@
JMethod implMethod = getTypeMap().get(jdtBridgeMethod.targetMethod);
SourceInfo info = implMethod.getSourceInfo();
String[] paramNames = null;
+ int [] modifiers = null;
List<JParameter> implParams = implMethod.getParams();
if (jdtBridgeMethod.parameters != null) {
int paramCount = implParams.size();
assert paramCount == jdtBridgeMethod.parameters.length;
paramNames = new String[paramCount];
+ modifiers = new int[paramCount];
for (int i = 0; i < paramCount; ++i) {
paramNames[i] = implParams.get(i).getName();
+ modifiers[i] = JModifier.SYNTHETIC | JModifier.NAME_PRESENT;
}
}
// bridge methods should not be flagged as VARARGS
jdtBridgeMethod.modifiers &= ~JModifier.VARARGS;
- JMethod bridgeMethod = createSyntheticMethodFromBinding(info, jdtBridgeMethod, paramNames);
+ JMethod bridgeMethod =
+ createSyntheticMethodFromBinding(info, jdtBridgeMethod, paramNames, modifiers);
// We can't complete the bridge yet with annotations because target annotations may not be
// created yet, so lets delay their completion for the end the conversion from ecj model to
@@ -3598,7 +3609,7 @@
MethodBinding b = x.binding;
assert b.isConstructor();
JConstructor ctor = (JConstructor) getTypeMap().get(b);
- JMethodCall call = new JNewInstance(info, ctor.getEnclosingType(), ctor.getMethodIdWide());
+ JMethodCall call = new JNewInstance(info, ctor.getEnclosingType(), ctor.getMethodId());
JExpression qualExpr = pop(qualifier);
// Enums: hidden arguments for the name and id.
@@ -3792,10 +3803,49 @@
return result;
}
+ /**
+ * This class checks to make sure if the expression contains a unary plus. If so, we will
+ * signal simplify() to not use the constant that ECJ computed since it contains a bug. It will
+ * also assert that this bug exists. Should that assertion start failing, we know the bug is
+ * fixed and this extra check is not necessary.
+ *
+ * {@link "https://bugs.eclipse.org/bugs/show_bug.cgi?id=509590"}
+ */
+ private final class EcjBugChecker extends ASTVisitor {
+ private boolean hasEcjUnaryPosBug = false;
+ @Override
+ public void endVisit(UnaryExpression x, BlockScope b) {
+ int operator = ((x.bits & ASTNode.OperatorMASK) >> ASTNode.OperatorSHIFT);
+ // We don't take the constant result from ECJ if it involves a unary + and a non-literal.
+ if (operator == OperatorIds.PLUS && !(x.expression instanceof Literal)) {
+ hasEcjUnaryPosBug = true;
+ // We have an (+ (expression))
+ Constant outer = x.constant;
+ Constant inner = x.expression.constant;
+
+ // Since the + operator is no-op, the inner and the outer constant should be exactly the
+ // same. If not, the current version of ECJ has the mentioned bug.
+ @SuppressWarnings("unused")
+ boolean hasEcjUnaryPosBug = !outer.equals(inner);
+
+ // We are going to assume there is a bug in ECJ and work around it. If this fails,
+ // we know that the bug has been fixed.
+ // assert hasEcjUnaryPosBug; // STOPSHIP THIS IS REMOVE DUE TO BUG # 34758593
+ }
+ }
+ }
+
private JExpression simplify(JExpression result, Expression x) {
if (x.constant != null && x.constant != Constant.NotAConstant) {
- // Prefer JDT-computed constant value to the actual written expression.
- result = getConstant(result.getSourceInfo(), x.constant);
+ EcjBugChecker checker = new EcjBugChecker();
+ x.traverse(checker, (BlockScope) null);
+ if (checker.hasEcjUnaryPosBug) {
+ // Don't take the result from ECJ if there is a unary pos unless the bug has been fixed.
+ return result;
+ } else {
+ // Prefer JDT-computed constant value to the actual written expression.
+ result = getConstant(result.getSourceInfo(), x.constant);
+ }
} else if (x instanceof FieldReference) {
FieldBinding binding = ((FieldReference) x).binding;
Constant constant = binding.constant();
@@ -4462,12 +4512,15 @@
binding.getExactMethod(VALUE_OF, new TypeBinding[]{x.scope.getJavaLangString()},
curCud.scope);
assert valueOfBinding != null;
- createSyntheticMethodFromBinding(info, valueOfBinding, new String[]{"name"});
+ // valueOf method of an enum is implicitly declared, consequently, their parameters are
+ // implicitly declared.
+ createSyntheticMethodFromBinding(info, valueOfBinding, new String[] {"name"},
+ new int[] {JModifier.IMPLICIT | JModifier.NAME_PRESENT});
}
{
MethodBinding valuesBinding = binding.getExactMethod(VALUES, NO_TYPES, curCud.scope);
assert valuesBinding != null;
- createSyntheticMethodFromBinding(info, valuesBinding, null);
+ createSyntheticMethodFromBinding(info, valuesBinding, null, null);
}
}
@@ -4539,8 +4592,9 @@
@Nonnull
private JMethod createSyntheticMethodFromBinding(@Nonnull SourceInfo info,
- @Nonnull MethodBinding binding, @CheckForNull String[] paramNames)
- throws JTypeLookupException {
+ @Nonnull MethodBinding binding, @CheckForNull String[] paramNames,
+ @CheckForNull int[] paramModifier) throws JTypeLookupException {
+ assert paramNames == null || paramModifier == null || paramModifier.length == paramNames.length;
JMethod method = getTypeMap().get(binding);
method.setSourceInfo(info);
int i = 0;
@@ -4548,8 +4602,11 @@
param.setSourceInfo(info);
if (paramNames != null) {
param.setName(paramNames[i]);
- i++;
}
+ if (paramModifier != null) {
+ param.setModifier(paramModifier[i]);
+ }
+ i++;
}
method.setBody(new JMethodBody(info, new JBlock(info)));
return method;
@@ -4593,8 +4650,8 @@
JMethodIdWide methodId = targetMethod.getMethodIdWide();
assert methodId.getKind() == MethodKind.STATIC || instance != null;
- JMethodCall call = new JMethodCall(info, instance,
- receiverType, methodId, targetMethod.getType(), methodId.canBeVirtual());
+ JMethodCall call = new JMethodCall(info, instance, receiverType, targetMethod.getMethodId(),
+ methodId.canBeVirtual());
return call;
}
@@ -4604,8 +4661,7 @@
@Nonnull JDefinedClassOrInterface receiverType,
@Nonnull JMethod targetMethod) {
- JMethodCall call = new JMethodCall(info, instance,
- receiverType, targetMethod.getMethodIdWide(), targetMethod.getType(),
+ JMethodCall call = new JMethodCall(info, instance, receiverType, targetMethod.getMethodId(),
false /* isVirtualDispatch */);
return call;
}
diff --git a/jack/src/com/android/jack/ir/impl/ReferenceMapper.java b/jack/src/com/android/jack/ir/impl/ReferenceMapper.java
index 169de64..0f12f12 100644
--- a/jack/src/com/android/jack/ir/impl/ReferenceMapper.java
+++ b/jack/src/com/android/jack/ir/impl/ReferenceMapper.java
@@ -111,6 +111,12 @@
@Nonnull
private final SourceInfoFactory sourceInfoFactory;
+ @CheckForNull
+ private ReferenceBinding ecjJlo = null;
+
+ @CheckForNull
+ private MethodBinding ecjJloCloneMth = null;
+
public ReferenceMapper(@Nonnull JNodeLookup lookup,
@Nonnull LookupEnvironment lookupEnvironment, @Nonnull SourceInfoFactory sourceInfoFactory) {
this.lookup = lookup;
@@ -159,8 +165,28 @@
return field;
}
+ private boolean isCloneOfArray(@Nonnull MethodBinding binding) {
+ if (ecjJlo == null) {
+ ecjJlo = lookupEnvironment.getType(TypeConstants.JAVA_LANG_OBJECT);
+ assert ecjJlo != null;
+ MethodBinding[] methods = ecjJlo.getMethods("clone".toCharArray());
+ assert methods.length == 1;
+ ecjJloCloneMth = methods[0];
+ }
+
+ return binding.declaringClass.equals(ecjJlo) && new String(binding.selector).equals("clone")
+ && binding.returnType.isArrayType();
+ }
+
@Nonnull
public JMethod get(@Nonnull MethodBinding binding) throws JTypeLookupException {
+ if (isCloneOfArray(binding)) {
+ // ECJ has replaced the clone prototype "jlo clone()" by "int[] clone()", thus replace the
+ // binding by the binding of clone from jlo to be able to lookup the method.
+ binding = ecjJloCloneMth;
+ assert binding != null;
+ }
+
binding = binding.original();
SignatureKey key = new SignatureKey(binding);
JMethod method = methods.get(key);
@@ -253,14 +279,16 @@
// Enums have hidden arguments for name and value
createParameter(info, method, "enum$name",
lookupEnvironment.getType(TypeConstants.JAVA_LANG_STRING),
- JModifier.FINAL | JModifier.SYNTHETIC);
+ JModifier.SYNTHETIC | JModifier.NAME_PRESENT);
createParameter(info, method, "enum$ordinal", TypeBinding.INT,
- JModifier.FINAL | JModifier.SYNTHETIC);
+ JModifier.SYNTHETIC | JModifier.NAME_PRESENT);
}
// add synthetic args for outer this
if (isNested) {
NestedTypeBinding nestedBinding = (NestedTypeBinding) declaringClass;
- createParameters(nestedBinding.enclosingInstances, info, method, alreadyNamedVariables);
+ createParameters(nestedBinding.enclosingInstances, info, method, alreadyNamedVariables,
+ /* forceToImplicit= */ !nestedBinding.isAnonymousType()
+ || !nestedBinding.superclass().isLocalType());
}
} else {
JType returnType = get(b.returnType);
@@ -292,7 +320,8 @@
// add synthetic args for locals
NestedTypeBinding nestedBinding = (NestedTypeBinding) declaringClass;
// add synthetic args for outer this and locals
- createParameters(nestedBinding.outerLocalVariables, info, method, alreadyNamedVariables);
+ createParameters(nestedBinding.outerLocalVariables, info, method, alreadyNamedVariables,
+ /* forceToImplicit= */ false);
}
}
@@ -338,7 +367,8 @@
private void createParameters(@CheckForNull SyntheticArgumentBinding[] sab,
@Nonnull SourceInfo info, @Nonnull JMethod method,
- @Nonnull Set<String> alreadyNamedVariables) {
+ @Nonnull Set<String> alreadyNamedVariables,
+ boolean forceToImplicit) {
if (sab != null) {
for (int i = 0; i < sab.length; ++i) {
SyntheticArgumentBinding arg = sab[i];
@@ -346,7 +376,9 @@
if (alreadyNamedVariables.contains(argName)) {
argName += "_" + i;
}
- createParameter(info, method, argName, arg.type, getModifier(arg));
+ createParameter(info, method, argName, arg.type,
+ getFinalModifier(arg) | (forceToImplicit ? JModifier.IMPLICIT : JModifier.SYNTHETIC)
+ | JModifier.NAME_PRESENT);
alreadyNamedVariables.add(argName);
}
}
@@ -358,12 +390,13 @@
for (Argument argument : x.arguments) {
SourceInfo info = makeSourceInfo(cuInfo, argument, sourceInfoFactory);
LocalVariableBinding binding = argument.binding;
- createParameter(info, method, intern(binding.name), binding.type, getModifier(binding));
+ createParameter(info, method, intern(binding.name), binding.type,
+ getFinalModifier(binding) | JModifier.NAME_PRESENT);
}
}
}
- private int getModifier(@Nonnull LocalVariableBinding lvBinding) {
+ private int getFinalModifier(@Nonnull LocalVariableBinding lvBinding) {
return lvBinding.isFinal() ? JModifier.FINAL : JModifier.DEFAULT;
}
diff --git a/jack/src/com/android/jack/jayce/JayceInternalWriter.java b/jack/src/com/android/jack/jayce/JayceInternalWriter.java
index b358891..dcf78a4 100644
--- a/jack/src/com/android/jack/jayce/JayceInternalWriter.java
+++ b/jack/src/com/android/jack/jayce/JayceInternalWriter.java
@@ -17,19 +17,20 @@
package com.android.jack.jayce;
import com.android.jack.ir.ast.JNode;
-
-import java.io.IOException;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotWriteException;
import javax.annotation.Nonnull;
/**
* Jayce internal writer.
*/
-public interface JayceInternalWriter {
+public interface JayceInternalWriter extends AutoCloseable {
- public void write(@Nonnull JNode jNode) throws IOException;
+ public void write(@Nonnull JNode jNode) throws CannotWriteException;
int getCurrentMinor();
- public void close() throws IOException;
+ @Override
+ public void close() throws CannotCloseException;
}
diff --git a/jack/src/com/android/jack/jayce/JayceWriterFactory.java b/jack/src/com/android/jack/jayce/JayceWriterFactory.java
index 9c34f95..3b76cee 100644
--- a/jack/src/com/android/jack/jayce/JayceWriterFactory.java
+++ b/jack/src/com/android/jack/jayce/JayceWriterFactory.java
@@ -19,6 +19,7 @@
import com.android.jack.jayce.v0004.io.JayceInternalWriterImpl;
import com.android.jack.library.FileType;
import com.android.jack.library.OutputJackLibrary;
+import com.android.sched.util.location.HasLocation;
import java.io.OutputStream;
@@ -33,8 +34,8 @@
@Nonnull
public static JayceInternalWriter get(@Nonnull OutputJackLibrary outputJackLibrary,
- @Nonnull OutputStream out) {
- JayceInternalWriterImpl jayceWriter = new JayceInternalWriterImpl(out);
+ @Nonnull OutputStream out, @Nonnull HasLocation locationProvider) {
+ JayceInternalWriterImpl jayceWriter = new JayceInternalWriterImpl(out, locationProvider);
outputJackLibrary.putProperty(
outputJackLibrary.buildPropertyName(FileType.JAYCE, null /* suffix */),
diff --git a/jack/src/com/android/jack/jayce/v0002/NNode.java b/jack/src/com/android/jack/jayce/v0002/NNode.java
index c43b982..95b4349 100644
--- a/jack/src/com/android/jack/jayce/v0002/NNode.java
+++ b/jack/src/com/android/jack/jayce/v0002/NNode.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -45,8 +44,6 @@
public abstract Object exportAsJast(@Nonnull ExportSession exportSession)
throws JTypeLookupException, JMethodLookupException;
- public abstract void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException;
-
public abstract void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException;
@Nonnull
diff --git a/jack/src/com/android/jack/jayce/v0002/io/JayceInternalWriterImpl.java b/jack/src/com/android/jack/jayce/v0002/io/JayceInternalWriterImpl.java
deleted file mode 100644
index d961122..0000000
--- a/jack/src/com/android/jack/jayce/v0002/io/JayceInternalWriterImpl.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.jayce.v0002.io;
-
-import com.android.jack.JackEventType;
-import com.android.jack.ir.ast.FieldKind;
-import com.android.jack.ir.ast.JMethodCall.DispatchKind;
-import com.android.jack.ir.ast.JNode;
-import com.android.jack.ir.ast.JRetentionPolicy;
-import com.android.jack.ir.ast.MethodKind;
-import com.android.jack.jayce.JayceInternalWriter;
-import com.android.jack.jayce.v0002.NNode;
-import com.android.jack.jayce.v0002.NodeFactory;
-import com.android.jack.jayce.v0002.Version;
-import com.android.jack.jayce.v0002.nodes.HasCatchBlockIds;
-import com.android.jack.jayce.v0002.nodes.HasSourceInfo;
-import com.android.jack.jayce.v0002.nodes.NMethod;
-import com.android.jack.jayce.v0002.nodes.NMethodCall.ReceiverKind;
-import com.android.jack.jayce.v0002.nodes.NSourceInfo;
-import com.android.jack.jayce.v0002.util.DispatchKindIdHelper;
-import com.android.jack.jayce.v0002.util.FieldRefKindIdHelper;
-import com.android.jack.jayce.v0002.util.MethodKindIdHelper;
-import com.android.jack.jayce.v0002.util.ReceiverKindIdHelper;
-import com.android.jack.jayce.v0002.util.RetentionPolicyIdHelper;
-import com.android.sched.util.log.Event;
-import com.android.sched.util.log.Tracer;
-import com.android.sched.util.log.TracerFactory;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Jayce internal writer implementation.
- */
-public class JayceInternalWriterImpl implements JayceInternalWriter {
-
- @Nonnull
- private final Tracer tracer = TracerFactory.getTracer();
-
- @Nonnull
- private final JayceOutputStream out;
-
- @CheckForNull
- private String currentFileName;
-
- @Nonnegative
- private int currentLineNumber;
-
- @Nonnull
- private final List<String> currentCatchBlockList = new ArrayList<String>();
-
- public JayceInternalWriterImpl(@Nonnull OutputStream out) {
- this.out = new JayceOutputStream(out);
- }
-
- public void writeNode(@CheckForNull NNode node) throws IOException {
- if (node == null) {
- writeNull();
- } else {
- writeSourceInfoBegin(node);
- writeCatchBlockIds(node);
- writeToken(node.getToken());
- writeOpen();
- node.writeContent(this);
- writeSourceInfoEnd(node);
- assert !(node instanceof NMethod) || currentCatchBlockList.isEmpty();
- writeClose();
- }
- }
-
- private void writeSourceInfoBegin(@Nonnull NNode node) throws IOException {
- if (node instanceof HasSourceInfo) {
- NSourceInfo sourceInfo = ((HasSourceInfo) node).getSourceInfos();
- writeFileNameIfDifferentFromCurrent(sourceInfo.fileName);
- writeLineIfDifferentFromCurrent(sourceInfo.startLine);
- }
- }
-
- private void writeSourceInfoEnd(@Nonnull NNode node) throws IOException {
- if (node instanceof HasSourceInfo) {
- writeLineIfDifferentFromCurrent(
- ((HasSourceInfo) node).getSourceInfos().endLine);
- }
- }
-
- public void writeIds(@Nonnull List<String> list) throws IOException {
- writeOpen();
-
- writeTrimmedInt(list.size());
-
- for (String id : list) {
- writeId(id);
- }
-
- writeClose();
- }
-
- public void writeCatchBlockIds(@CheckForNull NNode node) throws IOException {
- if (node instanceof HasCatchBlockIds) {
- List<String> list = ((HasCatchBlockIds) node).getCatchBlockIds();
- List<String> removedIds = new ArrayList<String>(currentCatchBlockList.size());
- List<String> addedIds = new ArrayList<String>(list.size());
-
- for (String s : currentCatchBlockList) {
- removedIds.add(s);
- }
- for (String s : list) {
- addedIds.add(s);
- }
-
- // intersection(current, list)
- currentCatchBlockList.retainAll(list);
- // current \ intersection(current, list)
- removedIds.removeAll(currentCatchBlockList);
- // list \ intersection(current, list)
- addedIds.removeAll(currentCatchBlockList);
-
- int addedIdsSize = addedIds.size();
- int removedIdsSize = removedIds.size();
-
- if (addedIdsSize > 0) {
- writeOpenAddCatchBlockIds();
- writeInt(addedIdsSize);
- for (int i = 0; i < addedIdsSize; i++) {
- writeString(addedIds.get(i));
- }
- writeCloseCatchBlockIds();
- }
-
- if (removedIdsSize > 0) {
- writeOpenRemoveCatchBlockIds();
- writeInt(removedIdsSize);
- for (int i = 0; i < removedIdsSize; i++) {
- writeString(removedIds.get(i));
- }
- writeCloseCatchBlockIds();
- }
- currentCatchBlockList.addAll(addedIds);
- }
- }
-
- public void writeNodes(@Nonnull Collection<? extends NNode> nodes) throws IOException {
- writeOpen();
-
- writeTrimmedInt(nodes.size());
-
- for (Iterator<? extends NNode> iterator = nodes.iterator(); iterator.hasNext();) {
- writeNode(iterator.next());
- }
-
- writeClose();
- }
-
- public void writeInt(int value) throws IOException {
- writeTrimmedInt(value);
- writeSpace();
- }
-
- private void writeTrimmedInt(int value) throws IOException {
- out.writeInt(value);
- }
-
- public void writeBoolean(boolean value) throws IOException {
- out.writeBoolean(value);
- }
-
- public void writeLong(long value) throws IOException {
- writeTrimmedLong(value);
- writeSpace();
- }
-
- private void writeTrimmedLong(long value) throws IOException {
- out.writeLong(value);
- }
-
- public void writeByte(byte value) throws IOException {
- out.writeByte(value);
- writeSpace();
- }
-
- public void writeShort(short value) throws IOException {
- out.writeShort(value);
- writeSpace();
- }
-
- public void writeChar(char value) throws IOException {
- out.writeChar(value);
- writeSpace();
- }
-
- public void writeFloat(float value) throws IOException {
- writeTrimmedInt(Float.floatToRawIntBits(value));
- writeSpace();
- }
-
- public void writeDouble(double value) throws IOException {
- writeTrimmedLong(Double.doubleToRawLongBits(value));
- writeSpace();
- }
-
- public void writeId(@CheckForNull String id) throws IOException {
- writeString(id);
- }
-
- public void writeRetentionPolicyEnum(@Nonnull JRetentionPolicy enumValue) throws IOException {
- writeByte(RetentionPolicyIdHelper.getId(enumValue));
- }
-
- public void writeFieldRefKindEnum(@Nonnull FieldKind enumValue) throws IOException {
- writeByte(FieldRefKindIdHelper.getId(enumValue));
- }
-
- public void writeMethodKindEnum(@Nonnull MethodKind enumValue) throws IOException {
- writeByte(MethodKindIdHelper.getId(enumValue));
- }
-
- public void writeReceiverKindEnum(@Nonnull ReceiverKind enumValue) throws IOException {
- writeByte(ReceiverKindIdHelper.getId(enumValue));
- }
-
- public void writeDispatchKindEnum(@Nonnull DispatchKind enumValue) throws IOException {
- writeByte(DispatchKindIdHelper.getId(enumValue));
- }
-
- public void writeString(@CheckForNull String string) throws IOException {
- out.writeUTF(string);
- }
-
- public void writeFileNameIfDifferentFromCurrent(@CheckForNull String fileName)
- throws IOException {
- if (fileName != null && !fileName.equals(currentFileName)) {
- writeCurrentFileName(fileName);
- }
- // Assume that elements with unknown debug infos are in same file.
- }
-
- public void writeCurrentFileName(@Nonnull String fileName) throws IOException {
- writeOpenFileName();
- writeString(fileName);
- writeCloseFileName();
- currentFileName = fileName;
- }
-
- public void writeLineIfDifferentFromCurrent(@Nonnegative int lineNumber)
- throws IOException {
- if (lineNumber != currentLineNumber) {
- writeCurrentLine(lineNumber);
- }
- }
-
- public void writeCurrentLine(@Nonnegative int lineNumber)
- throws IOException {
- writeOpenLineInfo();
- writeTrimmedInt(lineNumber);
- writeCloseLineInfo();
- currentLineNumber = lineNumber;
- }
-
- private void writeNull() throws IOException {
- writeToken(Token.NULL);
- writeSpace();
- }
-
- @SuppressWarnings("unused")
- private void writeSpace() throws IOException{
- }
-
- private void writeToken(@Nonnull Token token) throws IOException {
- out.writeByte(token.ordinal());
- }
-
- @SuppressWarnings("unused")
- private void writeOpen() throws IOException{
- }
-
- private void writeClose() throws IOException {
- writeToken(Token.RPARENTHESIS);
- }
-
- private void writeOpenFileName() throws IOException {
- writeToken(Token.SHARP);
- }
-
- @SuppressWarnings("unused")
- private void writeCloseFileName() throws IOException{
- }
-
- private void writeOpenLineInfo() throws IOException {
- writeToken(Token.LBRACKET);
- }
-
- @SuppressWarnings("unused")
- private void writeCloseLineInfo() throws IOException{
- }
-
- private void writeOpenAddCatchBlockIds() throws IOException {
- writeToken(Token.LCURLY_ADD);
- }
-
- private void writeOpenRemoveCatchBlockIds() throws IOException {
- writeToken(Token.LCURLY_REMOVE);
- }
-
- @SuppressWarnings("unused")
- private void writeCloseCatchBlockIds() throws IOException{
- }
-
- @Override
- public void write(@Nonnull JNode jNode) throws IOException {
- try (Event eventWriting = tracer.open(JackEventType.NNODE_WRITING)) {
- ImportHelper importHelper = new ImportHelper(new NodeFactory());
- NNode nNode;
- try (Event eventConvert = tracer.open(JackEventType.JNODE_TO_NNODE_CONVERSION)) {
- nNode = importHelper.load(jNode);
- }
-
- writeNode(nNode);
- }
- }
-
- @Override
- public int getCurrentMinor() {
- return Version.CURRENT_MINOR;
- }
-
- @Override
- public void close() throws IOException {
- out.close();
- }
-}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAbsentArrayDimension.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAbsentArrayDimension.java
index fc49090..5ba7a7d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAbsentArrayDimension.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAbsentArrayDimension.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -54,11 +53,6 @@
@SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- }
-
- @SuppressWarnings("unused")
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAddOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAddOperation.java
index 86c6632..f658ae7 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAddOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAddOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAlloc.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAlloc.java
index 450dddc..3d3aa57 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAlloc.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAlloc.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(instanceType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instanceType = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAndOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAndOperation.java
index 63376e9..0c52eb2 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAndOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotation.java
index cb9cc4b..0307143 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotation.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -83,14 +82,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert retentionPolicy != null;
- out.writeRetentionPolicyEnum(retentionPolicy);
- out.writeId(annotationType);
- out.writeNodes(elements);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
retentionPolicy = in.readRetentionPolicyEnum();
annotationType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationMethod.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationMethod.java
index 5df6e6a..2ea7623 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationMethod.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationMethod.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -102,17 +101,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert annotations != null;
- out.writeId(name);
- out.writeId(returnType);
- out.writeInt(modifier);
- out.writeNodes(annotations);
- out.writeNode(defaultValue);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
name = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java
index 80b4ed5..0b95057 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAnnotationType.java
@@ -29,7 +29,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.util.NamingTools;
@@ -121,21 +120,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert retentionPolicy != null;
- out.writeRetentionPolicyEnum(retentionPolicy);
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
retentionPolicy = in.readRetentionPolicyEnum();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLength.java b/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLength.java
index 0986ea5..4b467e8 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLength.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLength.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -66,11 +65,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(instance);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instance = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLiteral.java
index a46fd01..c7ca67b 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NArrayLiteral.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -71,11 +70,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(values);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
values = in.readNodes(NLiteral.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NArrayRef.java b/jack/src/com/android/jack/jayce/v0002/nodes/NArrayRef.java
index 5a887ef..29b4319 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NArrayRef.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NArrayRef.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -72,12 +71,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(instance);
- out.writeNode(index);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instance = in.readNode(NExpression.class);
index = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgAddOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgAddOperation.java
index 3626421..712ffd9 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgAddOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgAddOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitAndOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitAndOperation.java
index 7b3f381..35da5f4 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitAndOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitOrOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitOrOperation.java
index e3d82ef..209ff3b 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitOrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitXorOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitXorOperation.java
index ab2f788..19d265f 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitXorOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgBitXorOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgConcatOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgConcatOperation.java
index 11ff9d1..50264fe 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgConcatOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgConcatOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgDivOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgDivOperation.java
index 5826b3b..4b29df3 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgDivOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgDivOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgModOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgModOperation.java
index f34da1f..9107608 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgModOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgModOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgMulOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgMulOperation.java
index 7551140..8d8c22c 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgMulOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgMulOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgOperation.java
index 2371a40..3e0524c 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShlOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShlOperation.java
index c328902..4c35056 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShlOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShlOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShrOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShrOperation.java
index 82ee7d4..2d61062 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShruOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShruOperation.java
index 1768a4e..c2a168f 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShruOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgShruOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgSubOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgSubOperation.java
index b3d5bf0..feae2ac 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAsgSubOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAsgSubOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NAssertStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NAssertStatement.java
index 2c7a4a3..f04e1e8 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NAssertStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NAssertStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -84,12 +83,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(testExpression);
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
testExpression = in.readNode(NExpression.class);
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NBitAndOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NBitAndOperation.java
index d4dc894..41387b4 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NBitAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NBitAndOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NBitOrOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NBitOrOperation.java
index 531696e..f7ac85a 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NBitOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NBitOrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NBitXorOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NBitXorOperation.java
index ad7b7dd..1007602 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NBitXorOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NBitXorOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NBlock.java b/jack/src/com/android/jack/jayce/v0002/nodes/NBlock.java
index 83c8de0..18e754d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NBlock.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NBlock.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,11 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(statements);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
statements = in.readNodes(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NBooleanLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NBooleanLiteral.java
index ac272be..9722a24 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NBooleanLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NBooleanLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeBoolean(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readBoolean();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NBreakStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NBreakStatement.java
index 4e15d9e..91ec822 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NBreakStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NBreakStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -71,11 +70,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(label);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
label = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NByteLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NByteLiteral.java
index 3796a36..1377c19 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NByteLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NByteLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeByte(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readByte();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NCaseStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NCaseStatement.java
index ab7333d..2b965e8 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NCaseStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NCaseStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -80,12 +79,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
expr = in.readNode(NLiteral.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NCatchBlock.java b/jack/src/com/android/jack/jayce/v0002/nodes/NCatchBlock.java
index 39e7ed8..b6cd636 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NCatchBlock.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NCatchBlock.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -103,14 +102,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeIds(catchTypes);
- out.writeNode(catchVar);
- out.writeNodes(statements);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
catchTypes = in.readIds();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NCharLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NCharLiteral.java
index 8c6e1ff..2c59cd2 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NCharLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NCharLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeChar(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readChar();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NClassLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NClassLiteral.java
index 6df0c8c..6fde647 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NClassLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NClassLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -64,11 +63,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(refType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
refType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java
index 1ed2c94..e00f4f8 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NClassType.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
import com.android.jack.util.NamingTools;
@@ -169,23 +168,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeId(superClass);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeId(enclosingMethodClass);
- out.writeId(enclosingMethod);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
-
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NConcatOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NConcatOperation.java
index ae0c812..cbce509 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NConcatOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NConcatOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -72,12 +71,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NConditionalExpression.java b/jack/src/com/android/jack/jayce/v0002/nodes/NConditionalExpression.java
index 56ffe67..947d6a3 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NConditionalExpression.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NConditionalExpression.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,13 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(ifTest);
- out.writeNode(thenExpr);
- out.writeNode(elseExpr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
ifTest = in.readNode(NExpression.class);
thenExpr = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NConstructor.java b/jack/src/com/android/jack/jayce/v0002/nodes/NConstructor.java
index 199ce84..cb08009 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NConstructor.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NConstructor.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -91,16 +90,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert annotations != null;
- out.writeNodes(getParameters());
- out.writeInt(modifier);
- out.writeNodes(annotations);
- out.writeNode(body);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
setParameters(in.readNodes(NParameter.class));
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NContinueStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NContinueStatement.java
index 8102924..99239b0 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NContinueStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NContinueStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -73,11 +72,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(label);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
label = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NDivOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NDivOperation.java
index 23a8438..ee5e7dc 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NDivOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NDivOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NDoStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NDoStatement.java
index ae9997b..cde3fd5 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NDoStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NDoStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,12 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(testExpression);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
testExpression = in.readNode(NExpression.class);
body = in.readNode(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NDoubleLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NDoubleLiteral.java
index b9292d5..8efb455 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NDoubleLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NDoubleLiteral.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -60,14 +59,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeDouble(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readDouble();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NDynamicCastOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NDynamicCastOperation.java
index ae8010c..3797af4 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NDynamicCastOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NDynamicCastOperation.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -70,12 +69,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(castType);
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
castType = in.readId();
expr = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumField.java b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumField.java
index 034c45c..f7757b0 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumField.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumField.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -92,17 +91,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNode(initialValue);
- out.writeInt(ordinal);
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
modifiers = in.readInt();
type = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumLiteral.java
index e5a222b..3220cfa 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumLiteral.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JLookup;
@@ -76,12 +75,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(enumFieldDeclaringType);
- out.writeId(enumFieldName);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
enumFieldDeclaringType = in.readId();
enumFieldName = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java
index e6ce97e..15ceeba 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NEnumType.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
import com.android.jack.util.NamingTools;
@@ -138,23 +137,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeId(superClass);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeId(enclosingMethodClass);
- out.writeId(enclosingMethod);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
-
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NEqOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NEqOperation.java
index dfcd198..2e7e17c 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NEqOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NEqOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NExceptionRuntimeValue.java b/jack/src/com/android/jack/jayce/v0002/nodes/NExceptionRuntimeValue.java
index 6d45802..7624985 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NExceptionRuntimeValue.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NExceptionRuntimeValue.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(catchedType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
catchedType = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NExpressionStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NExpressionStatement.java
index b4197ce..f378e53 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NExpressionStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NExpressionStatement.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expression);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expression = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NField.java b/jack/src/com/android/jack/jayce/v0002/nodes/NField.java
index 78bfc46..c7f0212 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NField.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NField.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -121,16 +120,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNode(initialValue);
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
modifiers = in.readInt();
type = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NFieldInitializer.java b/jack/src/com/android/jack/jayce/v0002/nodes/NFieldInitializer.java
index c0cebac..f0ea949 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NFieldInitializer.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NFieldInitializer.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -50,11 +49,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) {
- throw new UnsupportedOperationException();
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) {
throw new UnsupportedOperationException();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NFieldRef.java b/jack/src/com/android/jack/jayce/v0002/nodes/NFieldRef.java
index 38c0ef7..eb215e7 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NFieldRef.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NFieldRef.java
@@ -26,7 +26,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -90,16 +89,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert kind != null;
- out.writeId(field);
- out.writeId(fieldType);
- out.writeId(receiverType);
- out.writeFieldRefKindEnum(kind);
- out.writeNode(instance);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
field = in.readId();
fieldType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NFloatLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NFloatLiteral.java
index 742102b..a152053 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NFloatLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NFloatLiteral.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -60,14 +59,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeFloat(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readFloat();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NForStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NForStatement.java
index 5fc7c8c..a857fb3 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NForStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NForStatement.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -101,17 +100,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert initializers != null;
- assert increments != null;
-
- out.writeNodes(initializers);
- out.writeNode(testExpression);
- out.writeNodes(increments);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
initializers = in.readNodes(NStatement.class);
testExpression = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NGenericSignature.java b/jack/src/com/android/jack/jayce/v0002/nodes/NGenericSignature.java
index 2a4780e..3e4e056 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NGenericSignature.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NGenericSignature.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -53,11 +52,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(genericSignature);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
genericSignature = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NGoto.java b/jack/src/com/android/jack/jayce/v0002/nodes/NGoto.java
index 23848b0..a1cf0cd 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NGoto.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NGoto.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -73,11 +72,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(target);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
target = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NGtOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NGtOperation.java
index 15cce80..97c07cd 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NGtOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NGtOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NGteOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NGteOperation.java
index 043fc5d..916986d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NGteOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NGteOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NIfStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NIfStatement.java
index 7696473..0879b21 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NIfStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NIfStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -88,13 +87,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(ifExpression);
- out.writeNode(thenStatement);
- out.writeNode(elseStatement);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
ifExpression = in.readNode(NExpression.class);
thenStatement = in.readNode(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NInstanceOf.java b/jack/src/com/android/jack/jayce/v0002/nodes/NInstanceOf.java
index 57fbe54..273bb50 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NInstanceOf.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NInstanceOf.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -72,12 +71,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- out.writeId(testType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
testType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NIntLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NIntLiteral.java
index e7868d6..15b91a8 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NIntLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NIntLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readInt();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java b/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java
index da2b0ad..813095f 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NInterfaceType.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.util.NamingTools;
@@ -137,20 +136,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
-
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLabeledStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLabeledStatement.java
index 5c9ac36..1eef583 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLabeledStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLabeledStatement.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -88,13 +87,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(label);
- out.writeId(id);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
label = in.readString();
id = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLocal.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLocal.java
index 12a1b63..d85a059 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLocal.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLocal.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -100,16 +99,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNodes(annotationSet);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLocalRef.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLocalRef.java
index 0421ba0..22d8dd1 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLocalRef.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLocalRef.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(localId);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
localId = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLock.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLock.java
index df9e049..ad7f1f1 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLock.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLock.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lockExpr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lockExpr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLongLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLongLiteral.java
index 617639c..d9fc62d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLongLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLongLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeLong(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readLong();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLtOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLtOperation.java
index 74a55cc..d01e172 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLtOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLtOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NLteOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NLteOperation.java
index fcadb49..ebe14e2 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NLteOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NLteOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NMethod.java b/jack/src/com/android/jack/jayce/v0002/nodes/NMethod.java
index d12008f..6113ad5 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NMethod.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NMethod.java
@@ -36,7 +36,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -163,19 +162,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert methodKind != null;
- out.writeId(name);
- out.writeId(returnType);
- out.writeNodes(getParameters());
- out.writeMethodKindEnum(methodKind);
- out.writeInt(modifier);
- out.writeNodes(annotations);
- out.writeNode(body);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
name = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NMethodBody.java b/jack/src/com/android/jack/jayce/v0002/nodes/NMethodBody.java
index 94d0887..38dfbea 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NMethodBody.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NMethodBody.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,12 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(locals);
- out.writeNode(block);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
locals = in.readNodes(NLocal.class);
block = in.readNode(NBlock.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NMethodCall.java b/jack/src/com/android/jack/jayce/v0002/nodes/NMethodCall.java
index 0d129b2..3fdb403 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NMethodCall.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NMethodCall.java
@@ -21,7 +21,7 @@
import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JMethodCall.DispatchKind;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JTypeLookupException;
import com.android.jack.ir.ast.MethodKind;
@@ -29,7 +29,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -91,9 +90,9 @@
instance = (NExpression) loader.load(jMethodCall.getInstance());
receiverType = ImportHelper.getSignatureName(jMethodCall.getReceiverType());
receiverKind = getReceiverKind(jMethodCall);
- methodName = jMethodCall.getMethodId().getName();
- methodArgsType = ImportHelper.getMethodArgsSignature(jMethodCall.getMethodId());
- methodKind = jMethodCall.getMethodId().getKind();
+ methodName = jMethodCall.getMethodIdWide().getName();
+ methodArgsType = ImportHelper.getMethodArgsSignature(jMethodCall.getMethodIdWide());
+ methodKind = jMethodCall.getMethodIdWide().getKind();
returnType = ImportHelper.getSignatureName(jMethodCall.getType());
args = loader.load(NExpression.class, jMethodCall.getArgs());
dispatchKind = jMethodCall.getDispatchKind();
@@ -124,12 +123,12 @@
} else {
jReceiverType = exportSession.getLookup().getInterface(receiverType);
}
- JMethodIdWide methodId = jReceiverType.getOrCreateMethodIdWide(methodName,
- exportSession.getTypeListFromSignatureList(methodArgsType), methodKind);
JType jReturnType = exportSession.getLookup().getType(returnType);
+ JMethodId methodId = jReceiverType.getOrCreateMethodId(methodName,
+ exportSession.getTypeListFromSignatureList(methodArgsType), methodKind, jReturnType);
SourceInfo jSourceInfo = sourceInfo.exportAsJast(exportSession);
JMethodCall jMethodCall = new JMethodCall(jSourceInfo, jInstance, jReceiverType, methodId,
- jReturnType, dispatchKind == DispatchKind.VIRTUAL /* isVirtualDispatch */);
+ dispatchKind == DispatchKind.VIRTUAL /* isVirtualDispatch */);
for (NExpression arg : args) {
jMethodCall.addArg(arg.exportAsJast(exportSession));
}
@@ -137,26 +136,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert receiverType != null;
- assert receiverKind != null;
- assert methodName != null;
- assert methodKind != null;
- assert returnType != null;
- assert dispatchKind != null;
- assert sourceInfo != null;
- out.writeNode(instance);
- out.writeId(receiverType);
- out.writeReceiverKindEnum(receiverKind);
- out.writeId(methodName);
- out.writeIds(methodArgsType);
- out.writeMethodKindEnum(methodKind);
- out.writeId(returnType);
- out.writeNodes(args);
- out.writeDispatchKindEnum(dispatchKind);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instance = in.readNode(NExpression.class);
receiverType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NMethodLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NMethodLiteral.java
index 85cccd0..a40241a 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NMethodLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NMethodLiteral.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,12 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(method);
- out.writeId(methodEnclosingType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
method = in.readId();
methodEnclosingType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NModOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NModOperation.java
index d7309ae..77235dd 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NModOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NModOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NMulOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NMulOperation.java
index 4e2f3d4..4768d7d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NMulOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NMulOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NMultiExpression.java b/jack/src/com/android/jack/jayce/v0002/nodes/NMultiExpression.java
index fc263a5..889ea0e 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NMultiExpression.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NMultiExpression.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -71,11 +70,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(exprs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
exprs = in.readNodes(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NNameValuePair.java b/jack/src/com/android/jack/jayce/v0002/nodes/NNameValuePair.java
index 895f114..8e75e60 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NNameValuePair.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NNameValuePair.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -87,12 +86,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(name);
- out.writeNode(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
name = in.readString();
value = in.readNode(NLiteral.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NNativeMethodBody.java b/jack/src/com/android/jack/jayce/v0002/nodes/NNativeMethodBody.java
index 3909d02..3495320 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NNativeMethodBody.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NNativeMethodBody.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -57,12 +56,6 @@
@SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
-
- }
-
- @SuppressWarnings("unused")
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NNeqOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NNeqOperation.java
index 4b27f28..2b692fe 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NNeqOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NNeqOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NNewArray.java b/jack/src/com/android/jack/jayce/v0002/nodes/NNewArray.java
index f5ded7b..53dce14 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NNewArray.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NNewArray.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -88,13 +87,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(type);
- out.writeNodes(dims);
- out.writeNodes(initializers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
type = in.readId();
dims = in.readNodes(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NNewInstance.java b/jack/src/com/android/jack/jayce/v0002/nodes/NNewInstance.java
index cfe8952..d07d368 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NNewInstance.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NNewInstance.java
@@ -17,15 +17,15 @@
package com.android.jack.jayce.v0002.nodes;
import com.android.jack.ir.ast.JClassOrInterface;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewInstance;
+import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JTypeLookupException;
import com.android.jack.ir.ast.MethodKind;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -49,7 +49,7 @@
public void importFromJast(@Nonnull ImportHelper loader, @Nonnull Object node) {
JNewInstance jNewInstance = (JNewInstance) node;
receiverType = ImportHelper.getSignatureName(jNewInstance.getReceiverType());
- methodArgsType = ImportHelper.getMethodArgsSignature(jNewInstance.getMethodId());
+ methodArgsType = ImportHelper.getMethodArgsSignature(jNewInstance.getMethodIdWide());
args = loader.load(NExpression.class, jNewInstance.getArgs());
sourceInfo = loader.load(jNewInstance.getSourceInfo());
}
@@ -67,9 +67,9 @@
assert methodArgsType != null;
assert args != null;
JClassOrInterface jReceiverType = exportSession.getLookup().getClass(receiverType);
- JMethodIdWide methodId = jReceiverType.getOrCreateMethodIdWide(INIT_NAME,
+ JMethodId methodId = jReceiverType.getOrCreateMethodId(INIT_NAME,
exportSession.getTypeListFromSignatureList(methodArgsType),
- MethodKind.INSTANCE_NON_VIRTUAL);
+ MethodKind.INSTANCE_NON_VIRTUAL, JPrimitiveTypeEnum.VOID.getType());
SourceInfo jSourceInfo = sourceInfo.exportAsJast(exportSession);
JNewInstance jNewInstance = new JNewInstance(jSourceInfo, jReceiverType, methodId);
for (NExpression arg : args) {
@@ -79,15 +79,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert instance == null;
- assert methodKind == null;
- out.writeId(receiverType);
- out.writeIds(methodArgsType);
- out.writeNodes(args);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
receiverType = in.readId();
methodArgsType = in.readIds();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NNullLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NNullLiteral.java
index 428396f..9803ff0 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NNullLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NNullLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -57,11 +56,6 @@
@SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- }
-
- @SuppressWarnings("unused")
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NOrOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NOrOperation.java
index a8820db..4f6c9b9 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NOrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NParameter.java b/jack/src/com/android/jack/jayce/v0002/nodes/NParameter.java
index 677c3d8..c69a48a 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NParameter.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NParameter.java
@@ -26,7 +26,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -114,16 +113,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NParameterRef.java b/jack/src/com/android/jack/jayce/v0002/nodes/NParameterRef.java
index 9c53533..d68d22c 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NParameterRef.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NParameterRef.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(localId);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
localId = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixDecOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixDecOperation.java
index d7cc927..d0761ce 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixDecOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixDecOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixIncOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixIncOperation.java
index 59e6c69..9b750cd 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixIncOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPostfixIncOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixBitNotOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixBitNotOperation.java
index 15dd882..dff4e86 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixBitNotOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixBitNotOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixDecOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixDecOperation.java
index 51d86c8..c7bbaa2 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixDecOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixDecOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixIncOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixIncOperation.java
index 72f2cb5..0207af6 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixIncOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixIncOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNegOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNegOperation.java
index 10633ec..0498b36 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNegOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNegOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNotOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNotOperation.java
index 246fe4e..8ce086c 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNotOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NPrefixNotOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NReinterpretCastOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NReinterpretCastOperation.java
index a07f316..1201f79 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NReinterpretCastOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NReinterpretCastOperation.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,12 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(castType);
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
castType = in.readId();
expr = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NReturnStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NReturnStatement.java
index db316d8..19628a9 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NReturnStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NReturnStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,11 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NShlOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NShlOperation.java
index ea4522f..2fb3033 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NShlOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NShlOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NShortLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NShortLiteral.java
index b736662..7114f6e 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NShortLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NShortLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeShort(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readShort();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NShrOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NShrOperation.java
index bf652ad..dcdec80 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NShrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NShrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NShruOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NShruOperation.java
index bf8eb97..bced6d0 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NShruOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NShruOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NSimpleName.java b/jack/src/com/android/jack/jayce/v0002/nodes/NSimpleName.java
index e8e779c..9014619 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NSimpleName.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NSimpleName.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -54,11 +53,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(simpleName);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
simpleName = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NStringLiteral.java b/jack/src/com/android/jack/jayce/v0002/nodes/NStringLiteral.java
index a7464e0..e144787 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NStringLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NStringLiteral.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -61,11 +60,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readString();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NSubOperation.java b/jack/src/com/android/jack/jayce/v0002/nodes/NSubOperation.java
index 5266807..08ddc95 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NSubOperation.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NSubOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NSwitchStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NSwitchStatement.java
index fb42b9a..4cb863d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NSwitchStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NSwitchStatement.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -98,13 +97,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- out.writeIds(cases);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
cases = in.readIds();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NSynchronizedBlock.java b/jack/src/com/android/jack/jayce/v0002/nodes/NSynchronizedBlock.java
index 88e3461..949ada0 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NSynchronizedBlock.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NSynchronizedBlock.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -86,12 +85,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lockExpr);
- out.writeNode(synchronizedBlock);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lockExpr = in.readNode(NExpression.class);
synchronizedBlock = in.readNode(NBlock.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NThisRef.java b/jack/src/com/android/jack/jayce/v0002/nodes/NThisRef.java
index 9c780a5..31c5f9d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NThisRef.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NThisRef.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(type);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
type = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NThisRefTypeInfo.java b/jack/src/com/android/jack/jayce/v0002/nodes/NThisRefTypeInfo.java
index b8bc490..a4a00de 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NThisRefTypeInfo.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NThisRefTypeInfo.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -56,11 +55,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(genericSignature);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
genericSignature = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NThrowStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NThrowStatement.java
index 921d034..bc2d10d 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NThrowStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NThrowStatement.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NThrownExceptionMarker.java b/jack/src/com/android/jack/jayce/v0002/nodes/NThrownExceptionMarker.java
index 8786fee..87a1f55 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NThrownExceptionMarker.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NThrownExceptionMarker.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import java.io.IOException;
@@ -61,11 +60,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeIds(thrownExceptions);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
thrownExceptions = in.readIds();
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NTryStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NTryStatement.java
index be93e4a..f52bd2e 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NTryStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NTryStatement.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -96,14 +95,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(resourcesDeclaration);
- out.writeNode(tryBlock);
- out.writeNodes(catchBlocks);
- out.writeNode(finallyBlock);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
resourcesDeclaration = in.readNodes(NStatement.class);
tryBlock = in.readNode(NBlock.class);
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NUnlock.java b/jack/src/com/android/jack/jayce/v0002/nodes/NUnlock.java
index 2232e9c..c23b2b8 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NUnlock.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NUnlock.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lockExpr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lockExpr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NWhileStatement.java b/jack/src/com/android/jack/jayce/v0002/nodes/NWhileStatement.java
index 3e92825..cce2f1f 100644
--- a/jack/src/com/android/jack/jayce/v0002/nodes/NWhileStatement.java
+++ b/jack/src/com/android/jack/jayce/v0002/nodes/NWhileStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0002.io.ExportSession;
import com.android.jack.jayce.v0002.io.ImportHelper;
import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0002.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,12 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(testExpression);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
testExpression = in.readNode(NExpression.class);
body = in.readNode(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/NNode.java b/jack/src/com/android/jack/jayce/v0003/NNode.java
index 4a3a5dc..0077b15 100644
--- a/jack/src/com/android/jack/jayce/v0003/NNode.java
+++ b/jack/src/com/android/jack/jayce/v0003/NNode.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -45,8 +44,6 @@
public abstract Object exportAsJast(@Nonnull ExportSession exportSession)
throws JTypeLookupException, JMethodLookupException;
- public abstract void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException;
-
public abstract void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException;
@Nonnull
diff --git a/jack/src/com/android/jack/jayce/v0003/io/JayceInternalWriterImpl.java b/jack/src/com/android/jack/jayce/v0003/io/JayceInternalWriterImpl.java
deleted file mode 100644
index 3760ec5..0000000
--- a/jack/src/com/android/jack/jayce/v0003/io/JayceInternalWriterImpl.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
-* Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.jayce.v0003.io;
-
-import com.android.jack.JackEventType;
-import com.android.jack.ir.ast.FieldKind;
-import com.android.jack.ir.ast.JMethodCall.DispatchKind;
-import com.android.jack.ir.ast.JNode;
-import com.android.jack.ir.ast.JRetentionPolicy;
-import com.android.jack.ir.ast.MethodKind;
-import com.android.jack.jayce.JayceInternalWriter;
-import com.android.jack.jayce.v0003.NNode;
-import com.android.jack.jayce.v0003.NodeFactory;
-import com.android.jack.jayce.v0003.Version;
-import com.android.jack.jayce.v0003.nodes.HasCatchBlockIds;
-import com.android.jack.jayce.v0003.nodes.HasSourceInfo;
-import com.android.jack.jayce.v0003.nodes.NMethod;
-import com.android.jack.jayce.v0003.nodes.NMethodCall.ReceiverKind;
-import com.android.jack.jayce.v0003.nodes.NSourceInfo;
-import com.android.jack.jayce.v0003.util.DispatchKindIdHelper;
-import com.android.jack.jayce.v0003.util.FieldRefKindIdHelper;
-import com.android.jack.jayce.v0003.util.MethodKindIdHelper;
-import com.android.jack.jayce.v0003.util.ReceiverKindIdHelper;
-import com.android.jack.jayce.v0003.util.RetentionPolicyIdHelper;
-import com.android.sched.util.log.Event;
-import com.android.sched.util.log.Tracer;
-import com.android.sched.util.log.TracerFactory;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnegative;
-import javax.annotation.Nonnull;
-
-/**
- * Jayce internal writer implementation.
- */
-public class JayceInternalWriterImpl implements JayceInternalWriter {
-
- @Nonnull
- private final Tracer tracer = TracerFactory.getTracer();
-
- @Nonnull
- private final JayceOutputStream out;
-
- @CheckForNull
- private String currentFileName;
-
- @Nonnegative
- private int currentLineNumber;
-
- @Nonnull
- private final List<String> currentCatchBlockList = new ArrayList<String>();
-
- public JayceInternalWriterImpl(@Nonnull OutputStream out) {
- this.out = new JayceOutputStream(out);
- }
-
- public void writeNode(@CheckForNull NNode node) throws IOException {
- if (node == null) {
- writeNull();
- } else {
- writeSourceInfoBegin(node);
- writeCatchBlockIds(node);
- writeToken(node.getToken());
- writeOpen();
- node.writeContent(this);
- writeSourceInfoEnd(node);
- assert !(node instanceof NMethod) || currentCatchBlockList.isEmpty();
- writeClose();
- }
- }
-
- private void writeSourceInfoBegin(@Nonnull NNode node) throws IOException {
- if (node instanceof HasSourceInfo) {
- NSourceInfo sourceInfo = ((HasSourceInfo) node).getSourceInfos();
- writeFileNameIfDifferentFromCurrent(sourceInfo.fileName);
- writeLineIfDifferentFromCurrent(sourceInfo.startLine);
- }
- }
-
- private void writeSourceInfoEnd(@Nonnull NNode node) throws IOException {
- if (node instanceof HasSourceInfo) {
- writeLineIfDifferentFromCurrent(
- ((HasSourceInfo) node).getSourceInfos().endLine);
- }
- }
-
- public void writeIds(@Nonnull List<String> list) throws IOException {
- writeOpen();
-
- writeTrimmedInt(list.size());
-
- for (String id : list) {
- writeId(id);
- }
-
- writeClose();
- }
-
- public void writeCatchBlockIds(@CheckForNull NNode node) throws IOException {
- if (node instanceof HasCatchBlockIds) {
- List<String> list = ((HasCatchBlockIds) node).getCatchBlockIds();
- List<String> removedIds = new ArrayList<String>(currentCatchBlockList.size());
- List<String> addedIds = new ArrayList<String>(list.size());
-
- for (String s : currentCatchBlockList) {
- removedIds.add(s);
- }
- for (String s : list) {
- addedIds.add(s);
- }
-
- // intersection(current, list)
- currentCatchBlockList.retainAll(list);
- // current \ intersection(current, list)
- removedIds.removeAll(currentCatchBlockList);
- // list \ intersection(current, list)
- addedIds.removeAll(currentCatchBlockList);
-
- int addedIdsSize = addedIds.size();
- int removedIdsSize = removedIds.size();
-
- if (addedIdsSize > 0) {
- writeOpenAddCatchBlockIds();
- writeInt(addedIdsSize);
- for (int i = 0; i < addedIdsSize; i++) {
- writeString(addedIds.get(i));
- }
- writeCloseCatchBlockIds();
- }
-
- if (removedIdsSize > 0) {
- writeOpenRemoveCatchBlockIds();
- writeInt(removedIdsSize);
- for (int i = 0; i < removedIdsSize; i++) {
- writeString(removedIds.get(i));
- }
- writeCloseCatchBlockIds();
- }
- currentCatchBlockList.addAll(addedIds);
- }
- }
-
- public void writeNodes(@Nonnull Collection<? extends NNode> nodes) throws IOException {
- writeOpen();
-
- writeTrimmedInt(nodes.size());
-
- for (Iterator<? extends NNode> iterator = nodes.iterator(); iterator.hasNext();) {
- writeNode(iterator.next());
- }
-
- writeClose();
- }
-
- public void writeInt(int value) throws IOException {
- writeTrimmedInt(value);
- writeSpace();
- }
-
- private void writeTrimmedInt(int value) throws IOException {
- out.writeInt(value);
- }
-
- public void writeBoolean(boolean value) throws IOException {
- out.writeBoolean(value);
- }
-
- public void writeLong(long value) throws IOException {
- writeTrimmedLong(value);
- writeSpace();
- }
-
- private void writeTrimmedLong(long value) throws IOException {
- out.writeLong(value);
- }
-
- public void writeByte(byte value) throws IOException {
- out.writeByte(value);
- writeSpace();
- }
-
- public void writeShort(short value) throws IOException {
- out.writeShort(value);
- writeSpace();
- }
-
- public void writeChar(char value) throws IOException {
- out.writeChar(value);
- writeSpace();
- }
-
- public void writeFloat(float value) throws IOException {
- writeTrimmedInt(Float.floatToRawIntBits(value));
- writeSpace();
- }
-
- public void writeDouble(double value) throws IOException {
- writeTrimmedLong(Double.doubleToRawLongBits(value));
- writeSpace();
- }
-
- public void writeId(@CheckForNull String id) throws IOException {
- writeString(id);
- }
-
- public void writeRetentionPolicyEnum(@Nonnull JRetentionPolicy enumValue) throws IOException {
- writeByte(RetentionPolicyIdHelper.getId(enumValue));
- }
-
- public void writeFieldRefKindEnum(@Nonnull FieldKind enumValue) throws IOException {
- writeByte(FieldRefKindIdHelper.getId(enumValue));
- }
-
- public void writeMethodKindEnum(@Nonnull MethodKind enumValue) throws IOException {
- writeByte(MethodKindIdHelper.getId(enumValue));
- }
-
- public void writeReceiverKindEnum(@Nonnull ReceiverKind enumValue) throws IOException {
- writeByte(ReceiverKindIdHelper.getId(enumValue));
- }
-
- public void writeDispatchKindEnum(@Nonnull DispatchKind enumValue) throws IOException {
- writeByte(DispatchKindIdHelper.getId(enumValue));
- }
-
- public void writeString(@CheckForNull String string) throws IOException {
- out.writeUTF(string);
- }
-
- public void writeBuffer(@CheckForNull byte[] b) throws IOException {
- out.writeBuffer(b);
- }
-
- public void writeFileNameIfDifferentFromCurrent(@CheckForNull String fileName)
- throws IOException {
- if (fileName != null && !fileName.equals(currentFileName)) {
- writeCurrentFileName(fileName);
- }
- // Assume that elements with unknown debug infos are in same file.
- }
-
- public void writeCurrentFileName(@Nonnull String fileName) throws IOException {
- writeOpenFileName();
- writeString(fileName);
- writeCloseFileName();
- currentFileName = fileName;
- }
-
- public void writeLineIfDifferentFromCurrent(@Nonnegative int lineNumber)
- throws IOException {
- if (lineNumber != currentLineNumber) {
- writeCurrentLine(lineNumber);
- }
- }
-
- public void writeCurrentLine(@Nonnegative int lineNumber)
- throws IOException {
- writeOpenLineInfo();
- writeTrimmedInt(lineNumber);
- writeCloseLineInfo();
- currentLineNumber = lineNumber;
- }
-
- private void writeNull() throws IOException {
- writeToken(Token.NULL);
- writeSpace();
- }
-
- @SuppressWarnings("unused")
- private void writeSpace() throws IOException{
- }
-
- private void writeToken(@Nonnull Token token) throws IOException {
- out.writeByte(token.ordinal());
- }
-
- @SuppressWarnings("unused")
- private void writeOpen() throws IOException{
- }
-
- private void writeClose() throws IOException {
- writeToken(Token.RPARENTHESIS);
- }
-
- private void writeOpenFileName() throws IOException {
- writeToken(Token.SHARP);
- }
-
- @SuppressWarnings("unused")
- private void writeCloseFileName() throws IOException{
- }
-
- private void writeOpenLineInfo() throws IOException {
- writeToken(Token.LBRACKET);
- }
-
- @SuppressWarnings("unused")
- private void writeCloseLineInfo() throws IOException{
- }
-
- private void writeOpenAddCatchBlockIds() throws IOException {
- writeToken(Token.LCURLY_ADD);
- }
-
- private void writeOpenRemoveCatchBlockIds() throws IOException {
- writeToken(Token.LCURLY_REMOVE);
- }
-
- @SuppressWarnings("unused")
- private void writeCloseCatchBlockIds() throws IOException{
- }
-
- @Override
- public void write(@Nonnull JNode jNode) throws IOException {
- try (Event eventWriting = tracer.open(JackEventType.NNODE_WRITING)) {
- ImportHelper importHelper = new ImportHelper(new NodeFactory());
- NNode nNode;
- try (Event eventConvert = tracer.open(JackEventType.JNODE_TO_NNODE_CONVERSION)) {
- nNode = importHelper.load(jNode);
- }
-
- writeNode(nNode);
- }
- }
-
- @Override
- public int getCurrentMinor() {
- return Version.CURRENT_MINOR;
- }
-
- @Override
- public void close() throws IOException {
- out.close();
- }
-}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAbsentArrayDimension.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAbsentArrayDimension.java
index 30a76fa..3d3cf8d 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAbsentArrayDimension.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAbsentArrayDimension.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -54,11 +53,6 @@
@SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- }
-
- @SuppressWarnings("unused")
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAddOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAddOperation.java
index 34639a1..91631c8 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAddOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAddOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAlloc.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAlloc.java
index 32e4686..2118f5b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAlloc.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAlloc.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(instanceType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instanceType = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAndOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAndOperation.java
index 626a0b8..8d71ec8 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAndOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotation.java
index 7d5a96b..f420d0d 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotation.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -90,15 +89,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert retentionPolicy != null;
- out.writeRetentionPolicyEnum(retentionPolicy);
- out.writeId(annotationType);
- out.writeNodes(elements);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
retentionPolicy = in.readRetentionPolicyEnum();
annotationType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationMethod.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationMethod.java
index a1a170f..877c5f3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationMethod.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationMethod.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -102,17 +101,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert annotations != null;
- out.writeId(name);
- out.writeId(returnType);
- out.writeInt(modifier);
- out.writeNodes(annotations);
- out.writeNode(defaultValue);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
name = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationType.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationType.java
index ffa52d7..4f4919c 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationType.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAnnotationType.java
@@ -29,7 +29,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.util.NamingTools;
@@ -121,21 +120,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert retentionPolicy != null;
- out.writeRetentionPolicyEnum(retentionPolicy);
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
retentionPolicy = in.readRetentionPolicyEnum();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLength.java b/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLength.java
index 3556483..b0171fc 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLength.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLength.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -66,11 +65,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(instance);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instance = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLiteral.java
index 127dddf..a486622 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NArrayLiteral.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -71,11 +70,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(values);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
values = in.readNodes(NLiteral.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NArrayRef.java b/jack/src/com/android/jack/jayce/v0003/nodes/NArrayRef.java
index a830dcc..7264d8a 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NArrayRef.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NArrayRef.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -72,12 +71,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(instance);
- out.writeNode(index);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instance = in.readNode(NExpression.class);
index = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgAddOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgAddOperation.java
index 59f7de3..5a20b0b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgAddOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgAddOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitAndOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitAndOperation.java
index a8f23c2..8b5be63 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitAndOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitOrOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitOrOperation.java
index 61108e7..63c0acf 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitOrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitXorOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitXorOperation.java
index 957568a..fb49da9 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitXorOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgBitXorOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgConcatOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgConcatOperation.java
index 868cf01..2ad1cb3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgConcatOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgConcatOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgDivOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgDivOperation.java
index 641a0dc..fbe8a0c 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgDivOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgDivOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgModOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgModOperation.java
index b97a6f0..5d4c6ad 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgModOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgModOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgMulOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgMulOperation.java
index 8deb270..a072139 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgMulOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgMulOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgOperation.java
index f3a32fe..cae23b5 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShlOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShlOperation.java
index b757941..17c2706 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShlOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShlOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShrOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShrOperation.java
index d79090d..189a8c3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShruOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShruOperation.java
index b59be5c..79108f8 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShruOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgShruOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgSubOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgSubOperation.java
index a3d2ee6..2e38410 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAsgSubOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAsgSubOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NAssertStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NAssertStatement.java
index 9e12967..3e835d4 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NAssertStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NAssertStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -84,12 +83,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(testExpression);
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
testExpression = in.readNode(NExpression.class);
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NBitAndOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NBitAndOperation.java
index 8891729..cc9554a 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NBitAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NBitAndOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NBitOrOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NBitOrOperation.java
index 1a9246d..63c9b1b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NBitOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NBitOrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NBitXorOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NBitXorOperation.java
index 682f191..e996036 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NBitXorOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NBitXorOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NBlock.java b/jack/src/com/android/jack/jayce/v0003/nodes/NBlock.java
index c5b2788..e8c9aa0 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NBlock.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NBlock.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,11 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(statements);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
statements = in.readNodes(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NBooleanLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NBooleanLiteral.java
index d9a529b..f1c286c 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NBooleanLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NBooleanLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeBoolean(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readBoolean();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NBreakStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NBreakStatement.java
index 7fadf5d..e7cbcbe 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NBreakStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NBreakStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -71,11 +70,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(label);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
label = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NByteLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NByteLiteral.java
index 5102162..f0dfa0a 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NByteLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NByteLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeByte(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readByte();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NCaseStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NCaseStatement.java
index 0327351..9c1bfae 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NCaseStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NCaseStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -80,12 +79,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
expr = in.readNode(NLiteral.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NCatchBlock.java b/jack/src/com/android/jack/jayce/v0003/nodes/NCatchBlock.java
index 71bc829..c306123 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NCatchBlock.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NCatchBlock.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -103,14 +102,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeIds(catchTypes);
- out.writeNode(catchVar);
- out.writeNodes(statements);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
catchTypes = in.readIds();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NCharLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NCharLiteral.java
index c5d6532..b5fe707 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NCharLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NCharLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeChar(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readChar();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NClassLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NClassLiteral.java
index 203b28a..11b8fbb 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NClassLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NClassLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -64,11 +63,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(refType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
refType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NClassType.java b/jack/src/com/android/jack/jayce/v0003/nodes/NClassType.java
index 2780320..4f52654 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NClassType.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NClassType.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
import com.android.jack.util.NamingTools;
@@ -169,23 +168,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeId(superClass);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeId(enclosingMethodClass);
- out.writeId(enclosingMethod);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
-
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NConcatOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NConcatOperation.java
index db0952f..9d4f818 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NConcatOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NConcatOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -72,12 +71,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NConditionalExpression.java b/jack/src/com/android/jack/jayce/v0003/nodes/NConditionalExpression.java
index b22fb63..8460d2f 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NConditionalExpression.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NConditionalExpression.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,13 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(ifTest);
- out.writeNode(thenExpr);
- out.writeNode(elseExpr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
ifTest = in.readNode(NExpression.class);
thenExpr = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NConstructor.java b/jack/src/com/android/jack/jayce/v0003/nodes/NConstructor.java
index 246159b..07cc4b4 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NConstructor.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NConstructor.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -91,16 +90,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert annotations != null;
- out.writeNodes(getParameters());
- out.writeInt(modifier);
- out.writeNodes(annotations);
- out.writeNode(body);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
setParameters(in.readNodes(NParameter.class));
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NContainerAnnotation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NContainerAnnotation.java
index 2733c88..f20e416 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NContainerAnnotation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NContainerAnnotation.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.transformations.annotation.ContainerAnnotationMarker;
@@ -60,13 +59,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert retentionPolicy != null;
- out.writeRetentionPolicyEnum(retentionPolicy);
- out.writeId(annotationTypeSig);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
retentionPolicy = in.readRetentionPolicyEnum();
annotationTypeSig = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NContinueStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NContinueStatement.java
index 2341f7e..a55c83c 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NContinueStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NContinueStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -73,11 +72,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(label);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
label = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NDivOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NDivOperation.java
index 8494864..c5e0413 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NDivOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NDivOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NDoStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NDoStatement.java
index f884a1f..1908ce9 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NDoStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NDoStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,12 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(testExpression);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
testExpression = in.readNode(NExpression.class);
body = in.readNode(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NDoubleLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NDoubleLiteral.java
index e623ed1..e7266bc 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NDoubleLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NDoubleLiteral.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -60,14 +59,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeDouble(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readDouble();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NDynamicCastOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NDynamicCastOperation.java
index 3b6ccb4..e7abde8 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NDynamicCastOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NDynamicCastOperation.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -78,13 +77,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert castTypes != null;
- out.writeIds(castTypes);
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
castTypes = in.readIds();
expr = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NEnumField.java b/jack/src/com/android/jack/jayce/v0003/nodes/NEnumField.java
index ab1a4ec..71772ae 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NEnumField.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NEnumField.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -92,17 +91,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNode(initialValue);
- out.writeInt(ordinal);
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
modifiers = in.readInt();
type = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NEnumLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NEnumLiteral.java
index 2ead7f8..25bfef3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NEnumLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NEnumLiteral.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JLookup;
@@ -76,12 +75,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(enumFieldDeclaringType);
- out.writeId(enumFieldName);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
enumFieldDeclaringType = in.readId();
enumFieldName = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NEnumType.java b/jack/src/com/android/jack/jayce/v0003/nodes/NEnumType.java
index 24759b1..e531952 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NEnumType.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NEnumType.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
import com.android.jack.util.NamingTools;
@@ -138,23 +137,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeId(superClass);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeId(enclosingMethodClass);
- out.writeId(enclosingMethod);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
-
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NEqOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NEqOperation.java
index bdf017c..1159db4 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NEqOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NEqOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NExceptionRuntimeValue.java b/jack/src/com/android/jack/jayce/v0003/nodes/NExceptionRuntimeValue.java
index abab103..d688b56 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NExceptionRuntimeValue.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NExceptionRuntimeValue.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(catchedType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
catchedType = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NExpressionStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NExpressionStatement.java
index 3e27c7a..959140f 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NExpressionStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NExpressionStatement.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expression);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expression = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NField.java b/jack/src/com/android/jack/jayce/v0003/nodes/NField.java
index 807bebd..0264ffa 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NField.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NField.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -121,16 +120,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNode(initialValue);
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
modifiers = in.readInt();
type = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NFieldInitializer.java b/jack/src/com/android/jack/jayce/v0003/nodes/NFieldInitializer.java
index e3b601b..b33a829 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NFieldInitializer.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NFieldInitializer.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -50,11 +49,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) {
- throw new UnsupportedOperationException();
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) {
throw new UnsupportedOperationException();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NFieldRef.java b/jack/src/com/android/jack/jayce/v0003/nodes/NFieldRef.java
index 3b79cf4..36b7f68 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NFieldRef.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NFieldRef.java
@@ -26,7 +26,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -90,16 +89,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert kind != null;
- out.writeId(field);
- out.writeId(fieldType);
- out.writeId(receiverType);
- out.writeFieldRefKindEnum(kind);
- out.writeNode(instance);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
field = in.readId();
fieldType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NFloatLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NFloatLiteral.java
index b7c162c..f448e92 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NFloatLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NFloatLiteral.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -60,14 +59,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeFloat(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readFloat();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NForStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NForStatement.java
index 4b73da0..438b79e 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NForStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NForStatement.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -101,17 +100,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert initializers != null;
- assert increments != null;
-
- out.writeNodes(initializers);
- out.writeNode(testExpression);
- out.writeNodes(increments);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
initializers = in.readNodes(NStatement.class);
testExpression = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NGenericSignature.java b/jack/src/com/android/jack/jayce/v0003/nodes/NGenericSignature.java
index e088da7..a0df018 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NGenericSignature.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NGenericSignature.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -53,11 +52,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(genericSignature);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
genericSignature = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NGoto.java b/jack/src/com/android/jack/jayce/v0003/nodes/NGoto.java
index 2a28bdb..25b4813 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NGoto.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NGoto.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -73,11 +72,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(target);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
target = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NGtOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NGtOperation.java
index 66b6173..c7094a5 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NGtOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NGtOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NGteOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NGteOperation.java
index f229891..4d775a5 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NGteOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NGteOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NIfStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NIfStatement.java
index a0cd79d..26c4b69 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NIfStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NIfStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -88,13 +87,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(ifExpression);
- out.writeNode(thenStatement);
- out.writeNode(elseStatement);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
ifExpression = in.readNode(NExpression.class);
thenStatement = in.readNode(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NInstanceOf.java b/jack/src/com/android/jack/jayce/v0003/nodes/NInstanceOf.java
index a6ab819..95ccb09 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NInstanceOf.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NInstanceOf.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -72,12 +71,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- out.writeId(testType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
testType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NIntLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NIntLiteral.java
index 73942d0..83374ef 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NIntLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NIntLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readInt();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NInterfaceType.java b/jack/src/com/android/jack/jayce/v0003/nodes/NInterfaceType.java
index 5324315..89e7f5c 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NInterfaceType.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NInterfaceType.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.util.NamingTools;
@@ -137,20 +136,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeInt(modifiers);
- out.writeId(signature);
- out.writeIds(superInterfaces);
- out.writeId(enclosingType);
- out.writeIds(inners);
- out.writeNodes(getFields());
- out.writeNodes(getMethods());
- out.writeNodes(annotations);
- out.writeNodes(markers);
-
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLabeledStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLabeledStatement.java
index c6bc314..e3b8c3b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLabeledStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLabeledStatement.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -88,13 +87,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(label);
- out.writeId(id);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
label = in.readString();
id = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLambda.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLambda.java
index 9688feb..3a35b33 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLambda.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLambda.java
@@ -30,7 +30,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.jayce.v0003.nodes.NMethodCall.ReceiverKind;
import com.android.jack.lookup.JMethodLookupException;
@@ -183,25 +182,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert methodRefKind != null;
- assert receiverKind != null;
- out.writeNodes(capturedVariables);
- out.writeReceiverKindEnum(receiverKind);
- out.writeId(enclosingType);
- out.writeId(methodRefName);
- out.writeIds(methodRefArgsType);
- out.writeMethodKindEnum(methodRefKind);
- out.writeId(methodRefType);
- out.writeId(typeSig);
- out.writeIds(boundsIds);
- out.writeNode(mthIdWithErasure);
- out.writeNode(mthIdWithoutErasure);
- out.writeNodes(bridges);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
capturedVariables = in.readNodes(NExpression.class);
receiverKind = in.readReceiverKindEnum();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLambdaFromJill.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLambdaFromJill.java
index f4ad8b8..49d43b3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLambdaFromJill.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLambdaFromJill.java
@@ -19,7 +19,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.transformations.lambda.LambdaFromJillMarker;
@@ -46,10 +45,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) {
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) {
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLocal.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLocal.java
index 5684211..f592e8f 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLocal.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLocal.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -100,16 +99,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNodes(annotationSet);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLocalRef.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLocalRef.java
index d41f492..ad7de01 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLocalRef.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLocalRef.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(localId);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
localId = in.readId();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLock.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLock.java
index ea5094f..0a3394a 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLock.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLock.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lockExpr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lockExpr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLongLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLongLiteral.java
index ed87e9c..2e8e345 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLongLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLongLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeLong(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readLong();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLtOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLtOperation.java
index 7cac52e..caeccf4 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLtOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLtOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NLteOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NLteOperation.java
index 9cc9e59..062a464 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NLteOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NLteOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMethod.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMethod.java
index dc6a112..172ca71 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMethod.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMethod.java
@@ -36,7 +36,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -170,19 +169,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert methodKind != null;
- out.writeId(name);
- out.writeId(returnType);
- out.writeNodes(getParameters());
- out.writeMethodKindEnum(methodKind);
- out.writeInt(modifier);
- out.writeNodes(annotations);
- out.writeNode(body);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
level = in.getNodeLevel();
name = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodBody.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodBody.java
index 3c61873..bbb63f9 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodBody.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodBody.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,12 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(locals);
- out.writeNode(block);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
locals = in.readNodes(NLocal.class);
block = in.readNode(NBlock.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodCall.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodCall.java
index a182dfc..93fa344 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodCall.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodCall.java
@@ -21,7 +21,7 @@
import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JMethodCall.DispatchKind;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JTypeLookupException;
import com.android.jack.ir.ast.MethodKind;
@@ -29,7 +29,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -91,9 +90,9 @@
instance = (NExpression) loader.load(jMethodCall.getInstance());
receiverType = ImportHelper.getSignatureName(jMethodCall.getReceiverType());
receiverKind = getReceiverKind(jMethodCall);
- methodName = jMethodCall.getMethodId().getName();
- methodArgsType = ImportHelper.getMethodArgsSignature(jMethodCall.getMethodId());
- methodKind = jMethodCall.getMethodId().getKind();
+ methodName = jMethodCall.getMethodIdWide().getName();
+ methodArgsType = ImportHelper.getMethodArgsSignature(jMethodCall.getMethodIdWide());
+ methodKind = jMethodCall.getMethodIdWide().getKind();
returnType = ImportHelper.getSignatureName(jMethodCall.getType());
args = loader.load(NExpression.class, jMethodCall.getArgs());
dispatchKind = jMethodCall.getDispatchKind();
@@ -124,12 +123,12 @@
} else {
jReceiverType = exportSession.getLookup().getInterface(receiverType);
}
- JMethodIdWide methodId = jReceiverType.getOrCreateMethodIdWide(methodName,
- exportSession.getTypeListFromSignatureList(methodArgsType), methodKind);
JType jReturnType = exportSession.getLookup().getType(returnType);
+ JMethodId methodId = jReceiverType.getOrCreateMethodId(methodName,
+ exportSession.getTypeListFromSignatureList(methodArgsType), methodKind, jReturnType);
SourceInfo jSourceInfo = sourceInfo.exportAsJast(exportSession);
JMethodCall jMethodCall = new JMethodCall(jSourceInfo, jInstance, jReceiverType, methodId,
- jReturnType, dispatchKind == DispatchKind.VIRTUAL /* isVirtualDispatch */);
+ dispatchKind == DispatchKind.VIRTUAL /* isVirtualDispatch */);
for (NExpression arg : args) {
jMethodCall.addArg(arg.exportAsJast(exportSession));
}
@@ -137,26 +136,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert receiverType != null;
- assert receiverKind != null;
- assert methodName != null;
- assert methodKind != null;
- assert returnType != null;
- assert dispatchKind != null;
- assert sourceInfo != null;
- out.writeNode(instance);
- out.writeId(receiverType);
- out.writeReceiverKindEnum(receiverKind);
- out.writeId(methodName);
- out.writeIds(methodArgsType);
- out.writeMethodKindEnum(methodKind);
- out.writeId(returnType);
- out.writeNodes(args);
- out.writeDispatchKindEnum(dispatchKind);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
instance = in.readNode(NExpression.class);
receiverType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodId.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodId.java
index 92ef0ef..d11bce2 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodId.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodId.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,15 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert methodKind != null;
- out.writeId(name);
- out.writeMethodKindEnum(methodKind);
- out.writeId(returnTypeSig);
- out.writeIds(paramTypeSigs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
name = in.readId();
methodKind = in.readMethodKindEnum();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodLiteral.java
index afa8c9e..ebbd57d 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMethodLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMethodLiteral.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,12 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(method);
- out.writeId(methodEnclosingType);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
method = in.readId();
methodEnclosingType = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NModOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NModOperation.java
index 8125414..000db8d 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NModOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NModOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMulOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMulOperation.java
index 4031a89..485b56d 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMulOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMulOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NMultiExpression.java b/jack/src/com/android/jack/jayce/v0003/nodes/NMultiExpression.java
index 798a593..410c826 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NMultiExpression.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NMultiExpression.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -71,11 +70,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(exprs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
exprs = in.readNodes(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NNameValuePair.java b/jack/src/com/android/jack/jayce/v0003/nodes/NNameValuePair.java
index ed6a031..8a88b45 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NNameValuePair.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NNameValuePair.java
@@ -28,7 +28,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -87,12 +86,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(name);
- out.writeNode(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
name = in.readString();
value = in.readNode(NLiteral.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NNativeMethodBody.java b/jack/src/com/android/jack/jayce/v0003/nodes/NNativeMethodBody.java
index 53d45d5..dc626af 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NNativeMethodBody.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NNativeMethodBody.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -57,12 +56,6 @@
@SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
-
- }
-
- @SuppressWarnings("unused")
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NNeqOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NNeqOperation.java
index e5f3e44..07ecfa3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NNeqOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NNeqOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NNewArray.java b/jack/src/com/android/jack/jayce/v0003/nodes/NNewArray.java
index c9ee412..916cdb1 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NNewArray.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NNewArray.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -88,13 +87,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(type);
- out.writeNodes(dims);
- out.writeNodes(initializers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
type = in.readId();
dims = in.readNodes(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NNewInstance.java b/jack/src/com/android/jack/jayce/v0003/nodes/NNewInstance.java
index 4ea5a73..3d0f822 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NNewInstance.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NNewInstance.java
@@ -17,15 +17,15 @@
package com.android.jack.jayce.v0003.nodes;
import com.android.jack.ir.ast.JClassOrInterface;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewInstance;
+import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JTypeLookupException;
import com.android.jack.ir.ast.MethodKind;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -49,7 +49,7 @@
public void importFromJast(@Nonnull ImportHelper loader, @Nonnull Object node) {
JNewInstance jNewInstance = (JNewInstance) node;
receiverType = ImportHelper.getSignatureName(jNewInstance.getReceiverType());
- methodArgsType = ImportHelper.getMethodArgsSignature(jNewInstance.getMethodId());
+ methodArgsType = ImportHelper.getMethodArgsSignature(jNewInstance.getMethodIdWide());
args = loader.load(NExpression.class, jNewInstance.getArgs());
sourceInfo = loader.load(jNewInstance.getSourceInfo());
}
@@ -67,9 +67,9 @@
assert methodArgsType != null;
assert args != null;
JClassOrInterface jReceiverType = exportSession.getLookup().getClass(receiverType);
- JMethodIdWide methodId = jReceiverType.getOrCreateMethodIdWide(INIT_NAME,
+ JMethodId methodId = jReceiverType.getOrCreateMethodId(INIT_NAME,
exportSession.getTypeListFromSignatureList(methodArgsType),
- MethodKind.INSTANCE_NON_VIRTUAL);
+ MethodKind.INSTANCE_NON_VIRTUAL, JPrimitiveTypeEnum.VOID.getType());
SourceInfo jSourceInfo = sourceInfo.exportAsJast(exportSession);
JNewInstance jNewInstance = new JNewInstance(jSourceInfo, jReceiverType, methodId);
for (NExpression arg : args) {
@@ -79,15 +79,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert instance == null;
- assert methodKind == null;
- out.writeId(receiverType);
- out.writeIds(methodArgsType);
- out.writeNodes(args);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
receiverType = in.readId();
methodArgsType = in.readIds();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NNullLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NNullLiteral.java
index 19562c0..fe25d0a 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NNullLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NNullLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -57,11 +56,6 @@
@SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- }
-
- @SuppressWarnings("unused")
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NOrOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NOrOperation.java
index 4cf55d0..902731c 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NOrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NOriginDigest.java b/jack/src/com/android/jack/jayce/v0003/nodes/NOriginDigest.java
index b32a817..82fd49b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NOriginDigest.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NOriginDigest.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.jayce.v0003.util.OriginDigestDescriptorHelper;
@@ -70,18 +69,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert digest != null;
-
- out.writeInt(descriptor);
- out.writeString(algo);
- out.writeBuffer(digest);
- out.writeString(emitter);
- out.writeInt(major);
- out.writeInt(minor);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
descriptor = in.readInt();
algo = in.readString();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NParameter.java b/jack/src/com/android/jack/jayce/v0003/nodes/NParameter.java
index 037cda4..d008056 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NParameter.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NParameter.java
@@ -26,7 +26,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -114,16 +113,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(id);
- out.writeInt(modifiers);
- out.writeId(type);
- out.writeId(name);
- out.writeNodes(annotations);
- out.writeNodes(markers);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
id = in.readId();
modifiers = in.readInt();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NParameterRef.java b/jack/src/com/android/jack/jayce/v0003/nodes/NParameterRef.java
index 6c6b302..42f795e 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NParameterRef.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NParameterRef.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(localId);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
localId = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixDecOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixDecOperation.java
index a03de50..7dbd2d2 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixDecOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixDecOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixIncOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixIncOperation.java
index 17b3507..96745f5 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixIncOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPostfixIncOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixBitNotOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixBitNotOperation.java
index c2d6f63..85fa6fa 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixBitNotOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixBitNotOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixDecOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixDecOperation.java
index ee2fada..7e5c07f 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixDecOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixDecOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixIncOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixIncOperation.java
index 4f96997..81360b2 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixIncOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixIncOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNegOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNegOperation.java
index fc5cd67..607a973 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNegOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNegOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNotOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNotOperation.java
index f7ee123..e191646 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNotOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NPrefixNotOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -62,11 +61,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(arg);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
arg = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NReinterpretCastOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NReinterpretCastOperation.java
index ceb7afe..4d4dac7 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NReinterpretCastOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NReinterpretCastOperation.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,12 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(castType);
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
castType = in.readId();
expr = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NReturnStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NReturnStatement.java
index 4632077..afd7119 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NReturnStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NReturnStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -74,11 +73,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NShlOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NShlOperation.java
index b4db2eb..1a210df 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NShlOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NShlOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NShortLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NShortLiteral.java
index abeb5bb..e54a20b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NShortLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NShortLiteral.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -59,14 +58,8 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeShort(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readShort();
-
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NShrOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NShrOperation.java
index 80ac4f1..36fc08b 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NShrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NShrOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NShruOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NShruOperation.java
index bceb64c..2c416a9 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NShruOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NShruOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NSimpleName.java b/jack/src/com/android/jack/jayce/v0003/nodes/NSimpleName.java
index 2936ecd..1940eab 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NSimpleName.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NSimpleName.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -54,11 +53,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(simpleName);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
simpleName = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NStringLiteral.java b/jack/src/com/android/jack/jayce/v0003/nodes/NStringLiteral.java
index dd12e7d..481c75f 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NStringLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NStringLiteral.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -61,11 +60,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(value);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
value = in.readString();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NSubOperation.java b/jack/src/com/android/jack/jayce/v0003/nodes/NSubOperation.java
index 839fe5c..c3bb3f3 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NSubOperation.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NSubOperation.java
@@ -21,7 +21,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -68,12 +67,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lhs);
- out.writeNode(rhs);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lhs = in.readNode(NExpression.class);
rhs = in.readNode(NExpression.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NSwitchStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NSwitchStatement.java
index 1b2b312..cdb7cb7 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NSwitchStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NSwitchStatement.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -98,13 +97,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- out.writeIds(cases);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
cases = in.readIds();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NSynchronizedBlock.java b/jack/src/com/android/jack/jayce/v0003/nodes/NSynchronizedBlock.java
index 84cbc8f..abda178 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NSynchronizedBlock.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NSynchronizedBlock.java
@@ -25,7 +25,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -86,12 +85,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lockExpr);
- out.writeNode(synchronizedBlock);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lockExpr = in.readNode(NExpression.class);
synchronizedBlock = in.readNode(NBlock.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NThisRef.java b/jack/src/com/android/jack/jayce/v0003/nodes/NThisRef.java
index b7386c5..7a2334a 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NThisRef.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NThisRef.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -63,11 +62,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeId(type);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
type = in.readId();
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NThisRefTypeInfo.java b/jack/src/com/android/jack/jayce/v0003/nodes/NThisRefTypeInfo.java
index aa61ea5..77ab782 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NThisRefTypeInfo.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NThisRefTypeInfo.java
@@ -20,7 +20,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -56,11 +55,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeString(genericSignature);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
genericSignature = in.readString();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NThrowStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NThrowStatement.java
index 5a8f7d1..23e4df9 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NThrowStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NThrowStatement.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(expr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
expr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NThrownExceptionMarker.java b/jack/src/com/android/jack/jayce/v0003/nodes/NThrownExceptionMarker.java
index 8f6d8bd..43f519d 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NThrownExceptionMarker.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NThrownExceptionMarker.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import java.io.IOException;
@@ -61,11 +60,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeIds(thrownExceptions);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
thrownExceptions = in.readIds();
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NTryStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NTryStatement.java
index a209a31..f047541 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NTryStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NTryStatement.java
@@ -24,7 +24,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -96,14 +95,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNodes(resourcesDeclaration);
- out.writeNode(tryBlock);
- out.writeNodes(catchBlocks);
- out.writeNode(finallyBlock);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
resourcesDeclaration = in.readNodes(NStatement.class);
tryBlock = in.readNode(NBlock.class);
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NUnlock.java b/jack/src/com/android/jack/jayce/v0003/nodes/NUnlock.java
index 2a2e5e7..1368efe 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NUnlock.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NUnlock.java
@@ -22,7 +22,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -75,11 +74,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(lockExpr);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
lockExpr = in.readNode(NExpression.class);
}
diff --git a/jack/src/com/android/jack/jayce/v0003/nodes/NWhileStatement.java b/jack/src/com/android/jack/jayce/v0003/nodes/NWhileStatement.java
index 30b7acf..764be05 100644
--- a/jack/src/com/android/jack/jayce/v0003/nodes/NWhileStatement.java
+++ b/jack/src/com/android/jack/jayce/v0003/nodes/NWhileStatement.java
@@ -23,7 +23,6 @@
import com.android.jack.jayce.v0003.io.ExportSession;
import com.android.jack.jayce.v0003.io.ImportHelper;
import com.android.jack.jayce.v0003.io.JayceInternalReaderImpl;
-import com.android.jack.jayce.v0003.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0003.io.Token;
import com.android.jack.lookup.JMethodLookupException;
@@ -79,12 +78,6 @@
}
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- out.writeNode(testExpression);
- out.writeNode(body);
- }
-
- @Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
testExpression = in.readNode(NExpression.class);
body = in.readNode(NStatement.class);
diff --git a/jack/src/com/android/jack/jayce/v0004/Version.java b/jack/src/com/android/jack/jayce/v0004/Version.java
index dc86d9d..7439653 100644
--- a/jack/src/com/android/jack/jayce/v0004/Version.java
+++ b/jack/src/com/android/jack/jayce/v0004/Version.java
@@ -21,7 +21,7 @@
*/
public class Version {
- public static final int MINOR_MIN = 3;
+ public static final int MINOR_MIN = 4;
- public static final int CURRENT_MINOR = 3;
+ public static final int CURRENT_MINOR = 4;
}
diff --git a/jack/src/com/android/jack/jayce/v0004/io/JayceInputStream.java b/jack/src/com/android/jack/jayce/v0004/io/JayceInputStream.java
index 5c9d909..325261e 100644
--- a/jack/src/com/android/jack/jayce/v0004/io/JayceInputStream.java
+++ b/jack/src/com/android/jack/jayce/v0004/io/JayceInputStream.java
@@ -16,6 +16,8 @@
package com.android.jack.jayce.v0004.io;
+import com.google.common.io.ByteStreams;
+
import com.android.jack.util.StringUtils;
import java.io.DataInput;
@@ -57,31 +59,55 @@
return in.readBoolean();
}
+ public void skipBoolean() throws IOException {
+ ByteStreams.skipFully(in, 1);
+ }
+
@Override
public byte readByte() throws IOException {
return in.readByte();
}
+ public void skipByte() throws IOException {
+ ByteStreams.skipFully(in, 1);
+ }
+
@Override
public int readUnsignedByte() throws IOException {
return in.readUnsignedByte();
}
+ public void skipUnsignedByte() throws IOException {
+ ByteStreams.skipFully(in, 1);
+ }
+
@Override
public short readShort() throws IOException {
return in.readShort();
}
+ public void skipShort() throws IOException {
+ ByteStreams.skipFully(in, 2);
+ }
+
@Override
public int readUnsignedShort() throws IOException {
return in.readUnsignedShort();
}
+ public void skipUnsignedShort() throws IOException {
+ ByteStreams.skipFully(in, 2);
+ }
+
@Override
public char readChar() throws IOException {
return in.readChar();
}
+ public void skipChar() throws IOException {
+ ByteStreams.skipFully(in, 2);
+ }
+
@Override
public int readInt() throws IOException {
int result = 0;
@@ -108,6 +134,10 @@
return result;
}
+ public void skipInt() throws IOException {
+ readInt();
+ }
+
@Override
public long readLong() throws IOException {
long result = 0;
@@ -134,16 +164,28 @@
return result;
}
+ public void skipLong() throws IOException {
+ readLong();
+ }
+
@Override
public float readFloat() throws IOException {
return in.readFloat();
}
+ public void skipFloat() throws IOException {
+ ByteStreams.skipFully(in, 4);
+ }
+
@Override
public double readDouble() throws IOException {
return in.readDouble();
}
+ public void skipDouble() throws IOException {
+ ByteStreams.skipFully(in, 8);
+ }
+
@Deprecated
@Override
public String readLine() throws IOException {
@@ -166,6 +208,14 @@
}
}
+ public void skipUTF() throws IOException {
+ int length = readInt();
+
+ if (length > 0) {
+ ByteStreams.skipFully(in, length);
+ }
+ }
+
public byte[] readBuffer() throws IOException {
int length = readInt();
@@ -177,4 +227,12 @@
return b;
}
+
+ public void skipBuffer() throws IOException {
+ int length = readInt();
+
+ if (length > 0) {
+ ByteStreams.skipFully(in, length);
+ }
+ }
}
diff --git a/jack/src/com/android/jack/jayce/v0004/io/JayceInternalReaderImpl.java b/jack/src/com/android/jack/jayce/v0004/io/JayceInternalReaderImpl.java
index 69fd3d1..43601db 100644
--- a/jack/src/com/android/jack/jayce/v0004/io/JayceInternalReaderImpl.java
+++ b/jack/src/com/android/jack/jayce/v0004/io/JayceInternalReaderImpl.java
@@ -105,6 +105,10 @@
return readString();
}
+ public void skipId() throws IOException {
+ skipString();
+ }
+
@CheckForNull
public String readCurrentFileName() throws IOException {
if (tokenizer.readOpenFileName()) {
@@ -119,6 +123,14 @@
return currentFileName;
}
+ public void skipCurrentFileName() throws IOException {
+ if (tokenizer.readOpenFileName()) {
+ skipString();
+ currentLine = SourceInfo.UNKNOWN_LINE_NUMBER;
+ tokenizer.readCloseFileName();
+ }
+ }
+
@Nonnegative
public int readCurrentLine() throws IOException {
if (tokenizer.readOpenLineInfo()) {
@@ -128,41 +140,76 @@
return currentLine;
}
+ public void skipCurrentLine() throws IOException {
+ if (tokenizer.readOpenLineInfo()) {
+ skipInt();
+ tokenizer.readCloseLineInfo();
+ }
+ }
+
@Nonnull
public JRetentionPolicy readRetentionPolicyEnum() throws IOException {
return RetentionPolicyIdHelper.getValue(readByte());
}
+ public void skipRetentionPolicyEnum() throws IOException {
+ skipByte();
+ }
+
@Nonnull
public FieldKind readFieldRefKindEnum() throws IOException {
return FieldRefKindIdHelper.getValue(readByte());
}
+ public void skipFieldRefKindEnum() throws IOException {
+ skipByte();
+ }
+
@Nonnull
public MethodKind readMethodKindEnum() throws IOException {
return MethodKindIdHelper.getValue(readByte());
}
+ public void skipMethodKindEnum() throws IOException {
+ skipByte();
+ }
+
@Nonnull
public ReceiverKind readReceiverKindEnum() throws IOException {
return ReceiverKindIdHelper.getValue(readByte());
}
+ public void skipReceiverKindEnum() throws IOException {
+ skipByte();
+ }
+
@Nonnull
public DispatchKind readDispatchKindEnum() throws IOException {
return DispatchKindIdHelper.getValue(readByte());
}
+ public void skipDispatchKindEnum() throws IOException {
+ skipByte();
+ }
+
@CheckForNull
public String readString() throws IOException {
return tokenizer.readString();
}
+ public void skipString() throws IOException {
+ tokenizer.skipString();
+ }
+
@CheckForNull
public byte[] readBuffer() throws IOException {
return tokenizer.readBuffer();
}
+ public void skipBuffer() throws IOException {
+ tokenizer.skipBuffer();
+ }
+
@Nonnull
public List<String> readIds() throws IOException {
tokenizer.readOpen();
@@ -175,6 +222,15 @@
return ids;
}
+ public void skipIds() throws IOException {
+ tokenizer.readOpen();
+ int length = readInt();
+ for (int i = 0; i < length; i++) {
+ skipId();
+ }
+ tokenizer.readClose();
+ }
+
public void readCatchBlockIds() throws IOException {
if (tokenizer.readOpenCatchBlockIdAdd()) {
int length = tokenizer.readInt();
@@ -196,6 +252,63 @@
}
}
+ public void skipCatchBlockIds() throws IOException {
+ if (tokenizer.readOpenCatchBlockIdAdd()) {
+ int length = tokenizer.readInt();
+ for (int i = 0; i < length; i++) {
+ skipId();
+ }
+ tokenizer.readCloseCatchBlockId();
+ }
+ if (tokenizer.readOpenCatchBlockIdRemove()) {
+ int length = tokenizer.readInt();
+ for (int i = 0; i < length; i++) {
+ skipId();
+ }
+ tokenizer.readCloseCatchBlockId();
+ }
+ }
+
+ public <T extends NNode> void skipNode()
+ throws IOException, JayceFormatException {
+
+ skipCurrentFileName();
+ skipCurrentLine();
+
+ skipCatchBlockIds();
+
+ Token token = tokenizer.next();
+
+ if (token == Token.NULL) {
+ return;
+ }
+
+ tokenizer.readOpen();
+
+ skipNodeInternal(token);
+ }
+
+ private <T extends NNode> void skipNodeInternal(@Nonnull Token token)
+ throws IOException, JayceFormatException {
+
+ try {
+
+ token.skip(this);
+
+ if (nodeLevel != NodeLevel.TYPES) {
+ if (token.hasSourceInfo()) {
+ skipCurrentFileName();
+ skipCurrentLine();
+ }
+ tokenizer.readClose();
+ }
+
+ } catch (InvalidTokenException e) {
+ throw new ParseException(
+ "Unexpected token " + token.toString() + " while expecting node.", e);
+ }
+ }
+
@SuppressWarnings("unchecked")
@CheckForNull
public <T extends NNode> T readNode(@Nonnull Class<T> nodeClass) throws IOException,
@@ -214,17 +327,39 @@
tokenizer.readOpen();
NNode node;
try {
+
+ Percent statistic = null;
+ if (token == Token.METHOD_BODY) {
+ statistic = tracer.getStatistic(SKIPPED_BODY);
+ }
+
+ if (!nodeLevel.keep(token.getNodeLevel())) {
+
+ skipNodeInternal(token);
+
+ if (statistic != null) {
+ statistic.addTrue();
+ }
+ return null;
+ }
+
node = token.newNode();
+
+ if (node instanceof NDeclaredType) {
+ tracer.getStatistic(SKIPPED_TYPE_STRUCTURE).add(nodeLevel == NodeLevel.TYPES);
+ }
+
+ if (statistic != null) {
+ statistic.addFalse();
+ }
+
+
} catch (InvalidTokenException e) {
throw new ParseException(
"Unexpected token " + token.toString() + " while expecting node.", e);
}
- Percent statistic = null;
- if (token == Token.METHOD_BODY) {
- statistic = tracer.getStatistic(SKIPPED_BODY);
- } else if (node instanceof NDeclaredType) {
- tracer.getStatistic(SKIPPED_TYPE_STRUCTURE).add(nodeLevel == NodeLevel.TYPES);
- }
+
+ assert node != null;
if (!nodeClass.isAssignableFrom(node.getClass())) {
throw new JayceFormatException("Unexpected node " + node.getClass().getSimpleName() + ", "
@@ -257,17 +392,7 @@
tokenizer.readClose();
}
- if (nodeLevel.keep(token.getNodeLevel())) {
- if (statistic != null) {
- statistic.addFalse();
- }
- return (T) node;
- } else {
- if (statistic != null) {
- statistic.addTrue();
- }
- return null;
- }
+ return (T) node;
}
@Nonnull
@@ -287,38 +412,80 @@
}
+ public <T extends NNode> void skipNodes() throws IOException,
+ JayceFormatException {
+ tokenizer.readOpen();
+ int length = readInt();
+ for (int i = 0; i < length; i++) {
+ skipNode();
+ }
+ tokenizer.readClose();
+ }
+
public int readInt() throws IOException {
return tokenizer.readInt();
}
+ public void skipInt() throws IOException {
+ tokenizer.skipInt();
+ }
+
public byte readByte() throws IOException {
return tokenizer.readByte();
}
+ public void skipByte() throws IOException {
+ tokenizer.skipByte();
+ }
+
public boolean readBoolean() throws IOException {
return tokenizer.readBoolean();
}
+ public void skipBoolean() throws IOException {
+ tokenizer.skipBoolean();
+ }
+
public long readLong() throws IOException {
return tokenizer.readLong();
}
+ public void skipLong() throws IOException {
+ tokenizer.skipLong();
+ }
+
public short readShort() throws IOException {
return tokenizer.readShort();
}
+ public void skipShort() throws IOException {
+ tokenizer.skipShort();
+ }
+
public char readChar() throws IOException {
return tokenizer.readChar();
}
+ public void skipChar() throws IOException {
+ tokenizer.skipChar();
+ }
+
public float readFloat() throws IOException {
return tokenizer.readFloat();
}
+ public void skipFloat() throws IOException {
+ tokenizer.skipFloat();
+ }
+
public double readDouble() throws IOException {
return tokenizer.readDouble();
}
+ public void skipDouble() throws IOException {
+ tokenizer.skipDouble();
+ }
+
@Override
@Nonnull
public DeclaredTypeNode readType(@Nonnull NodeLevel nodeLevel) throws IOException,
diff --git a/jack/src/com/android/jack/jayce/v0004/io/JayceInternalWriterImpl.java b/jack/src/com/android/jack/jayce/v0004/io/JayceInternalWriterImpl.java
index 37df876..30291b2 100644
--- a/jack/src/com/android/jack/jayce/v0004/io/JayceInternalWriterImpl.java
+++ b/jack/src/com/android/jack/jayce/v0004/io/JayceInternalWriterImpl.java
@@ -36,6 +36,9 @@
import com.android.jack.jayce.v0004.util.MethodKindIdHelper;
import com.android.jack.jayce.v0004.util.ReceiverKindIdHelper;
import com.android.jack.jayce.v0004.util.RetentionPolicyIdHelper;
+import com.android.sched.util.file.CannotCloseException;
+import com.android.sched.util.file.CannotWriteException;
+import com.android.sched.util.location.HasLocation;
import com.android.sched.util.log.Event;
import com.android.sched.util.log.Tracer;
import com.android.sched.util.log.TracerFactory;
@@ -71,8 +74,12 @@
@Nonnull
private final List<String> currentCatchBlockList = new ArrayList<String>();
- public JayceInternalWriterImpl(@Nonnull OutputStream out) {
+ @Nonnull
+ private final HasLocation locationProvider;
+
+ public JayceInternalWriterImpl(@Nonnull OutputStream out, @Nonnull HasLocation locationProvider) {
this.out = new JayceOutputStream(out);
+ this.locationProvider = locationProvider;
}
public void writeNode(@CheckForNull NNode node) throws IOException {
@@ -348,7 +355,7 @@
}
@Override
- public void write(@Nonnull JNode jNode) throws IOException {
+ public void write(@Nonnull JNode jNode) throws CannotWriteException {
try (Event eventWriting = tracer.open(JackEventType.NNODE_WRITING)) {
ImportHelper importHelper = new ImportHelper(new NodeFactory());
NNode nNode;
@@ -356,7 +363,11 @@
nNode = importHelper.load(jNode);
}
- writeNode(nNode);
+ try {
+ writeNode(nNode);
+ } catch (IOException e) {
+ throw new CannotWriteException(locationProvider, e);
+ }
}
}
@@ -366,7 +377,11 @@
}
@Override
- public void close() throws IOException {
- out.close();
+ public void close() throws CannotCloseException {
+ try {
+ out.close();
+ } catch (IOException e) {
+ throw new CannotCloseException(locationProvider, e);
+ }
}
}
diff --git a/jack/src/com/android/jack/jayce/v0004/io/Token.java b/jack/src/com/android/jack/jayce/v0004/io/Token.java
index a4f9cd4..b24fc5a 100644
--- a/jack/src/com/android/jack/jayce/v0004/io/Token.java
+++ b/jack/src/com/android/jack/jayce/v0004/io/Token.java
@@ -16,9 +16,9 @@
package com.android.jack.jayce.v0004.io;
-import com.android.jack.jayce.JayceFormatException;
import com.android.jack.jayce.NodeLevel;
import com.android.jack.jayce.v0004.NNode;
+import com.android.jack.jayce.v0004.nodes.HasSourceInfo;
import com.android.jack.jayce.v0004.nodes.NAbsentArrayDimension;
import com.android.jack.jayce.v0004.nodes.NAddOperation;
import com.android.jack.jayce.v0004.nodes.NAlloc;
@@ -138,6 +138,8 @@
import com.android.jack.jayce.v0004.nodes.NUnlock;
import com.android.jack.jayce.v0004.nodes.NWhileStatement;
+import java.io.IOException;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -169,6 +171,17 @@
public NNode newNode() {
return new NAbsentArrayDimension();
}
+
+ @Override
+ @Nonnull
+ public Class<NAbsentArrayDimension> getNNodeClass() {
+ return NAbsentArrayDimension.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAbsentArrayDimension.skipContent(reader);
+ }
},
ADD_OPERATION("+") {
@Override
@@ -176,6 +189,17 @@
public NNode newNode() {
return new NAddOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAddOperation> getNNodeClass() {
+ return NAddOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAddOperation.skipContent(reader);
+ }
},
ALLOC("alloc") {
@Override
@@ -183,6 +207,17 @@
public NNode newNode() {
return new NAlloc();
}
+
+ @Override
+ @Nonnull
+ public Class<NAlloc> getNNodeClass() {
+ return NAlloc.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAlloc.skipContent(reader);
+ }
},
AND_OPERATION("&&") {
@Override
@@ -190,6 +225,17 @@
public NNode newNode() {
return new NAndOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAndOperation> getNNodeClass() {
+ return NAndOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAndOperation.skipContent(reader);
+ }
},
ANNOTATION("annotation-literal", NodeLevel.STRUCTURE) {
@Nonnull
@@ -197,6 +243,17 @@
public NNode newNode() {
return new NAnnotation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAnnotation> getNNodeClass() {
+ return NAnnotation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAnnotation.skipContent(reader);
+ }
},
ANNOTATION_METHOD("annotation-method", NodeLevel.STRUCTURE) {
@Nonnull
@@ -204,6 +261,17 @@
public NNode newNode() {
return new NAnnotationMethod();
}
+
+ @Override
+ @Nonnull
+ public Class<NAnnotationMethod> getNNodeClass() {
+ return NAnnotationMethod.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAnnotationMethod.skipContent(reader);
+ }
},
ANNOTATION_TYPE("annotation", NodeLevel.TYPES) {
@Override
@@ -211,6 +279,17 @@
public NNode newNode() {
return new NAnnotationType();
}
+
+ @Override
+ @Nonnull
+ public Class<NAnnotationType> getNNodeClass() {
+ return NAnnotationType.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAnnotationType.skipContent(reader);
+ }
},
ARRAY_LENGTH("array-length") {
@Override
@@ -218,6 +297,17 @@
public NNode newNode() {
return new NArrayLength();
}
+
+ @Override
+ @Nonnull
+ public Class<NArrayLength> getNNodeClass() {
+ return NArrayLength.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NArrayLength.skipContent(reader);
+ }
},
ARRAY_LITERAL("array-literal", NodeLevel.STRUCTURE) {
@Nonnull
@@ -225,6 +315,17 @@
public NNode newNode() {
return new NArrayLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NArrayLiteral> getNNodeClass() {
+ return NArrayLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NArrayLiteral.skipContent(reader);
+ }
},
ARRAY_REF("array-ref") {
@Override
@@ -232,6 +333,17 @@
public NNode newNode() {
return new NArrayRef();
}
+
+ @Override
+ @Nonnull
+ public Class<NArrayRef> getNNodeClass() {
+ return NArrayRef.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NArrayRef.skipContent(reader);
+ }
},
ASG_ADD_OPERATION("+=") {
@Override
@@ -239,6 +351,17 @@
public NNode newNode() {
return new NAsgAddOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgAddOperation> getNNodeClass() {
+ return NAsgAddOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgAddOperation.skipContent(reader);
+ }
},
ASG_BIT_AND_OPERATION("&=") {
@Override
@@ -246,6 +369,17 @@
public NNode newNode() {
return new NAsgBitAndOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgBitAndOperation> getNNodeClass() {
+ return NAsgBitAndOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgBitAndOperation.skipContent(reader);
+ }
},
ASG_BIT_OR_OPERATION("|=") {
@Override
@@ -253,6 +387,17 @@
public NNode newNode() {
return new NAsgBitOrOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgBitOrOperation> getNNodeClass() {
+ return NAsgBitOrOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgBitOrOperation.skipContent(reader);
+ }
},
ASG_BIT_XOR_OPERATION("^=") {
@Override
@@ -260,6 +405,17 @@
public NNode newNode() {
return new NAsgBitXorOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgBitXorOperation> getNNodeClass() {
+ return NAsgBitXorOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgBitXorOperation.skipContent(reader);
+ }
},
ASG_CONCAT_OPERATION("asg-concat") {
@Override
@@ -267,6 +423,17 @@
public NNode newNode() {
return new NAsgConcatOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgConcatOperation> getNNodeClass() {
+ return NAsgConcatOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgConcatOperation.skipContent(reader);
+ }
},
ASG_DIV_OPERATION("/=") {
@Override
@@ -274,6 +441,17 @@
public NNode newNode() {
return new NAsgDivOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgDivOperation> getNNodeClass() {
+ return NAsgDivOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgDivOperation.skipContent(reader);
+ }
},
ASG_MOD_OPERATION("%=") {
@Override
@@ -281,6 +459,17 @@
public NNode newNode() {
return new NAsgModOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgModOperation> getNNodeClass() {
+ return NAsgModOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgModOperation.skipContent(reader);
+ }
},
ASG_MUL_OPERATION("*=") {
@Override
@@ -288,6 +477,17 @@
public NNode newNode() {
return new NAsgMulOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgMulOperation> getNNodeClass() {
+ return NAsgMulOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgMulOperation.skipContent(reader);
+ }
},
ASG_OPERATION("=") {
@Override
@@ -295,6 +495,17 @@
public NNode newNode() {
return new NAsgOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgOperation> getNNodeClass() {
+ return NAsgOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgOperation.skipContent(reader);
+ }
},
ASG_SHL_OPERATION("<<=") {
@Override
@@ -302,6 +513,17 @@
public NNode newNode() {
return new NAsgShlOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgShlOperation> getNNodeClass() {
+ return NAsgShlOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgShlOperation.skipContent(reader);
+ }
},
ASG_SHR_OPERATION(">>=") {
@Override
@@ -309,6 +531,17 @@
public NNode newNode() {
return new NAsgShrOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgShrOperation> getNNodeClass() {
+ return NAsgShrOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgShrOperation.skipContent(reader);
+ }
},
ASG_SHRU_OPERATION(">>>=") {
@Override
@@ -316,6 +549,17 @@
public NNode newNode() {
return new NAsgShruOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgShruOperation> getNNodeClass() {
+ return NAsgShruOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgShruOperation.skipContent(reader);
+ }
},
ASG_SUB_OPERATION("-=") {
@Override
@@ -323,6 +567,17 @@
public NNode newNode() {
return new NAsgSubOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NAsgSubOperation> getNNodeClass() {
+ return NAsgSubOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAsgSubOperation.skipContent(reader);
+ }
},
ASSERT_STATEMENT("assert") {
@Override
@@ -330,6 +585,17 @@
public NNode newNode() {
return new NAssertStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NAssertStatement> getNNodeClass() {
+ return NAssertStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NAssertStatement.skipContent(reader);
+ }
},
BIT_AND_OPERATION("&") {
@Override
@@ -337,6 +603,17 @@
public NNode newNode() {
return new NBitAndOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NBitAndOperation> getNNodeClass() {
+ return NBitAndOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NBitAndOperation.skipContent(reader);
+ }
},
BIT_OR_OPERATION("|") {
@Override
@@ -344,6 +621,17 @@
public NNode newNode() {
return new NBitOrOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NBitOrOperation> getNNodeClass() {
+ return NBitOrOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NBitOrOperation.skipContent(reader);
+ }
},
BIT_XOR_OPERATION("^") {
@Override
@@ -351,6 +639,17 @@
public NNode newNode() {
return new NBitXorOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NBitXorOperation> getNNodeClass() {
+ return NBitXorOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NBitXorOperation.skipContent(reader);
+ }
},
BLOCK("block") {
@Nonnull
@@ -358,6 +657,17 @@
public NNode newNode() {
return new NBlock();
}
+
+ @Override
+ @Nonnull
+ public Class<NBlock> getNNodeClass() {
+ return NBlock.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NBlock.skipContent(reader);
+ }
},
BOOLEAN_LITERAL("boolean", NodeLevel.STRUCTURE) {
@Nonnull
@@ -365,6 +675,17 @@
public NNode newNode() {
return new NBooleanLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NBooleanLiteral> getNNodeClass() {
+ return NBooleanLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NBooleanLiteral.skipContent(reader);
+ }
},
BREAK_STATEMENT("break") {
@Nonnull
@@ -372,6 +693,17 @@
public NNode newNode() {
return new NBreakStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NBreakStatement> getNNodeClass() {
+ return NBreakStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NBreakStatement.skipContent(reader);
+ }
},
BYTE_LITERAL("byte", NodeLevel.STRUCTURE) {
@Nonnull
@@ -379,6 +711,17 @@
public NNode newNode() {
return new NByteLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NByteLiteral> getNNodeClass() {
+ return NByteLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NByteLiteral.skipContent(reader);
+ }
},
CASE_STATEMENT("case") {
@Override
@@ -386,6 +729,17 @@
public NNode newNode() {
return new NCaseStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NCaseStatement> getNNodeClass() {
+ return NCaseStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NCaseStatement.skipContent(reader);
+ }
},
CATCH_BLOCK("catch") {
@Nonnull
@@ -393,6 +747,17 @@
public NNode newNode() {
return new NCatchBlock();
}
+
+ @Override
+ @Nonnull
+ public Class<NCatchBlock> getNNodeClass() {
+ return NCatchBlock.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NCatchBlock.skipContent(reader);
+ }
},
CHAR_LITERAL("char", NodeLevel.STRUCTURE) {
@Nonnull
@@ -400,6 +765,17 @@
public NNode newNode() {
return new NCharLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NCharLiteral> getNNodeClass() {
+ return NCharLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NCharLiteral.skipContent(reader);
+ }
},
CLASS("class", NodeLevel.TYPES) {
@Nonnull
@@ -407,6 +783,17 @@
public NNode newNode() {
return new NClassType();
}
+
+ @Override
+ @Nonnull
+ public Class<NClassType> getNNodeClass() {
+ return NClassType.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NClassType.skipContent(reader);
+ }
},
CLASS_LITERAL("class-literal", NodeLevel.STRUCTURE) {
@Nonnull
@@ -414,6 +801,17 @@
public NNode newNode() {
return new NClassLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NClassLiteral> getNNodeClass() {
+ return NClassLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NClassLiteral.skipContent(reader);
+ }
},
CONCAT_OPERATION("concat") {
@Override
@@ -421,6 +819,17 @@
public NNode newNode() {
return new NConcatOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NConcatOperation> getNNodeClass() {
+ return NConcatOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NConcatOperation.skipContent(reader);
+ }
},
CONDITIONAL_EXPRESSION ("?") {
@Nonnull
@@ -428,6 +837,17 @@
public NNode newNode() {
return new NConditionalExpression();
}
+
+ @Override
+ @Nonnull
+ public Class<NConditionalExpression> getNNodeClass() {
+ return NConditionalExpression.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NConditionalExpression.skipContent(reader);
+ }
},
CONSTRUCTOR ("constructor", NodeLevel.STRUCTURE) {
@Nonnull
@@ -435,6 +855,17 @@
public NNode newNode() {
return new NConstructor();
}
+
+ @Override
+ @Nonnull
+ public Class<NConstructor> getNNodeClass() {
+ return NConstructor.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NConstructor.skipContent(reader);
+ }
},
CONTAINER_ANNOTATION("container-annotation", NodeLevel.STRUCTURE) {
@Nonnull
@@ -442,6 +873,17 @@
public NNode newNode() {
return new NContainerAnnotation();
}
+
+ @Override
+ @Nonnull
+ public Class<NContainerAnnotation> getNNodeClass() {
+ return NContainerAnnotation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NContainerAnnotation.skipContent(reader);
+ }
},
CONTINUE_STATEMENT("continue") {
@Nonnull
@@ -449,13 +891,35 @@
public NNode newNode() {
return new NContinueStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NContinueStatement> getNNodeClass() {
+ return NContinueStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NContinueStatement.skipContent(reader);
+ }
},
- DEBUG_VARIABLE_INFORMATION("debug-var") {
+ DEBUG_VARIABLE_INFORMATION("debug-var", NodeLevel.STRUCTURE) {
@Nonnull
@Override
public NNode newNode() {
return new NDebugVariableInfo();
}
+
+ @Override
+ @Nonnull
+ public Class<NDebugVariableInfo> getNNodeClass() {
+ return NDebugVariableInfo.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NDebugVariableInfo.skipContent(reader);
+ }
},
DIV_OPERATION("/") {
@Nonnull
@@ -463,6 +927,17 @@
public NNode newNode() {
return new NDivOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NDivOperation> getNNodeClass() {
+ return NDivOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NDivOperation.skipContent(reader);
+ }
},
DO_STATEMENT("do") {
@Nonnull
@@ -470,6 +945,17 @@
public NNode newNode() {
return new NDoStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NDoStatement> getNNodeClass() {
+ return NDoStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NDoStatement.skipContent(reader);
+ }
},
DOUBLE_LITERAL("double", NodeLevel.STRUCTURE) {
@Nonnull
@@ -477,6 +963,17 @@
public NNode newNode() {
return new NDoubleLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NDoubleLiteral> getNNodeClass() {
+ return NDoubleLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NDoubleLiteral.skipContent(reader);
+ }
},
DYNAMIC_CAST_OPERATION("cast") {
@Override
@@ -484,6 +981,17 @@
public NNode newNode() {
return new NDynamicCastOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NDynamicCastOperation> getNNodeClass() {
+ return NDynamicCastOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NDynamicCastOperation.skipContent(reader);
+ }
},
ENUM("enum", NodeLevel.TYPES) {
@Nonnull
@@ -491,6 +999,17 @@
public NNode newNode() {
return new NEnumType();
}
+
+ @Override
+ @Nonnull
+ public Class<NEnumType> getNNodeClass() {
+ return NEnumType.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NEnumType.skipContent(reader);
+ }
},
ENUM_FIELD("enum-field", NodeLevel.STRUCTURE) {
@Nonnull
@@ -498,6 +1017,17 @@
public NNode newNode() {
return new NEnumField();
}
+
+ @Override
+ @Nonnull
+ public Class<NEnumField> getNNodeClass() {
+ return NEnumField.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NEnumType.skipContent(reader);
+ }
},
ENUM_LITERAL("enum-literal", NodeLevel.STRUCTURE) {
@Nonnull
@@ -505,6 +1035,17 @@
public NNode newNode() {
return new NEnumLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NEnumLiteral> getNNodeClass() {
+ return NEnumLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NEnumLiteral.skipContent(reader);
+ }
},
EQ_OPERATION("==") {
@Nonnull
@@ -512,6 +1053,17 @@
public NNode newNode() {
return new NEqOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NEqOperation> getNNodeClass() {
+ return NEqOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NEqOperation.skipContent(reader);
+ }
},
EXCEPTION_RUNTIME_VALUE("ex-runtime-value") {
@Nonnull
@@ -519,6 +1071,17 @@
public NNode newNode() {
return new NExceptionRuntimeValue();
}
+
+ @Override
+ @Nonnull
+ public Class<NExceptionRuntimeValue> getNNodeClass() {
+ return NExceptionRuntimeValue.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NExceptionRuntimeValue.skipContent(reader);
+ }
},
EXPRESSION_STATEMENT("expression-statement") {
@Nonnull
@@ -526,6 +1089,17 @@
public NNode newNode() {
return new NExpressionStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NExpressionStatement> getNNodeClass() {
+ return NExpressionStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NExpressionStatement.skipContent(reader);
+ }
},
FIELD("field", NodeLevel.STRUCTURE) {
@Nonnull
@@ -533,6 +1107,17 @@
public NNode newNode() {
return new NField();
}
+
+ @Override
+ @Nonnull
+ public Class<NField> getNNodeClass() {
+ return NField.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NField.skipContent(reader);
+ }
},
FIELD_INITIALIZER("field-intializer") {
@Nonnull
@@ -540,6 +1125,17 @@
public NNode newNode() {
return new NFieldInitializer();
}
+
+ @Override
+ @Nonnull
+ public Class<NFieldInitializer> getNNodeClass() {
+ return NFieldInitializer.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) {
+ NFieldInitializer.skipContent(reader);
+ }
},
FIELD_REF("field-ref") {
@Nonnull
@@ -547,6 +1143,17 @@
public NNode newNode() {
return new NFieldRef();
}
+
+ @Override
+ @Nonnull
+ public Class<NFieldRef> getNNodeClass() {
+ return NFieldRef.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NFieldRef.skipContent(reader);
+ }
},
FLOAT_LITERAL("float", NodeLevel.STRUCTURE) {
@Nonnull
@@ -554,6 +1161,17 @@
public NNode newNode() {
return new NFloatLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NFloatLiteral> getNNodeClass() {
+ return NFloatLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NFloatLiteral.skipContent(reader);
+ }
},
FOR_STATEMENT("for") {
@Nonnull
@@ -561,6 +1179,17 @@
public NNode newNode() {
return new NForStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NForStatement> getNNodeClass() {
+ return NForStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NForStatement.skipContent(reader);
+ }
},
GENERIC_SIGNATURE("generic-signature", NodeLevel.TYPES) {
@Override
@@ -568,6 +1197,17 @@
public NNode newNode() {
return new NGenericSignature();
}
+
+ @Override
+ @Nonnull
+ public Class<NGenericSignature> getNNodeClass() {
+ return NGenericSignature.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NGenericSignature.skipContent(reader);
+ }
},
GOTO("goto") {
@Nonnull
@@ -575,6 +1215,17 @@
public NNode newNode() {
return new NGoto();
}
+
+ @Override
+ @Nonnull
+ public Class<NGoto> getNNodeClass() {
+ return NGoto.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NGoto.skipContent(reader);
+ }
},
GTE_OPERATION(">=") {
@Nonnull
@@ -582,6 +1233,17 @@
public NNode newNode() {
return new NGteOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NGteOperation> getNNodeClass() {
+ return NGteOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NGteOperation.skipContent(reader);
+ }
},
GT_OPERATION(">") {
@Nonnull
@@ -589,6 +1251,17 @@
public NNode newNode() {
return new NGtOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NGtOperation> getNNodeClass() {
+ return NGtOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NGtOperation.skipContent(reader);
+ }
},
IF_STATEMENT("if") {
@Override
@@ -596,6 +1269,17 @@
public NNode newNode() {
return new NIfStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NIfStatement> getNNodeClass() {
+ return NIfStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NIfStatement.skipContent(reader);
+ }
},
INSTANCE_OF("instanceof") {
@Override
@@ -603,6 +1287,17 @@
public NNode newNode() {
return new NInstanceOf();
}
+
+ @Override
+ @Nonnull
+ public Class<NInstanceOf> getNNodeClass() {
+ return NInstanceOf.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NInstanceOf.skipContent(reader);
+ }
},
INT_LITERAL("int", NodeLevel.STRUCTURE) {
@Nonnull
@@ -610,6 +1305,17 @@
public NNode newNode() {
return new NIntLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NIntLiteral> getNNodeClass() {
+ return NIntLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NIntLiteral.skipContent(reader);
+ }
},
INTERFACE("interface", NodeLevel.TYPES) {
@Nonnull
@@ -617,6 +1323,17 @@
public NNode newNode() {
return new NInterfaceType();
}
+
+ @Override
+ @Nonnull
+ public Class<NInterfaceType> getNNodeClass() {
+ return NInterfaceType.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NInterfaceType.skipContent(reader);
+ }
},
LABELED_STATEMENT("label") {
@Nonnull
@@ -624,6 +1341,17 @@
public NNode newNode() {
return new NLabeledStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NLabeledStatement> getNNodeClass() {
+ return NLabeledStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLabeledStatement.skipContent(reader);
+ }
},
LAMBDA("lambda") {
@Nonnull
@@ -631,6 +1359,17 @@
public NNode newNode() {
return new NLambda();
}
+
+ @Override
+ @Nonnull
+ public Class<NLambda> getNNodeClass() {
+ return NLambda.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLambda.skipContent(reader);
+ }
},
LAMBDA_FROM_JILL("lambda-from-jill") {
@Nonnull
@@ -638,6 +1377,17 @@
public NNode newNode() {
return new NLambdaFromJill();
}
+
+ @Override
+ @Nonnull
+ public Class<NLambdaFromJill> getNNodeClass() {
+ return NLambdaFromJill.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) {
+ NLambdaFromJill.skipContent(reader);
+ }
},
LOCAL("local") {
@Nonnull
@@ -645,6 +1395,18 @@
public NNode newNode() {
return new NLocal();
}
+
+ @Override
+ @Nonnull
+ public Class<NLocal> getNNodeClass() {
+ return NLocal.class;
+ }
+
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLocal.skipContent(reader);
+ }
},
LOCAL_REF("local-ref") {
@Nonnull
@@ -652,6 +1414,17 @@
public NNode newNode() {
return new NLocalRef();
}
+
+ @Override
+ @Nonnull
+ public Class<NLocalRef> getNNodeClass() {
+ return NLocalRef.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLocalRef.skipContent(reader);
+ }
},
LOCK("lock") {
@Nonnull
@@ -659,6 +1432,17 @@
public NNode newNode() {
return new NLock();
}
+
+ @Override
+ @Nonnull
+ public Class<NLock> getNNodeClass() {
+ return NLock.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLock.skipContent(reader);
+ }
},
LONG_LITERAL("long", NodeLevel.STRUCTURE) {
@Nonnull
@@ -666,6 +1450,17 @@
public NNode newNode() {
return new NLongLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NLongLiteral> getNNodeClass() {
+ return NLongLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLongLiteral.skipContent(reader);
+ }
},
LTE_OPERATION("<=") {
@Nonnull
@@ -673,6 +1468,18 @@
public NNode newNode() {
return new NLteOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NLteOperation> getNNodeClass() {
+ return NLteOperation.class;
+ }
+
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLteOperation.skipContent(reader);
+ }
},
LT_OPERATION("<") {
@Nonnull
@@ -680,6 +1487,17 @@
public NNode newNode() {
return new NLtOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NLtOperation> getNNodeClass() {
+ return NLtOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NLtOperation.skipContent(reader);
+ }
},
METHOD("method", NodeLevel.STRUCTURE) {
@Nonnull
@@ -687,6 +1505,17 @@
public NNode newNode() {
return new NMethod();
}
+
+ @Override
+ @Nonnull
+ public Class<NMethod> getNNodeClass() {
+ return NMethod.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMethod.skipContent(reader);
+ }
},
METHOD_BODY("body") {
@Nonnull
@@ -694,6 +1523,17 @@
public NNode newNode() {
return new NMethodBody();
}
+
+ @Override
+ @Nonnull
+ public Class<NMethodBody> getNNodeClass() {
+ return NMethodBody.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMethodBody.skipContent(reader);
+ }
},
METHOD_CALL("call") {
@Nonnull
@@ -701,6 +1541,17 @@
public NNode newNode() {
return new NMethodCall();
}
+
+ @Override
+ @Nonnull
+ public Class<NMethodCall> getNNodeClass() {
+ return NMethodCall.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMethodCall.skipContent(reader);
+ }
},
METHODID_WITH_RETURN_TYPE("method-id-with-return-type", NodeLevel.STRUCTURE) {
@Nonnull
@@ -708,6 +1559,17 @@
public NNode newNode() {
return new NMethodId();
}
+
+ @Override
+ @Nonnull
+ public Class<NMethodId> getNNodeClass() {
+ return NMethodId.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMethodId.skipContent(reader);
+ }
},
METHOD_LITERAL("method-literal", NodeLevel.STRUCTURE) {
@Nonnull
@@ -715,6 +1577,17 @@
public NNode newNode() {
return new NMethodLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NMethodLiteral> getNNodeClass() {
+ return NMethodLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMethodLiteral.skipContent(reader);
+ }
},
MOD_OPERATION("%") {
@Nonnull
@@ -722,6 +1595,17 @@
public NNode newNode() {
return new NModOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NModOperation> getNNodeClass() {
+ return NModOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NModOperation.skipContent(reader);
+ }
},
MUL_OPERATION("*") {
@Nonnull
@@ -729,6 +1613,17 @@
public NNode newNode() {
return new NMulOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NMulOperation> getNNodeClass() {
+ return NMulOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMulOperation.skipContent(reader);
+ }
},
MULTI_EXPRESSION("multi-expression") {
@Nonnull
@@ -736,6 +1631,17 @@
public NNode newNode() {
return new NMultiExpression();
}
+
+ @Override
+ @Nonnull
+ public Class<NMultiExpression> getNNodeClass() {
+ return NMultiExpression.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NMultiExpression.skipContent(reader);
+ }
},
NAME_VALUE_PAIR("name-value-pair", NodeLevel.STRUCTURE) {
@Nonnull
@@ -743,6 +1649,17 @@
public NNode newNode() {
return new NNameValuePair();
}
+
+ @Override
+ @Nonnull
+ public Class<NNameValuePair> getNNodeClass() {
+ return NNameValuePair.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NNameValuePair.skipContent(reader);
+ }
},
NEQ_OPERATION("!=") {
@Nonnull
@@ -750,6 +1667,17 @@
public NNode newNode() {
return new NNeqOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NNeqOperation> getNNodeClass() {
+ return NNeqOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NNeqOperation.skipContent(reader);
+ }
},
NATIVE_METHOD_BODY("native-body") {
@Nonnull
@@ -757,6 +1685,17 @@
public NNode newNode() {
return new NNativeMethodBody();
}
+
+ @Override
+ @Nonnull
+ public Class<NNativeMethodBody> getNNodeClass() {
+ return NNativeMethodBody.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) {
+ NNativeMethodBody.skipContent(reader);
+ }
},
NEW_ARRAY("new-array") {
@Nonnull
@@ -764,6 +1703,17 @@
public NNode newNode() {
return new NNewArray();
}
+
+ @Override
+ @Nonnull
+ public Class<NNewArray> getNNodeClass() {
+ return NNewArray.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NNewArray.skipContent(reader);
+ }
},
NEW_INSTANCE("new") {
@Nonnull
@@ -771,6 +1721,17 @@
public NNode newNode() {
return new NNewInstance();
}
+
+ @Override
+ @Nonnull
+ public Class<NNewInstance> getNNodeClass() {
+ return NNewInstance.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NNewInstance.skipContent(reader);
+ }
},
NULL_LITERAL("null-literal", NodeLevel.STRUCTURE) {
@Nonnull
@@ -778,6 +1739,17 @@
public NNode newNode() {
return new NNullLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NNullLiteral> getNNodeClass() {
+ return NNullLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) {
+ NNullLiteral.skipContent(reader);
+ }
},
OR_OPERATION("||") {
@Override
@@ -785,6 +1757,17 @@
public NNode newNode() {
return new NOrOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NOrOperation> getNNodeClass() {
+ return NOrOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NOrOperation.skipContent(reader);
+ }
},
ORIGIN_DIGEST("origin-digest", NodeLevel.STRUCTURE) {
@Override
@@ -792,6 +1775,17 @@
public NNode newNode() {
return new NOriginDigest();
}
+
+ @Override
+ @Nonnull
+ public Class<NOriginDigest> getNNodeClass() {
+ return NOriginDigest.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NOriginDigest.skipContent(reader);
+ }
},
PARAMETER("parameter", NodeLevel.STRUCTURE) {
@Nonnull
@@ -799,6 +1793,17 @@
public NNode newNode() {
return new NParameter();
}
+
+ @Override
+ @Nonnull
+ public Class<NParameter> getNNodeClass() {
+ return NParameter.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NParameter.skipContent(reader);
+ }
},
PARAMETER_REF("parameter-ref") {
@Nonnull
@@ -806,6 +1811,17 @@
public NNode newNode() {
return new NParameterRef();
}
+
+ @Override
+ @Nonnull
+ public Class<NParameterRef> getNNodeClass() {
+ return NParameterRef.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NParameterRef.skipContent(reader);
+ }
},
POLYMORPHIC_CALL("polymorphic-call") {
@Nonnull
@@ -813,6 +1829,17 @@
public NNode newNode() {
return new NPolymorphicCall();
}
+
+ @Override
+ @Nonnull
+ public Class<NPolymorphicCall> getNNodeClass() {
+ return NPolymorphicCall.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPolymorphicCall.skipContent(reader);
+ }
},
POSTFIX_DEC_OPERATION("postfix-dec") {
@Nonnull
@@ -820,6 +1847,17 @@
public NNode newNode() {
return new NPostfixDecOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NPostfixDecOperation> getNNodeClass() {
+ return NPostfixDecOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPostfixDecOperation.skipContent(reader);
+ }
},
POSTFIX_INC_OPERATION("postfix-inc") {
@Nonnull
@@ -827,6 +1865,17 @@
public NNode newNode() {
return new NPostfixIncOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NPostfixIncOperation> getNNodeClass() {
+ return NPostfixIncOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPostfixIncOperation.skipContent(reader);
+ }
},
PREFIX_BIT_NOT_OPERATION("~") {
@Nonnull
@@ -834,6 +1883,17 @@
public NNode newNode() {
return new NPrefixBitNotOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NPrefixBitNotOperation> getNNodeClass() {
+ return NPrefixBitNotOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPrefixBitNotOperation.skipContent(reader);
+ }
},
PREFIX_DEC_OPERATION("prefix-dec") {
@Nonnull
@@ -841,6 +1901,17 @@
public NNode newNode() {
return new NPrefixDecOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NPrefixDecOperation> getNNodeClass() {
+ return NPrefixDecOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPrefixDecOperation.skipContent(reader);
+ }
},
PREFIX_INC_OPERATION("prefix-inc") {
@Nonnull
@@ -848,6 +1919,17 @@
public NNode newNode() {
return new NPrefixIncOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NPrefixIncOperation> getNNodeClass() {
+ return NPrefixIncOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPrefixIncOperation.skipContent(reader);
+ }
},
PREFIX_NEG_OPERATION("neg") {
@Nonnull
@@ -855,6 +1937,17 @@
public NNode newNode() {
return new NPrefixNegOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NPrefixNegOperation> getNNodeClass() {
+ return NPrefixNegOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPrefixNegOperation.skipContent(reader);
+ }
},
PREFIX_NOT_OPERATION("not") {
@Nonnull
@@ -862,20 +1955,36 @@
public NNode newNode() {
return new NPrefixNotOperation();
}
- },
- RESERVED("reserved") {
- @Nonnull
+
@Override
- public NNode newNode() {
- throw new JayceFormatException("Unexpected node '" + toString() + "'");
+ @Nonnull
+ public Class<NPrefixNotOperation> getNNodeClass() {
+ return NPrefixNotOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NPrefixNotOperation.skipContent(reader);
}
},
+ RESERVED("reserved"),
REINTERPRETCAST_OPERATION("reinterpret-cast") {
@Override
@Nonnull
public NNode newNode() {
return new NReinterpretCastOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NReinterpretCastOperation> getNNodeClass() {
+ return NReinterpretCastOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NReinterpretCastOperation.skipContent(reader);
+ }
},
RETURN_STATEMENT("return") {
@Nonnull
@@ -883,6 +1992,17 @@
public NNode newNode() {
return new NReturnStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NReturnStatement> getNNodeClass() {
+ return NReturnStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NReturnStatement.skipContent(reader);
+ }
},
SHL_OPERATION("<<") {
@Nonnull
@@ -890,6 +2010,17 @@
public NNode newNode() {
return new NShlOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NShlOperation> getNNodeClass() {
+ return NShlOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NShlOperation.skipContent(reader);
+ }
},
SHORT_LITERAL("short", NodeLevel.STRUCTURE) {
@Nonnull
@@ -897,6 +2028,17 @@
public NNode newNode() {
return new NShortLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NShortLiteral> getNNodeClass() {
+ return NShortLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NShortLiteral.skipContent(reader);
+ }
},
SHR_OPERATION(">>") {
@Nonnull
@@ -904,6 +2046,17 @@
public NNode newNode() {
return new NShrOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NShrOperation> getNNodeClass() {
+ return NShrOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NShrOperation.skipContent(reader);
+ }
},
SHRU_OPERATION(">>>") {
@Nonnull
@@ -911,6 +2064,17 @@
public NNode newNode() {
return new NShruOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NShruOperation> getNNodeClass() {
+ return NShruOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NShruOperation.skipContent(reader);
+ }
},
SIMPLE_NAME("simple-name", NodeLevel.TYPES) {
@Override
@@ -918,6 +2082,17 @@
public NNode newNode() {
return new NSimpleName();
}
+
+ @Override
+ @Nonnull
+ public Class<NSimpleName> getNNodeClass() {
+ return NSimpleName.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NSimpleName.skipContent(reader);
+ }
},
SUB_OPERATION("-") {
@Nonnull
@@ -925,6 +2100,17 @@
public NNode newNode() {
return new NSubOperation();
}
+
+ @Override
+ @Nonnull
+ public Class<NSubOperation> getNNodeClass() {
+ return NSubOperation.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NSubOperation.skipContent(reader);
+ }
},
STRING_LITERAL("string", NodeLevel.STRUCTURE) {
@Nonnull
@@ -932,6 +2118,18 @@
public NNode newNode() {
return new NStringLiteral();
}
+
+ @Override
+ @Nonnull
+ public Class<NStringLiteral> getNNodeClass() {
+ return NStringLiteral.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NStringLiteral.skipContent(reader);
+ }
+
},
SWITCH_STATEMENT("switch") {
@Nonnull
@@ -939,6 +2137,17 @@
public NNode newNode() {
return new NSwitchStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NSwitchStatement> getNNodeClass() {
+ return NSwitchStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NSwitchStatement.skipContent(reader);
+ }
},
SYNCHRONIZED_BLOCK("synchronized-block") {
@Nonnull
@@ -946,6 +2155,17 @@
public NNode newNode() {
return new NSynchronizedBlock();
}
+
+ @Override
+ @Nonnull
+ public Class<NSynchronizedBlock> getNNodeClass() {
+ return NSynchronizedBlock.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NSynchronizedBlock.skipContent(reader);
+ }
},
THIS_REF("this") {
@Nonnull
@@ -953,13 +2173,35 @@
public NNode newNode() {
return new NThisRef();
}
+
+ @Override
+ @Nonnull
+ public Class<NThisRef> getNNodeClass() {
+ return NThisRef.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NThisRef.skipContent(reader);
+ }
},
- THIS_REF_TYPE_INFO("this-type-info") {
+ THIS_REF_TYPE_INFO("this-type-info", NodeLevel.STRUCTURE) {
@Nonnull
@Override
public NNode newNode() {
return new NThisRefTypeInfo();
}
+
+ @Override
+ @Nonnull
+ public Class<NThisRefTypeInfo> getNNodeClass() {
+ return NThisRefTypeInfo.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NThisRefTypeInfo.skipContent(reader);
+ }
},
THROW_STATEMENT("throw") {
@Nonnull
@@ -967,6 +2209,17 @@
public NNode newNode() {
return new NThrowStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NThrowStatement> getNNodeClass() {
+ return NThrowStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NThrowStatement.skipContent(reader);
+ }
},
THROWN_EXCEPTION("thrown-exception", NodeLevel.STRUCTURE) {
@Override
@@ -974,6 +2227,17 @@
public NNode newNode() {
return new NThrownExceptionMarker();
}
+
+ @Override
+ @Nonnull
+ public Class<NThrownExceptionMarker> getNNodeClass() {
+ return NThrownExceptionMarker.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NThrownExceptionMarker.skipContent(reader);
+ }
},
TRY_STATEMENT("try") {
@Nonnull
@@ -981,6 +2245,17 @@
public NNode newNode() {
return new NTryStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NTryStatement> getNNodeClass() {
+ return NTryStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NTryStatement.skipContent(reader);
+ }
},
UNLOCK("unlock") {
@Nonnull
@@ -988,6 +2263,17 @@
public NNode newNode() {
return new NUnlock();
}
+
+ @Override
+ @Nonnull
+ public Class<NUnlock> getNNodeClass() {
+ return NUnlock.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NUnlock.skipContent(reader);
+ }
},
WHILE_STATEMENT("while") {
@Nonnull
@@ -995,6 +2281,17 @@
public NNode newNode() {
return new NWhileStatement();
}
+
+ @Override
+ @Nonnull
+ public Class<NWhileStatement> getNNodeClass() {
+ return NWhileStatement.class;
+ }
+
+ @Override
+ public void skip(@Nonnull JayceInternalReaderImpl reader) throws IOException {
+ NWhileStatement.skipContent(reader);
+ }
},
;
@@ -1004,12 +2301,21 @@
@CheckForNull
private String label;
+ private final boolean hasSourceInfo;
+
private Token(@CheckForNull String text) {
this(text, NodeLevel.FULL);
}
private Token(@CheckForNull String text, NodeLevel nodeLevel) {
this.label = text;
this.nodeLevel = nodeLevel;
+ boolean tmpHasSourceInfo;
+ try {
+ tmpHasSourceInfo = HasSourceInfo.class.isAssignableFrom(getNNodeClass());
+ } catch (InvalidTokenException e) {
+ tmpHasSourceInfo = false;
+ }
+ hasSourceInfo = tmpHasSourceInfo;
}
public int getId() {
@@ -1023,6 +2329,21 @@
@Nonnull
public NNode newNode() throws InvalidTokenException {
+ throw new InvalidTokenException("No node corresponding to token " + this.toString());
+ }
+
+ @Nonnull
+ public Class<? extends NNode> getNNodeClass() throws InvalidTokenException {
+ throw new InvalidTokenException("No node corresponding to token " + this.toString());
+ }
+
+ public final boolean hasSourceInfo() {
+ return hasSourceInfo;
+ }
+
+ @SuppressWarnings("unused")
+ public void skip(@Nonnull JayceInternalReaderImpl reader)
+ throws InvalidTokenException, IOException {
throw new InvalidTokenException("No node coresponding to token " + this.toString());
}
diff --git a/jack/src/com/android/jack/jayce/v0004/io/Tokenizer.java b/jack/src/com/android/jack/jayce/v0004/io/Tokenizer.java
index 05e170b..66a510b 100644
--- a/jack/src/com/android/jack/jayce/v0004/io/Tokenizer.java
+++ b/jack/src/com/android/jack/jayce/v0004/io/Tokenizer.java
@@ -72,50 +72,97 @@
return in.readInt();
}
+ public void skipInt() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipInt();
+ }
+
public byte readByte() throws IOException {
currentTokenId = Token.NUMBER_VALUE;
return in.readByte();
}
+ public void skipByte() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipByte();
+ }
+
public boolean readBoolean() throws IOException {
return in.readBoolean();
}
+ public void skipBoolean() throws IOException {
+ in.skipBoolean();
+ }
+
public long readLong() throws IOException {
currentTokenId = Token.NUMBER_VALUE;
return in.readLong();
}
+ public void skipLong() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipLong();
+ }
+
public short readShort() throws IOException {
currentTokenId = Token.NUMBER_VALUE;
return in.readShort();
}
+ public void skipShort() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipShort();
+ }
+
public char readChar() throws IOException {
currentTokenId = Token.NUMBER_VALUE;
return in.readChar();
}
+ public void skipChar() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipChar();
+ }
+
public float readFloat() throws IOException {
currentTokenId = Token.NUMBER_VALUE;
return Float.intBitsToFloat(readInt());
}
+ public void skipFloat() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipInt();
+ }
+
public double readDouble() throws IOException {
currentTokenId = Token.NUMBER_VALUE;
return Double.longBitsToDouble(readLong());
}
+ public void skipDouble() throws IOException {
+ currentTokenId = Token.NUMBER_VALUE;
+ in.skipLong();
+ }
+
@CheckForNull
public String readString() throws IOException {
return in.readUTF();
}
+ public void skipString() throws IOException {
+ in.skipUTF();
+ }
+
@CheckForNull
public byte[] readBuffer() throws IOException {
return in.readBuffer();
}
+ public void skipBuffer() throws IOException {
+ in.skipBuffer();
+ }
+
private void readToken(@Nonnull Token expected) throws IOException {
next();
if (currentTokenId != expected) {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAbsentArrayDimension.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAbsentArrayDimension.java
index 7db047c..d7694cb 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAbsentArrayDimension.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAbsentArrayDimension.java
@@ -58,6 +58,10 @@
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
}
+ @SuppressWarnings("unused")
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAddOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAddOperation.java
index 425bba3..b030c0f 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAddOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAddOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAlloc.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAlloc.java
index 012aa0f..4c4edfd 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAlloc.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAlloc.java
@@ -67,6 +67,10 @@
instanceType = in.readId();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAndOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAndOperation.java
index ea30700..85bf84e 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAndOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotation.java
index b1c6328..aef2425 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotation.java
@@ -101,6 +101,13 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipRetentionPolicyEnum();
+ in.skipId();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationMethod.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationMethod.java
index 1fd3113..1a033ef 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationMethod.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationMethod.java
@@ -123,6 +123,15 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipId();
+ in.skipInt();
+ in.skipNodes();
+ in.skipNode();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationType.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationType.java
index 116bed3..bed6f8c 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationType.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAnnotationType.java
@@ -152,6 +152,22 @@
}
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ NodeLevel level = in.getNodeLevel();
+ in.skipRetentionPolicyEnum();
+ in.skipInt();
+ in.skipId();
+ if (level != NodeLevel.TYPES) {
+ in.skipIds();
+ in.skipId();
+ in.skipIds();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ }
+ }
+
@Nonnull
@Override
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLength.java b/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLength.java
index dc54cb6..223b9c9 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLength.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLength.java
@@ -70,6 +70,10 @@
instance = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLiteral.java
index f501add..3a72b9c 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NArrayLiteral.java
@@ -74,6 +74,10 @@
values = in.readNodes(NLiteral.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NArrayRef.java b/jack/src/com/android/jack/jayce/v0004/nodes/NArrayRef.java
index 31183f6..3388d63 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NArrayRef.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NArrayRef.java
@@ -78,6 +78,11 @@
index = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgAddOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgAddOperation.java
index 09def26..23cc134 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgAddOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgAddOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitAndOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitAndOperation.java
index de764be..8859a8b 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitAndOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitOrOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitOrOperation.java
index fc29f33..ae27f55 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitOrOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitXorOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitXorOperation.java
index 696cee5..6af8985 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitXorOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgBitXorOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgConcatOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgConcatOperation.java
index d62176f..ebf8e24 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgConcatOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgConcatOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgDivOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgDivOperation.java
index b0bc219..22fbcaf 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgDivOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgDivOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgModOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgModOperation.java
index 14431fd..f980005 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgModOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgModOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgMulOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgMulOperation.java
index 5301fea..f6cbbb2 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgMulOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgMulOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgOperation.java
index af72b4b..e5f1b12 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShlOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShlOperation.java
index 9ae3860..dee5fb8 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShlOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShlOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShrOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShrOperation.java
index 317ce2b..b3f7eaa 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShrOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShruOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShruOperation.java
index 7185899..bba5720 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShruOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgShruOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgSubOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgSubOperation.java
index 29abd39..e309a62 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAsgSubOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAsgSubOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NAssertStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NAssertStatement.java
index 6be2deb..156943d 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NAssertStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NAssertStatement.java
@@ -92,6 +92,11 @@
arg = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.readNode(NExpression.class);
+ in.readNode(NExpression.class);
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NBitAndOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NBitAndOperation.java
index f863a65..d440903 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NBitAndOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NBitAndOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NBitOrOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NBitOrOperation.java
index 705fb11..8aef5a1 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NBitOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NBitOrOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NBitXorOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NBitXorOperation.java
index 34e2d4e..91d1a9f 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NBitXorOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NBitXorOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NBlock.java b/jack/src/com/android/jack/jayce/v0004/nodes/NBlock.java
index 1346104..f338a47 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NBlock.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NBlock.java
@@ -80,6 +80,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NBooleanLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NBooleanLiteral.java
index 75d9ac9..f9206da 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NBooleanLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NBooleanLiteral.java
@@ -63,6 +63,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipBoolean();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NBreakStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NBreakStatement.java
index b46667c..527a955 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NBreakStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NBreakStatement.java
@@ -75,6 +75,10 @@
label = in.readString();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NByteLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NByteLiteral.java
index 2e3ef7f..945e419 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NByteLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NByteLiteral.java
@@ -64,6 +64,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipByte();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NCaseStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NCaseStatement.java
index 3af72a0..8556f83 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NCaseStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NCaseStatement.java
@@ -88,6 +88,11 @@
expr = in.readNode(NLiteral.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NCatchBlock.java b/jack/src/com/android/jack/jayce/v0004/nodes/NCatchBlock.java
index 3083355..688ebb4 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NCatchBlock.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NCatchBlock.java
@@ -114,6 +114,13 @@
statements = in.readNodes(NStatement.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipIds();
+ in.skipNode();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NCharLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NCharLiteral.java
index f85b784..a859a57 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NCharLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NCharLiteral.java
@@ -63,6 +63,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipChar();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NClassLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NClassLiteral.java
index 22c545c..679c0ef 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NClassLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NClassLiteral.java
@@ -70,6 +70,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NClassType.java b/jack/src/com/android/jack/jayce/v0004/nodes/NClassType.java
index b52fdb7..4e962fa 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NClassType.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NClassType.java
@@ -216,6 +216,24 @@
}
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ NodeLevel nodeLevel = in.getNodeLevel();
+ in.skipInt();
+ in.skipId();
+ if (nodeLevel != NodeLevel.TYPES) {
+ in.skipId();
+ in.skipIds();
+ in.skipId();
+ in.skipId();
+ in.skipId();
+ in.skipIds();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ }
+ }
+
@Nonnull
@Override
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NConcatOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NConcatOperation.java
index 786fe03..7541a76 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NConcatOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NConcatOperation.java
@@ -78,6 +78,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NConditionalExpression.java b/jack/src/com/android/jack/jayce/v0004/nodes/NConditionalExpression.java
index ce33747..7faf691 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NConditionalExpression.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NConditionalExpression.java
@@ -88,6 +88,12 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NConstructor.java b/jack/src/com/android/jack/jayce/v0004/nodes/NConstructor.java
index 0580754..99e6f3b 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NConstructor.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NConstructor.java
@@ -107,6 +107,14 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ in.skipInt();
+ in.skipNodes();
+ in.skipNode();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NContainerAnnotation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NContainerAnnotation.java
index 9312b54..58f5db0 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NContainerAnnotation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NContainerAnnotation.java
@@ -72,6 +72,11 @@
annotationTypeSig = in.readId();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipRetentionPolicyEnum();
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NContinueStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NContinueStatement.java
index 6bfcc87..a059e63 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NContinueStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NContinueStatement.java
@@ -77,6 +77,10 @@
label = in.readString();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NDebugVariableInfo.java b/jack/src/com/android/jack/jayce/v0004/nodes/NDebugVariableInfo.java
index 7460a32..e26dc30 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NDebugVariableInfo.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NDebugVariableInfo.java
@@ -57,17 +57,18 @@
@Override
@Nonnull
public DebugVariableInfoMarker exportAsJast(@Nonnull ExportSession exportSession) {
+ if (name == null && type == null) {
+ return DebugVariableInfoMarker.NO_DEBUG_INFO;
+ }
+
assert name != null;
assert type != null;
-
return new DebugVariableInfoMarker(name, exportSession.getLookup().getType(type),
genericSignature);
}
@Override
public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
- assert name != null;
- assert type != null;
out.writeString(name);
out.writeId(type);
out.writeString(genericSignature);
@@ -80,6 +81,12 @@
genericSignature = in.readString();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ in.skipId();
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NDivOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NDivOperation.java
index 0e0ae0c..7838b04 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NDivOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NDivOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NDoStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NDoStatement.java
index c4bd69e..20b05fb 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NDoStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NDoStatement.java
@@ -87,6 +87,11 @@
body = in.readNode(NStatement.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NDoubleLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NDoubleLiteral.java
index 6bd87ab..41fdf72 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NDoubleLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NDoubleLiteral.java
@@ -64,6 +64,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipDouble();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NDynamicCastOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NDynamicCastOperation.java
index 30ea886..3f1b3eb 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NDynamicCastOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NDynamicCastOperation.java
@@ -85,6 +85,11 @@
expr = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipIds();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NEnumField.java b/jack/src/com/android/jack/jayce/v0004/nodes/NEnumField.java
index e8a16ec..3083446 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NEnumField.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NEnumField.java
@@ -114,6 +114,16 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipInt();
+ in.skipId();
+ in.skipId();
+ in.skipNode();
+ in.skipInt();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NEnumLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NEnumLiteral.java
index bb57bf0..1af3fee 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NEnumLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NEnumLiteral.java
@@ -84,6 +84,11 @@
enumFieldName = in.readId();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NEnumType.java b/jack/src/com/android/jack/jayce/v0004/nodes/NEnumType.java
index d2ff72c..149ccd2 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NEnumType.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NEnumType.java
@@ -174,6 +174,24 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ NodeLevel nodeLevel = in.getNodeLevel();
+ in.skipInt();
+ in.skipId();
+ if (nodeLevel != NodeLevel.TYPES) {
+ in.skipId();
+ in.skipIds();
+ in.skipId();
+ in.skipId();
+ in.skipId();
+ in.skipIds();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ }
+ }
+
@Nonnull
@Override
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NEqOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NEqOperation.java
index b324435..bd38f9e 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NEqOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NEqOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NExceptionRuntimeValue.java b/jack/src/com/android/jack/jayce/v0004/nodes/NExceptionRuntimeValue.java
index 75c7ccc..5f8e340 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NExceptionRuntimeValue.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NExceptionRuntimeValue.java
@@ -67,6 +67,10 @@
catchedType = in.readId();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NExpressionStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NExpressionStatement.java
index 01e3dac..bba18f3 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NExpressionStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NExpressionStatement.java
@@ -81,6 +81,10 @@
expression = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NField.java b/jack/src/com/android/jack/jayce/v0004/nodes/NField.java
index 174a6bb..dfb2f15 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NField.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NField.java
@@ -142,6 +142,15 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipInt();
+ in.skipId();
+ in.skipId();
+ in.skipNode();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NFieldInitializer.java b/jack/src/com/android/jack/jayce/v0004/nodes/NFieldInitializer.java
index 539f6d1..aedae4f 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NFieldInitializer.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NFieldInitializer.java
@@ -59,6 +59,11 @@
throw new UnsupportedOperationException();
}
+ @SuppressWarnings("unused")
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) {
+ throw new UnsupportedOperationException();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NFieldRef.java b/jack/src/com/android/jack/jayce/v0004/nodes/NFieldRef.java
index 9009afc..2f3f472 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NFieldRef.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NFieldRef.java
@@ -105,6 +105,14 @@
instance = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipId();
+ in.readId();
+ in.skipFieldRefKindEnum();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NFloatLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NFloatLiteral.java
index f2cb5a0..dc354d9 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NFloatLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NFloatLiteral.java
@@ -64,6 +64,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipFloat();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NForStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NForStatement.java
index c746c7c..e0b8b65 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NForStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NForStatement.java
@@ -116,6 +116,13 @@
body = in.readNode(NStatement.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ in.skipNode();
+ in.skipNodes();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NGenericSignature.java b/jack/src/com/android/jack/jayce/v0004/nodes/NGenericSignature.java
index a352bd8..ebcfec6 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NGenericSignature.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NGenericSignature.java
@@ -62,6 +62,10 @@
genericSignature = in.readString();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NGoto.java b/jack/src/com/android/jack/jayce/v0004/nodes/NGoto.java
index 8845cf1..1854584 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NGoto.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NGoto.java
@@ -78,6 +78,10 @@
target = in.readId();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NGtOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NGtOperation.java
index 0baeb71..fb61d28 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NGtOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NGtOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NGteOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NGteOperation.java
index 45d1848..875dcb9 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NGteOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NGteOperation.java
@@ -76,6 +76,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NIfStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NIfStatement.java
index 9e701c4..769fcef 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NIfStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NIfStatement.java
@@ -98,6 +98,12 @@
elseStatement = in.readNode(NStatement.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NInstanceOf.java b/jack/src/com/android/jack/jayce/v0004/nodes/NInstanceOf.java
index 07134d3..70b3824 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NInstanceOf.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NInstanceOf.java
@@ -79,6 +79,11 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NIntLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NIntLiteral.java
index a15f270..acbda0b 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NIntLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NIntLiteral.java
@@ -63,6 +63,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipInt();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NInterfaceType.java b/jack/src/com/android/jack/jayce/v0004/nodes/NInterfaceType.java
index 721e086..e779bd8 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NInterfaceType.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NInterfaceType.java
@@ -166,6 +166,21 @@
}
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ NodeLevel nodeLevel = in.getNodeLevel();
+ in.skipInt();
+ in.skipId();
+ if (nodeLevel != NodeLevel.TYPES) {
+ in.skipIds();
+ in.skipId();
+ in.skipIds();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ in.skipNodes();
+ }
+ }
+
@Nonnull
@Override
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLabeledStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLabeledStatement.java
index a462c24..c605aaf 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLabeledStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLabeledStatement.java
@@ -97,6 +97,12 @@
body = in.readNode(NStatement.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ in.skipId();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLambda.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLambda.java
index 4684f08..818bbf7 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLambda.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLambda.java
@@ -213,6 +213,22 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ in.skipReceiverKindEnum();
+ in.skipId();
+ in.skipId();
+ in.skipIds();
+ in.skipMethodKindEnum();
+ in.skipId();
+ in.skipId();
+ in.skipIds();
+ in.skipNode();
+ in.skipNode();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLambdaFromJill.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLambdaFromJill.java
index 00ad245..3cbf53f 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLambdaFromJill.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLambdaFromJill.java
@@ -53,6 +53,10 @@
public void readContent(@Nonnull JayceInternalReaderImpl in) {
}
+ @SuppressWarnings("unused")
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) {
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLocal.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLocal.java
index e435df2..bf7a9d8 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLocal.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLocal.java
@@ -113,6 +113,15 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipInt();
+ in.skipId();
+ in.skipId();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLocalRef.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLocalRef.java
index 1c98dac..cd91aa7 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLocalRef.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLocalRef.java
@@ -16,6 +16,7 @@
package com.android.jack.jayce.v0004.nodes;
+import com.android.jack.debug.DebugVariableInfoMarker;
import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JLocalUnresolved;
import com.android.jack.jayce.linker.VariableRefLinker;
@@ -24,6 +25,7 @@
import com.android.jack.jayce.v0004.io.JayceInternalReaderImpl;
import com.android.jack.jayce.v0004.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0004.io.Token;
+import com.android.sched.marker.Marker;
import java.io.IOException;
import java.util.Collections;
@@ -62,8 +64,11 @@
JLocalRef jLocalRef = JLocalUnresolved.INSTANCE.makeRef(sourceInfo);
exportSession.getVariableResolver().addLink(localId, new VariableRefLinker(jLocalRef));
- for (NMarker marker : markers) {
- jLocalRef.addMarker(marker.exportAsJast(exportSession));
+ for (NMarker nmarker : markers) {
+ Marker marker = nmarker.exportAsJast(exportSession);
+ assert !(marker instanceof DebugVariableInfoMarker)
+ || marker != DebugVariableInfoMarker.NO_DEBUG_INFO;
+ jLocalRef.addMarker(marker);
}
return jLocalRef;
@@ -81,6 +86,11 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLock.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLock.java
index 6a5bffe..78a35c9 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLock.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLock.java
@@ -80,6 +80,10 @@
lockExpr = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLongLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLongLiteral.java
index 420b639..c102938 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLongLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLongLiteral.java
@@ -63,6 +63,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipLong();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLtOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLtOperation.java
index 2372e7b..e49d635 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLtOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLtOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NLteOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NLteOperation.java
index 3d0b362..36b29eb 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NLteOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NLteOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMethod.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMethod.java
index dccf59b..044052e 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMethod.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMethod.java
@@ -196,6 +196,17 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipId();
+ in.skipNodes();
+ in.skipMethodKindEnum();
+ in.skipInt();
+ in.skipNodes();
+ in.skipNode();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodBody.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodBody.java
index 251efc5..f633bab 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodBody.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodBody.java
@@ -81,6 +81,11 @@
block = in.readNode(NBlock.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodCall.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodCall.java
index dbdaf8a..89696ce 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodCall.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodCall.java
@@ -21,7 +21,7 @@
import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JMethodCall.DispatchKind;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JTypeLookupException;
import com.android.jack.ir.ast.MethodKind;
@@ -87,9 +87,9 @@
instance = (NExpression) loader.load(jMethodCall.getInstance());
receiverType = ImportHelper.getSignatureName(jMethodCall.getReceiverType());
receiverKind = getReceiverKind(jMethodCall);
- methodName = jMethodCall.getMethodId().getName();
- methodArgsType = ImportHelper.getMethodArgsSignature(jMethodCall.getMethodId());
- methodKind = jMethodCall.getMethodId().getKind();
+ methodName = jMethodCall.getMethodIdWide().getName();
+ methodArgsType = ImportHelper.getMethodArgsSignature(jMethodCall.getMethodIdWide());
+ methodKind = jMethodCall.getMethodIdWide().getKind();
returnType = ImportHelper.getSignatureName(jMethodCall.getType());
args = loader.load(NExpression.class, jMethodCall.getArgs());
dispatchKind = jMethodCall.getDispatchKind();
@@ -120,11 +120,11 @@
} else {
jReceiverType = exportSession.getLookup().getInterface(receiverType);
}
- JMethodIdWide methodId = jReceiverType.getOrCreateMethodIdWide(methodName,
- exportSession.getTypeListFromSignatureList(methodArgsType), methodKind);
JType jReturnType = exportSession.getLookup().getType(returnType);
+ JMethodId methodId = jReceiverType.getOrCreateMethodId(methodName,
+ exportSession.getTypeListFromSignatureList(methodArgsType), methodKind, jReturnType);
JMethodCall jMethodCall = new JMethodCall(sourceInfo, jInstance, jReceiverType, methodId,
- jReturnType, dispatchKind == DispatchKind.VIRTUAL /* isVirtualDispatch */);
+ dispatchKind == DispatchKind.VIRTUAL /* isVirtualDispatch */);
for (NExpression arg : args) {
jMethodCall.addArg(arg.exportAsJast(exportSession));
}
@@ -164,6 +164,18 @@
dispatchKind = in.readDispatchKindEnum();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipId();
+ in.skipReceiverKindEnum();
+ in.skipId();
+ in.skipIds();
+ in.skipMethodKindEnum();
+ in.skipId();
+ in.skipNodes();
+ in.skipDispatchKindEnum();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodId.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodId.java
index 8bcfb3f..329390f 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodId.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodId.java
@@ -95,6 +95,13 @@
paramTypeSigs = in.readIds();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipMethodKindEnum();
+ in.skipId();
+ in.skipIds();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodLiteral.java
index ac4f67a..1455182 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMethodLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMethodLiteral.java
@@ -81,6 +81,11 @@
methodEnclosingType = in.readId();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NModOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NModOperation.java
index 1a5acd2..0556021 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NModOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NModOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMulOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMulOperation.java
index 3875055..82dd870 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMulOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMulOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NMultiExpression.java b/jack/src/com/android/jack/jayce/v0004/nodes/NMultiExpression.java
index 316c3b6..d9bdf53 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NMultiExpression.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NMultiExpression.java
@@ -75,6 +75,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NNameValuePair.java b/jack/src/com/android/jack/jayce/v0004/nodes/NNameValuePair.java
index ceac9cf..f41c5ae 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NNameValuePair.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NNameValuePair.java
@@ -98,6 +98,11 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NNativeMethodBody.java b/jack/src/com/android/jack/jayce/v0004/nodes/NNativeMethodBody.java
index 5f5a7bb..ce1a0f8 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NNativeMethodBody.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NNativeMethodBody.java
@@ -23,8 +23,6 @@
import com.android.jack.jayce.v0004.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0004.io.Token;
-import java.io.IOException;
-
import javax.annotation.Nonnull;
/**
@@ -49,15 +47,18 @@
return jNativeMethodBody;
}
- @SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
+ public void writeContent(@Nonnull JayceInternalWriterImpl out) {
+
+ }
+
+ @Override
+ public void readContent(@Nonnull JayceInternalReaderImpl in) {
}
@SuppressWarnings("unused")
- @Override
- public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) {
}
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NNeqOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NNeqOperation.java
index 6b25e7d..2131cef 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NNeqOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NNeqOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NNewArray.java b/jack/src/com/android/jack/jayce/v0004/nodes/NNewArray.java
index 0db2fee..44e6105 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NNewArray.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NNewArray.java
@@ -97,6 +97,12 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NNewInstance.java b/jack/src/com/android/jack/jayce/v0004/nodes/NNewInstance.java
index befc010..450ecb8 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NNewInstance.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NNewInstance.java
@@ -17,8 +17,9 @@
package com.android.jack.jayce.v0004.nodes;
import com.android.jack.ir.ast.JClassOrInterface;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewInstance;
+import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JTypeLookupException;
import com.android.jack.ir.ast.MethodKind;
import com.android.jack.jayce.v0004.io.ExportSession;
@@ -48,7 +49,7 @@
public void importFromJast(@Nonnull ImportHelper loader, @Nonnull Object node) {
JNewInstance jNewInstance = (JNewInstance) node;
receiverType = ImportHelper.getSignatureName(jNewInstance.getReceiverType());
- methodArgsType = ImportHelper.getMethodArgsSignature(jNewInstance.getMethodId());
+ methodArgsType = ImportHelper.getMethodArgsSignature(jNewInstance.getMethodIdWide());
args = loader.load(NExpression.class, jNewInstance.getArgs());
sourceInfo = jNewInstance.getSourceInfo();
}
@@ -66,9 +67,9 @@
assert methodArgsType != null;
assert args != null;
JClassOrInterface jReceiverType = exportSession.getLookup().getClass(receiverType);
- JMethodIdWide methodId = jReceiverType.getOrCreateMethodIdWide(INIT_NAME,
+ JMethodId methodId = jReceiverType.getOrCreateMethodId(INIT_NAME,
exportSession.getTypeListFromSignatureList(methodArgsType),
- MethodKind.INSTANCE_NON_VIRTUAL);
+ MethodKind.INSTANCE_NON_VIRTUAL, JPrimitiveTypeEnum.VOID.getType());
JNewInstance jNewInstance = new JNewInstance(sourceInfo, jReceiverType, methodId);
for (NExpression arg : args) {
jNewInstance.addArg(arg.exportAsJast(exportSession));
@@ -92,6 +93,12 @@
args = in.readNodes(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipIds();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NNullLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NNullLiteral.java
index 769d0b7..e22cd0a 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NNullLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NNullLiteral.java
@@ -23,8 +23,6 @@
import com.android.jack.jayce.v0004.io.JayceInternalWriterImpl;
import com.android.jack.jayce.v0004.io.Token;
-import java.io.IOException;
-
import javax.annotation.Nonnull;
/**
@@ -49,14 +47,16 @@
return jNullLiteral;
}
- @SuppressWarnings("unused")
@Override
- public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
+ public void writeContent(@Nonnull JayceInternalWriterImpl out) {
+ }
+
+ @Override
+ public void readContent(@Nonnull JayceInternalReaderImpl in) {
}
@SuppressWarnings("unused")
- @Override
- public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) {
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NOrOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NOrOperation.java
index 4bd4792..a45747b 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NOrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NOrOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NOriginDigest.java b/jack/src/com/android/jack/jayce/v0004/nodes/NOriginDigest.java
index 1e12bdc..6e0a5d9 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NOriginDigest.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NOriginDigest.java
@@ -91,6 +91,15 @@
minor = in.readInt();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipInt();
+ in.skipString();
+ in.skipBuffer();
+ in.skipString();
+ in.skipInt();
+ in.skipInt();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NParameter.java b/jack/src/com/android/jack/jayce/v0004/nodes/NParameter.java
index f46a279..9f8ff0e 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NParameter.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NParameter.java
@@ -90,7 +90,6 @@
@Nonnull JayceMethodLoader enclosingMethodLoader) throws JTypeLookupException {
assert sourceInfo != null;
assert type != null;
- assert name != null;
JParameter jParameter = new JParameter(
sourceInfo,
name,
@@ -127,6 +126,15 @@
markers = in.readNodes(NMarker.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipInt();
+ in.skipId();
+ in.skipId();
+ in.skipNodes();
+ in.skipNodes();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NParameterRef.java b/jack/src/com/android/jack/jayce/v0004/nodes/NParameterRef.java
index e5c05ed..84f1d13 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NParameterRef.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NParameterRef.java
@@ -26,6 +26,8 @@
import com.android.jack.jayce.v0004.io.Token;
import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -41,11 +43,15 @@
@CheckForNull
public String localId;
+ @Nonnull
+ public List<NMarker> markers = Collections.emptyList();
+
@Override
public void importFromJast(@Nonnull ImportHelper loader, @Nonnull Object node) {
JParameterRef jRef = (JParameterRef) node;
localId = loader.getVariableSymbols().getId(jRef.getParameter());
sourceInfo = jRef.getSourceInfo();
+ markers = loader.load(NMarker.class, jRef.getAllMarkers());
}
@Override
@@ -55,17 +61,27 @@
assert localId != null;
JParameterRef jRef = JParameterUnresolved.INSTANCE.makeRef(sourceInfo);
exportSession.getVariableResolver().addLink(localId, new VariableRefLinker(jRef));
+ for (NMarker marker : markers) {
+ jRef.addMarker(marker.exportAsJast(exportSession));
+ }
return jRef;
}
@Override
public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException {
out.writeId(localId);
+ out.writeNodes(markers);
}
@Override
public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
localId = in.readId();
+ markers = in.readNodes(NMarker.class);
+ }
+
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipNodes();
}
@Override
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPolymorphicCall.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPolymorphicCall.java
index 5cbdc71..344ab10 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPolymorphicCall.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPolymorphicCall.java
@@ -84,9 +84,9 @@
instance = (NExpression) loader.load(pmc.getInstance());
receiverType = ImportHelper.getSignatureName(pmc.getReceiverType());
receiverKind = getReceiverKind(pmc);
- methodName = pmc.getMethodId().getName();
- methodArgsType = ImportHelper.getMethodArgsSignature(pmc.getMethodId());
- methodKind = pmc.getMethodId().getKind();
+ methodName = pmc.getMethodIdWide().getName();
+ methodArgsType = ImportHelper.getMethodArgsSignature(pmc.getMethodIdWide());
+ methodKind = pmc.getMethodIdWide().getKind();
returnType = ImportHelper.getSignatureName(pmc.getReturnTypeOfPolymorphicMethod());
args = loader.load(NExpression.class, pmc.getArgs());
sourceInfo = pmc.getSourceInfo();
@@ -175,6 +175,19 @@
callSiteParameterStrTypes = in.readIds();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipId();
+ in.skipReceiverKindEnum();
+ in.skipId();
+ in.skipIds();
+ in.skipMethodKindEnum();
+ in.skipId();
+ in.skipNodes();
+ in.skipId();
+ in.skipIds();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixDecOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixDecOperation.java
index a0c89a7..e0b95b2 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixDecOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixDecOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixIncOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixIncOperation.java
index bcdfd51..25509fe 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixIncOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPostfixIncOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixBitNotOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixBitNotOperation.java
index 7d3c334..02c0770 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixBitNotOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixBitNotOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixDecOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixDecOperation.java
index 832028d..6b1ab6d 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixDecOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixDecOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixIncOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixIncOperation.java
index 62703e0..29b030b 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixIncOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixIncOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNegOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNegOperation.java
index e79a7c3..be1f706 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNegOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNegOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNotOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNotOperation.java
index 04dc90d..c6fb7e9 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNotOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NPrefixNotOperation.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NReinterpretCastOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NReinterpretCastOperation.java
index 488bf0b..3a8ea08 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NReinterpretCastOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NReinterpretCastOperation.java
@@ -81,6 +81,11 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NReturnStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NReturnStatement.java
index 1336e06..d94630a 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NReturnStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NReturnStatement.java
@@ -79,6 +79,10 @@
expr = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NShlOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NShlOperation.java
index c0d15d6..71be6ee 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NShlOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NShlOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NShortLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NShortLiteral.java
index b68e477..e7b93f5 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NShortLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NShortLiteral.java
@@ -63,6 +63,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipShort();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NShrOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NShrOperation.java
index 9c7786e..1ea6327 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NShrOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NShrOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NShruOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NShruOperation.java
index e52f0cb..efdc95e 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NShruOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NShruOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NSimpleName.java b/jack/src/com/android/jack/jayce/v0004/nodes/NSimpleName.java
index 011d736..12a40cb 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NSimpleName.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NSimpleName.java
@@ -63,6 +63,10 @@
simpleName = in.readString();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NStringLiteral.java b/jack/src/com/android/jack/jayce/v0004/nodes/NStringLiteral.java
index 83cb03d..ab6c513 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NStringLiteral.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NStringLiteral.java
@@ -67,6 +67,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NSubOperation.java b/jack/src/com/android/jack/jayce/v0004/nodes/NSubOperation.java
index 82cf998..716e043 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NSubOperation.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NSubOperation.java
@@ -75,6 +75,11 @@
rhs = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NSwitchStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NSwitchStatement.java
index bda2846..4e35d0e 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NSwitchStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NSwitchStatement.java
@@ -108,6 +108,12 @@
body = in.readNode(NBlock.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipIds();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NSynchronizedBlock.java b/jack/src/com/android/jack/jayce/v0004/nodes/NSynchronizedBlock.java
index 09ca751..24f2be5 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NSynchronizedBlock.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NSynchronizedBlock.java
@@ -92,6 +92,11 @@
synchronizedBlock = in.readNode(NBlock.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.readNode(NExpression.class);
+ in.readNode(NBlock.class);
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NThisRef.java b/jack/src/com/android/jack/jayce/v0004/nodes/NThisRef.java
index faa5439..d41ede5 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NThisRef.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NThisRef.java
@@ -68,6 +68,10 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipId();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NThisRefTypeInfo.java b/jack/src/com/android/jack/jayce/v0004/nodes/NThisRefTypeInfo.java
index e35325e..9739baa 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NThisRefTypeInfo.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NThisRefTypeInfo.java
@@ -65,6 +65,10 @@
genericSignature = in.readString();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipString();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NThrowStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NThrowStatement.java
index f28846f..f077a9f 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NThrowStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NThrowStatement.java
@@ -80,6 +80,10 @@
expr = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NThrownExceptionMarker.java b/jack/src/com/android/jack/jayce/v0004/nodes/NThrownExceptionMarker.java
index e6e26ad..6abc1a8 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NThrownExceptionMarker.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NThrownExceptionMarker.java
@@ -70,6 +70,10 @@
thrownExceptions = in.readIds();
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipIds();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NTryStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NTryStatement.java
index e86f0c9..3434822 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NTryStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NTryStatement.java
@@ -109,6 +109,13 @@
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNodes();
+ in.skipNode();
+ in.skipNodes();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NUnlock.java b/jack/src/com/android/jack/jayce/v0004/nodes/NUnlock.java
index 335b958..cfbd394 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NUnlock.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NUnlock.java
@@ -80,6 +80,10 @@
lockExpr = in.readNode(NExpression.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/jayce/v0004/nodes/NWhileStatement.java b/jack/src/com/android/jack/jayce/v0004/nodes/NWhileStatement.java
index 9503353..230c976 100644
--- a/jack/src/com/android/jack/jayce/v0004/nodes/NWhileStatement.java
+++ b/jack/src/com/android/jack/jayce/v0004/nodes/NWhileStatement.java
@@ -87,6 +87,11 @@
body = in.readNode(NStatement.class);
}
+ public static void skipContent(@Nonnull JayceInternalReaderImpl in) throws IOException {
+ in.skipNode();
+ in.skipNode();
+ }
+
@Override
@Nonnull
public Token getToken() {
diff --git a/jack/src/com/android/jack/library/InputLibraryCodec.java b/jack/src/com/android/jack/library/InputLibraryCodec.java
index ef03159..8460be1 100644
--- a/jack/src/com/android/jack/library/InputLibraryCodec.java
+++ b/jack/src/com/android/jack/library/InputLibraryCodec.java
@@ -37,7 +37,6 @@
@CheckForNull
private String infoString;
- @SuppressWarnings("unchecked")
public InputLibraryCodec() {
super(new InputJackLibraryCodec(), new JarLibraryCodec());
}
diff --git a/jack/src/com/android/jack/library/JackLibraryFactory.java b/jack/src/com/android/jack/library/JackLibraryFactory.java
index b06d490..216066c 100644
--- a/jack/src/com/android/jack/library/JackLibraryFactory.java
+++ b/jack/src/com/android/jack/library/JackLibraryFactory.java
@@ -109,7 +109,7 @@
try {
InputVFile libProp =
- vfs.getRootInputVDir().getInputVFile(JackLibrary.LIBRARY_PROPERTIES_VPATH);
+ vfs.getRootDir().getInputVFile(JackLibrary.LIBRARY_PROPERTIES_VPATH);
InputStream inputStream = null;
try {
inputStream = libProp.getInputStream();
diff --git a/jack/src/com/android/jack/library/LibraryLocation.java b/jack/src/com/android/jack/library/LibraryLocation.java
index fd39eb7..f1bd451 100644
--- a/jack/src/com/android/jack/library/LibraryLocation.java
+++ b/jack/src/com/android/jack/library/LibraryLocation.java
@@ -51,4 +51,9 @@
public final int hashCode() {
return sourceLocation.hashCode();
}
+
+ @Override
+ public String toString() {
+ return sourceLocation.toString();
+ }
}
diff --git a/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java
index bbae7b4..5f46389 100644
--- a/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java
@@ -73,7 +73,7 @@
// V0 libraries can have resources added by Jill but without the boolean resource property set
// to true, thus we add the resource file type if resources exist (files others than
// jack.properties and jayce files)
- fillResources(inputVFS.getRootInputVDir(), resources);
+ fillResources(inputVFS.getRootDir(), resources);
if (!resources.isEmpty()) {
fileTypes.add(FileType.RSC);
}
@@ -105,7 +105,7 @@
try {
VPath clonedPath = typePath.clone();
clonedPath.addSuffix(getExtension(fileType));
- return inputVFS.getRootInputVDir().getInputVFile(clonedPath);
+ return inputVFS.getRootDir().getInputVFile(clonedPath);
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
} catch (NoSuchFileException e) {
@@ -118,7 +118,7 @@
public InputVDir getDir(@Nonnull FileType fileType, @Nonnull VPath typePath)
throws FileTypeDoesNotExistException {
try {
- return inputVFS.getRootInputVDir().getInputVDir(typePath);
+ return inputVFS.getRootDir().getInputVDir(typePath);
} catch (NotDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
} catch (NoSuchFileException e) {
@@ -139,7 +139,7 @@
}
List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
- fillFiles(inputVFS.getRootInputVDir(), getExtension(fileType), inputVFiles);
+ fillFiles(inputVFS.getRootDir(), getExtension(fileType), inputVFiles);
return inputVFiles.iterator();
}
diff --git a/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java
index a89a87d..84f1c18 100644
--- a/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java
@@ -32,6 +32,7 @@
import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotDeleteFileException;
+import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileOrDirectoryException;
@@ -44,6 +45,7 @@
import com.android.sched.vfs.PrefixedFS;
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
+import com.android.sched.vfs.WrongVFSTypeException;
import java.util.ArrayList;
import java.util.EnumMap;
@@ -104,7 +106,7 @@
}
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- return currentSectionVFS.getRootInputVDir().getInputVFile(
+ return currentSectionVFS.getRootDir().getInputVFile(
buildFileVPath(fileType, typePath));
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
@@ -120,7 +122,7 @@
throws FileTypeDoesNotExistException {
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- return currentSectionVFS.getRootInputVDir().getInputVDir(typePath);
+ return currentSectionVFS.getRootDir().getInputVDir(typePath);
} catch (NotDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
} catch (NoSuchFileException e) {
@@ -136,7 +138,7 @@
}
List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
- fillFiles(getSectionVFS(fileType).getRootInputVDir(), inputVFiles);
+ fillFiles(getSectionVFS(fileType).getRootDir(), inputVFiles);
return inputVFiles.listIterator();
}
@@ -148,20 +150,23 @@
} else {
VFS prefixedInputVFS = null;
try {
- prefixedInputVFS = new PrefixedFS(vfs, getSectionPath(fileType));
+ prefixedInputVFS = new PrefixedFS(vfs, getSectionPath(fileType), Existence.MUST_EXIST);
+ } catch (WrongVFSTypeException e) {
+ // If library is well formed this exception cannot be triggered
+ throw new AssertionError(e);
} catch (CannotCreateFileException e) {
- // If library is well formed this exception can not be triggered
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
} catch (NotDirectoryException e) {
- // If library is well formed this exception can not be triggered
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
if (fileType == FileType.PREBUILT) {
try {
currentSectionVFS = new GenericInputVFS(new MessageDigestFS(prefixedInputVFS,
ThreadConfig.get(JackLibraryFactory.MESSAGE_DIGEST_ALGO)));
- } catch (BadVFSFormatException e) {
- // If library is well formed this exception can not be triggered
+ } catch (BadVFSFormatException | WrongVFSTypeException e) {
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
} else {
@@ -219,7 +224,7 @@
throws CannotDeleteFileException, FileTypeDoesNotExistException {
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- currentSectionVFS.getRootInputVDir().getInputVFile(buildFileVPath(fileType, typePath))
+ currentSectionVFS.getRootDir().getInputVFile(buildFileVPath(fileType, typePath))
.delete();
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
diff --git a/jack/src/com/android/jack/library/v0002/InputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0002/InputJackLibraryImpl.java
index 3bbe5b8..52d231f 100644
--- a/jack/src/com/android/jack/library/v0002/InputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0002/InputJackLibraryImpl.java
@@ -37,6 +37,7 @@
import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotDeleteFileException;
+import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileOrDirectoryException;
@@ -49,6 +50,7 @@
import com.android.sched.vfs.PrefixedFS;
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
+import com.android.sched.vfs.WrongVFSTypeException;
import java.util.ArrayList;
import java.util.EnumMap;
@@ -111,7 +113,7 @@
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
}
InputVFS currentSectionVFS = getSectionVFS(fileType);
- return currentSectionVFS.getRootInputVDir().getInputVFile(
+ return currentSectionVFS.getRootDir().getInputVFile(
buildFileVPath(fileType, typePath));
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
@@ -127,7 +129,7 @@
throws FileTypeDoesNotExistException {
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- return currentSectionVFS.getRootInputVDir().getInputVDir(typePath);
+ return currentSectionVFS.getRootDir().getInputVDir(typePath);
} catch (NotDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
} catch (NoSuchFileException e) {
@@ -143,7 +145,7 @@
}
List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
- fillFiles(getSectionVFS(fileType).getRootInputVDir(), inputVFiles);
+ fillFiles(getSectionVFS(fileType).getRootDir(), inputVFiles);
return inputVFiles.listIterator();
}
@@ -155,20 +157,23 @@
} else {
VFS prefixedInputVFS = null;
try {
- prefixedInputVFS = new PrefixedFS(vfs, getSectionPath(fileType));
+ prefixedInputVFS = new PrefixedFS(vfs, getSectionPath(fileType), Existence.MUST_EXIST);
+ } catch (WrongVFSTypeException e) {
+ // If library is well formed this exception cannot be triggered
+ throw new AssertionError(e);
} catch (CannotCreateFileException e) {
- // If library is well formed this exception can not be triggered
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
} catch (NotDirectoryException e) {
- // If library is well formed this exception can not be triggered
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
if (fileType == FileType.PREBUILT) {
try {
currentSectionVFS = new GenericInputVFS(new MessageDigestFS(prefixedInputVFS,
ThreadConfig.get(JackLibraryFactory.MESSAGE_DIGEST_ALGO)));
- } catch (BadVFSFormatException e) {
- // If library is well formed this exception can not be triggered
+ } catch (BadVFSFormatException | WrongVFSTypeException e) {
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
} else {
@@ -226,7 +231,7 @@
throws CannotDeleteFileException, FileTypeDoesNotExistException {
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- currentSectionVFS.getRootInputVDir().getInputVFile(buildFileVPath(fileType, typePath))
+ currentSectionVFS.getRootDir().getInputVFile(buildFileVPath(fileType, typePath))
.delete();
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
diff --git a/jack/src/com/android/jack/library/v0003/InputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0003/InputJackLibraryImpl.java
index c7a498c..be416cc 100644
--- a/jack/src/com/android/jack/library/v0003/InputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0003/InputJackLibraryImpl.java
@@ -37,6 +37,7 @@
import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotDeleteFileException;
+import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileOrDirectoryException;
@@ -50,6 +51,7 @@
import com.android.sched.vfs.PrefixedFS;
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
+import com.android.sched.vfs.WrongVFSTypeException;
import java.util.ArrayList;
import java.util.EnumMap;
@@ -128,7 +130,7 @@
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
}
InputVFS currentSectionVFS = getSectionVFS(fileType);
- return currentSectionVFS.getRootInputVDir().getInputVFile(
+ return currentSectionVFS.getRootDir().getInputVFile(
buildFileVPath(fileType, typePath));
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
@@ -144,7 +146,7 @@
throws FileTypeDoesNotExistException {
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- return currentSectionVFS.getRootInputVDir().getInputVDir(typePath);
+ return currentSectionVFS.getRootDir().getInputVDir(typePath);
} catch (NotDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
} catch (NoSuchFileException e) {
@@ -160,7 +162,7 @@
}
List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
- fillFiles(getSectionVFS(fileType).getRootInputVDir(), inputVFiles);
+ fillFiles(getSectionVFS(fileType).getRootDir(), inputVFiles);
return inputVFiles.listIterator();
}
@@ -172,12 +174,15 @@
} else {
VFS inputVFS = null;
try {
- inputVFS = new PrefixedFS(vfs, getSectionPath(fileType));
+ inputVFS = new PrefixedFS(vfs, getSectionPath(fileType), Existence.MUST_EXIST);
+ } catch (WrongVFSTypeException e) {
+ // If library is well formed this exception cannot be triggered
+ throw new AssertionError(e);
} catch (CannotCreateFileException e) {
- // If library is well formed this exception can not be triggered
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
} catch (NotDirectoryException e) {
- // If library is well formed this exception can not be triggered
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
@@ -185,8 +190,8 @@
try {
inputVFS = new MessageDigestFS(inputVFS,
ThreadConfig.get(JackLibraryFactory.MESSAGE_DIGEST_ALGO));
- } catch (BadVFSFormatException e) {
- // If library is well formed this exception can not be triggered
+ } catch (BadVFSFormatException | WrongVFSTypeException e) {
+ // If library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
}
@@ -252,7 +257,7 @@
throws CannotDeleteFileException, FileTypeDoesNotExistException {
try {
InputVFS currentSectionVFS = getSectionVFS(fileType);
- currentSectionVFS.getRootInputVDir().getInputVFile(buildFileVPath(fileType, typePath))
+ currentSectionVFS.getRootDir().getInputVFile(buildFileVPath(fileType, typePath))
.delete();
} catch (NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
diff --git a/jack/src/com/android/jack/library/v0003/OutputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0003/OutputJackLibraryImpl.java
index 8f522b9..4bc401c 100644
--- a/jack/src/com/android/jack/library/v0003/OutputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0003/OutputJackLibraryImpl.java
@@ -32,6 +32,7 @@
import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotDeleteFileException;
+import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileOrDirectoryException;
@@ -51,6 +52,7 @@
import com.android.sched.vfs.PrefixedFS;
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
+import com.android.sched.vfs.WrongVFSTypeException;
import java.io.IOException;
import java.io.InputStream;
@@ -118,7 +120,7 @@
throws CannotCreateFileException {
assert !isClosed();
addFileType(fileType);
- return getSectionVFS(fileType).getRootOutputVDir()
+ return getSectionVFS(fileType).getRootDir()
.createOutputVFile(buildFileVPath(fileType, typePath));
}
@@ -143,18 +145,26 @@
VPath prefixPath = InputJackLibraryImpl.getSectionPath(fileType);
VFS outputVFS = null;
try {
- outputVFS = new PrefixedFS(vfs, prefixPath);
+ outputVFS = new PrefixedFS(vfs, prefixPath, Existence.MAY_EXIST);
if (generateJacklibDigest && fileType == FileType.PREBUILT) {
- outputVFS = new MessageDigestFS(outputVFS,
- ThreadConfig.get(JackLibraryFactory.MESSAGE_DIGEST_ALGO));
+ try {
+ outputVFS = new MessageDigestFS(outputVFS,
+ ThreadConfig.get(JackLibraryFactory.MESSAGE_DIGEST_ALGO));
+ } catch (WrongVFSTypeException e) {
+ // we want the digest to be there;
+ throw new AssertionError(e);
+ }
}
+ } catch (WrongVFSTypeException e) {
+ // prefix may not exist so this cannot happen
+ throw new AssertionError(e);
} catch (BadVFSFormatException e) {
- // if library is well formed and digest exists this exception can not be triggered
+ // if library is well formed this exception cannot be triggered
throw new AssertionError(e);
} catch (NotDirectoryException e) {
- // if library is well formed this exception can not be triggered
+ // if library is well formed this exception cannot be triggered
throw new AssertionError(e);
}
@@ -203,7 +213,7 @@
try {
goVFS = new GenericOutputVFS(vfs);
OutputVFile libraryPropertiesOut =
- goVFS.getRootOutputVDir().createOutputVFile(LIBRARY_PROPERTIES_VPATH);
+ goVFS.getRootDir().createOutputVFile(LIBRARY_PROPERTIES_VPATH);
OutputStream propertiesOS = null;
try {
@@ -253,7 +263,7 @@
List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
try {
- fillFiles(getSectionVFS(fileType).getRootInputVDir(), inputVFiles);
+ fillFiles(getSectionVFS(fileType).getRootDir(), inputVFiles);
} catch (CannotCreateFileException e) {
// we already checked that the library contained the file type
throw new AssertionError(e);
@@ -266,7 +276,7 @@
public InputOutputVFile getFile(@Nonnull FileType fileType, @Nonnull VPath typePath)
throws FileTypeDoesNotExistException {
try {
- return getSectionVFS(fileType).getRootInputOutputVDir()
+ return getSectionVFS(fileType).getRootDir()
.getInputVFile(buildFileVPath(fileType, typePath));
} catch (CannotCreateFileException | NoSuchFileException | NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
@@ -279,7 +289,7 @@
throws CannotDeleteFileException, FileTypeDoesNotExistException {
assert !isClosed();
try {
- getSectionVFS(fileType).getRootInputOutputVDir()
+ getSectionVFS(fileType).getRootDir()
.getInputVFile(buildFileVPath(fileType, typePath)).delete();
} catch (CannotCreateFileException | NoSuchFileException | NotFileOrDirectoryException e) {
throw new FileTypeDoesNotExistException(getLocation(), typePath, fileType);
@@ -314,7 +324,7 @@
throws NoSuchFileException {
InputVFile libProp;
try {
- libProp = vfs.getRootInputVDir().getInputVFile(JackLibrary.LIBRARY_PROPERTIES_VPATH);
+ libProp = vfs.getRootDir().getInputVFile(JackLibrary.LIBRARY_PROPERTIES_VPATH);
} catch (NotFileOrDirectoryException e) {
throw new AssertionError(e);
}
diff --git a/jack/src/com/android/jack/library/v0003/Version.java b/jack/src/com/android/jack/library/v0003/Version.java
index 197421a..077d1a2 100644
--- a/jack/src/com/android/jack/library/v0003/Version.java
+++ b/jack/src/com/android/jack/library/v0003/Version.java
@@ -21,9 +21,9 @@
*/
public class Version {
- public static final int MINOR_MIN = 4;
+ public static final int MINOR_MIN = 5;
- public static final int MINOR = 4;
+ public static final int MINOR = 5;
public static final int MAJOR = 3;
}
diff --git a/jack/src/com/android/jack/lookup/JLookup.java b/jack/src/com/android/jack/lookup/JLookup.java
index aaf0376..a431bbc 100644
--- a/jack/src/com/android/jack/lookup/JLookup.java
+++ b/jack/src/com/android/jack/lookup/JLookup.java
@@ -262,17 +262,22 @@
T type;
synchronized (cache) {
type = cache.get(signature);
+ }
- if (type == null) {
- int typeNameLength = signature.length();
- assert typeNameLength > 1 : "Invalid signature '" + signature + "'";
- if (signature.charAt(0) == '[') {
- type = (T) findArrayType(signature);
- } else {
- type = findClassOrInterface(signature, adapter);
- }
+ if (type == null) {
+ int typeNameLength = signature.length();
+ assert typeNameLength > 1 : "Invalid signature '" + signature + "'";
+ if (signature.charAt(0) == '[') {
+ type = (T) findArrayType(signature);
+ } else {
+ type = findClassOrInterface(signature, adapter);
+ }
+ synchronized (cache) {
+ // Model already ensures unicity of types, so the worst that could happen here would be to
+ // store the exact same type that is already stored.
+ assert cache.get(signature) == null || cache.get(signature) == type;
cache.put(signature, type);
- }
+ }
}
return type;
}
diff --git a/jack/src/com/android/jack/optimizations/ConstantRefiner.java b/jack/src/com/android/jack/optimizations/ConstantRefiner.java
index e934085..4d59c95 100644
--- a/jack/src/com/android/jack/optimizations/ConstantRefiner.java
+++ b/jack/src/com/android/jack/optimizations/ConstantRefiner.java
@@ -157,6 +157,7 @@
if (varRef.getParent() instanceof JCastOperation) {
JCastOperation cast = (JCastOperation) varRef.getParent();
+ assert cast != null;
if (cast.getType().isSameType(dm.getValue().getType())) {
// Remove useless cast directly since it trigger new opportunities.
tr.append(new Replace(cast, cloneExpr.cloneExpression(dm.getValue())));
diff --git a/jack/src/com/android/jack/optimizations/DefUsesChainsSimplifier.java b/jack/src/com/android/jack/optimizations/DefUsesChainsSimplifier.java
index ea057ce..05102fe 100644
--- a/jack/src/com/android/jack/optimizations/DefUsesChainsSimplifier.java
+++ b/jack/src/com/android/jack/optimizations/DefUsesChainsSimplifier.java
@@ -549,6 +549,9 @@
// conditions and apply optimization if they are satisfied.
processCandidatesWithDependencies(method, cfg, candidates, definitions);
- method.removeMarker(ReachingDefsMarker.class);
+ // Remove ReachingDefsMarker on every basic block.
+ for (BasicBlock bb : cfg.getNodes()) {
+ bb.removeMarker(ReachingDefsMarker.class);
+ }
}
}
diff --git a/jack/src/com/android/jack/optimizations/IfWithConstantSimplifier.java b/jack/src/com/android/jack/optimizations/IfWithConstantSimplifier.java
index c2b5800..1291564 100644
--- a/jack/src/com/android/jack/optimizations/IfWithConstantSimplifier.java
+++ b/jack/src/com/android/jack/optimizations/IfWithConstantSimplifier.java
@@ -107,38 +107,43 @@
JStatement elseStmt = ifStmt.getElseStmt();
for (DefinitionMarker dm : udm.getDefs()) {
+ // Apply optimization if and only if the following is true:
+ // - the definition is 'true' or 'false' literals.
+ // - the definition is used only once.
+ // - the definition and its use (the if statement) are in different blocks.
if (dm.hasValue() && dm.getValue() instanceof JBooleanLiteral
- && dm.isUsedOnlyOnce()) {
- if (((JBooleanLiteral) dm.getValue()).getValue() == true) {
- // Branch to then block
+ && dm.isUsedOnlyOnce()
+ && dm.getDefinition().getParent(JBlock.class) != ifStmt.getParent(JBlock.class)) {
+ if (((JBooleanLiteral) dm.getValue()).getValue() == true) {
+ // Branch to then block
- if (thenLabel == null) {
- thenLabel = new JLabeledStatement(
- si, new JLabel(si, "ifSimplierThen_" + count), new JBlock(si));
- tr.append(new PrependStatement((JBlock) ifStmt.getThenStmt(), thenLabel));
- }
-
- assert thenLabel != null;
- removeDefAndBranchToLabel(dm, si, thenLabel, tr);
- } else {
- // Branch to else block
- if (elseStmt != null) {
- if (elseLabel == null) {
- elseLabel = new JLabeledStatement(
- si, new JLabel(si, "ifSimplierElse_" + count), new JBlock(si));
- tr.append(new PrependStatement((JBlock) elseStmt, elseLabel));
- }
- } else {
- if (elseLabel == null) {
- elseLabel = new JLabeledStatement(
- si, new JLabel(si, "ifSimplierEnd_" + count), new JBlock(si));
-
- tr.append(new PrependAfter(ifStmt, elseLabel));
- }
- }
-
- removeDefAndBranchToLabel(dm, si, elseLabel, tr);
+ if (thenLabel == null) {
+ thenLabel = new JLabeledStatement(
+ si, new JLabel(si, "ifSimplierThen_" + count), new JBlock(si));
+ tr.append(new PrependStatement((JBlock) ifStmt.getThenStmt(), thenLabel));
}
+
+ assert thenLabel != null;
+ removeDefAndBranchToLabel(dm, si, thenLabel, tr);
+ } else {
+ // Branch to else block
+ if (elseStmt != null) {
+ if (elseLabel == null) {
+ elseLabel = new JLabeledStatement(
+ si, new JLabel(si, "ifSimplierElse_" + count), new JBlock(si));
+ tr.append(new PrependStatement((JBlock) elseStmt, elseLabel));
+ }
+ } else {
+ if (elseLabel == null) {
+ elseLabel = new JLabeledStatement(
+ si, new JLabel(si, "ifSimplierEnd_" + count), new JBlock(si));
+
+ tr.append(new PrependAfter(ifStmt, elseLabel));
+ }
+ }
+
+ removeDefAndBranchToLabel(dm, si, elseLabel, tr);
+ }
} else {
allDefsAreBooleanCstAndUseByIfStmt = false;
}
diff --git a/jack/src/com/android/jack/optimizations/Optimizations.java b/jack/src/com/android/jack/optimizations/Optimizations.java
index e3eb4f8..7063f17 100644
--- a/jack/src/com/android/jack/optimizations/Optimizations.java
+++ b/jack/src/com/android/jack/optimizations/Optimizations.java
@@ -59,6 +59,14 @@
.addDefaultValue(Boolean.TRUE)
.addCategory(DumpInLibrary.class)
.addCategory(PrebuiltCompatibility.class);
+
+ @Nonnull
+ public static final BooleanPropertyId OPTIMIZE_CST_DEF = BooleanPropertyId
+ .create("jack.optimization.use-def-cst-simplifier",
+ "Optimize use/def chain with constant definition")
+ .addDefaultValue(Boolean.FALSE)
+ .addCategory(DumpInLibrary.class)
+ .addCategory(PrebuiltCompatibility.class);
}
/**
diff --git a/jack/src/com/android/jack/optimizations/UnusedDefinitionRemover.java b/jack/src/com/android/jack/optimizations/UnusedDefinitionRemover.java
index 08ca778..723de0b 100644
--- a/jack/src/com/android/jack/optimizations/UnusedDefinitionRemover.java
+++ b/jack/src/com/android/jack/optimizations/UnusedDefinitionRemover.java
@@ -110,7 +110,9 @@
tracer.getStatistic(UNUSED_DEFINITION_REMOVED).incValue();
- tr.append(new Remove(binary.getParent()));
+ final JNode binaryParent = binary.getParent();
+ assert binaryParent != null;
+ tr.append(new Remove(binaryParent));
if (binary.getRhs() instanceof JVariableRef) {
UseDefsMarker udm = ((JVariableRef) binary.getRhs()).getMarker(UseDefsMarker.class);
diff --git a/jack/src/com/android/jack/optimizations/UseDefsChainsSimplifier.java b/jack/src/com/android/jack/optimizations/UseDefsChainsSimplifier.java
index 6026dbf..5a8cd30 100644
--- a/jack/src/com/android/jack/optimizations/UseDefsChainsSimplifier.java
+++ b/jack/src/com/android/jack/optimizations/UseDefsChainsSimplifier.java
@@ -21,9 +21,14 @@
import com.android.jack.analysis.UseDefsMarker;
import com.android.jack.cfg.BasicBlock;
import com.android.jack.cfg.ControlFlowGraph;
+import com.android.jack.ir.ast.JBooleanLiteral;
+import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JIfStatement;
import com.android.jack.ir.ast.JLock;
import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JNullLiteral;
+import com.android.jack.ir.ast.JNumberValueLiteral;
+import com.android.jack.ir.ast.JReinterpretCastOperation;
import com.android.jack.ir.ast.JStatement;
import com.android.jack.ir.ast.JSwitchStatement;
import com.android.jack.ir.ast.JUnlock;
@@ -34,6 +39,7 @@
import com.android.jack.transformations.request.Replace;
import com.android.jack.transformations.request.TransformationRequest;
import com.android.jack.transformations.threeaddresscode.ThreeAddressCodeForm;
+import com.android.jack.util.CloneExpressionVisitor;
import com.android.jack.util.ControlFlowHelper;
import com.android.jack.util.DefsAndUsesChainOptimizationTools;
import com.android.sched.item.Description;
@@ -65,12 +71,14 @@
*
* Optimization can be apply if the following conditions are respected:
* - condition (0) a into s1 must used only one definition of a
- * - condition (1) a must have a value and b must be variable reference
- * - condition (2) if s0 and s1 are in the same block then the variable b must not be redefine
- * between statement s0 and s1
- * - condition (3) if s0 and s1 are not into the same block then all definitions of b used by s0
- * must reach the block containing s1 and all of these definitions must dominates s0. The block
- * that contains s1 must not redefine b between the beginning of this block and s1
+ * - condition (1) a must have a value and b must be variable reference or a literal value without
+ * side effect
+ * - condition (2) if b is a variable reference then if s0 and s1 are in the same block then the
+ * variable b must not be redefine between statement s0 and s1
+ * - condition (3) if b is a variable then if s0 and s1 are not into the same block then all
+ * definitions of b used by s0 must reach the block containing s1 and all of these definitions
+ * must dominates s0. The block that contains s1 must not redefine b between the beginning of
+ * this block and s1
*
* Temporary restriction of condition(3)
* if several definitions of b exists, Jack must checks that all definition statements dominate s0.
@@ -96,12 +104,20 @@
CounterImpl.class, Counter.class);
@Nonnull
+ private static final StatisticId<Counter> SIMPLIFIED_USE_DEF_WITH_CST = new StatisticId<Counter>(
+ "jack.optimization.usedef.constant", "Use def chain with constant simplified",
+ CounterImpl.class, Counter.class);
+
+ @Nonnull
private final com.android.jack.util.filter.Filter<JMethod> filter =
ThreadConfig.get(Options.METHOD_FILTER);
@Nonnull
private final Tracer tracer = TracerFactory.getTracer();
+ private final boolean optimizeCstDef =
+ ThreadConfig.get(Optimizations.UseDefSimplifier.OPTIMIZE_CST_DEF).booleanValue();
+
private class Visitor extends JVisitor {
@Override
@@ -125,21 +141,34 @@
tracer.getStatistic(SIMPLIFIED_USE_DEF).incValue();
}
- JVariableRef varRefb = (JVariableRef) defOfa.getValue();
- JVariableRef newVarRefb = getNewVarRef(varRefb, varRefOfa.getSourceInfo());
+ JExpression exprValueOfa = defOfa.getValue();
+ TransformationRequest tr = new TransformationRequest(s1);
- UseDefsMarker udmOfNewVarRefb = new UseDefsMarker();
- udmOfNewVarRefb.addUsedDefinitions(
- DefsAndUsesChainOptimizationTools.getUsedDefinitions(varRefb), newVarRefb);
- newVarRefb.addMarker(udmOfNewVarRefb);
+ if (isLiteralWithoutSideEffect(exprValueOfa)) {
+ tracer.getStatistic(SIMPLIFIED_USE_DEF_WITH_CST).incValue();
+ JExpression newExpr = new CloneExpressionVisitor().cloneExpression(exprValueOfa);
+ if (newExpr instanceof JNullLiteral) {
+ newExpr = new JReinterpretCastOperation(newExpr.getSourceInfo(),
+ varRefOfa.getType(), newExpr);
+ }
+ tr.append(new Replace(varRefOfa, newExpr));
+ } else {
+ JVariableRef varRefb = (JVariableRef) exprValueOfa;
+ JVariableRef newVarRefb = getNewVarRef(varRefb, varRefOfa.getSourceInfo());
- varsUsedBys1.add(newVarRefb);
+ UseDefsMarker udmOfNewVarRefb = new UseDefsMarker();
+ udmOfNewVarRefb.addUsedDefinitions(
+ DefsAndUsesChainOptimizationTools.getUsedDefinitions(varRefb), newVarRefb);
+ newVarRefb.addMarker(udmOfNewVarRefb);
+
+ varsUsedBys1.add(newVarRefb);
+ tr.append(new Replace(varRefOfa, newVarRefb));
+ }
+
+ // Update use/def information.
varsUsedBys1.remove(varRefOfa);
-
defOfa.removeUse(varRefOfa);
- TransformationRequest tr = new TransformationRequest(s1);
- tr.append(new Replace(varRefOfa, newVarRefb));
tr.commit();
}
}
@@ -148,32 +177,45 @@
return super.visit(s1);
}
+ private boolean isLiteralWithoutSideEffect(@Nonnull JExpression expr) {
+ return expr instanceof JBooleanLiteral || expr instanceof JNullLiteral
+ || expr instanceof JNumberValueLiteral;
+ }
+
private boolean stmtCanBeOptimized(@Nonnull JStatement s1, @Nonnull DefinitionMarker defOfa) {
// Condition (1)
- if (!defOfa.hasValue() || !(defOfa.getValue() instanceof JVariableRef)) {
+ if (!defOfa.hasValue()) {
return false;
}
- JVariableRef varRefb = (JVariableRef) defOfa.getValue();
- BasicBlock bbOfs1 = ControlFlowHelper.getBasicBlock(s1);
- JStatement s0 = defOfa.getStatement();
- assert s0 != null;
- BasicBlock bbOfs0 = ControlFlowHelper.getBasicBlock(s0);
- JVariable b = varRefb.getTarget();
+ // Condition (1)
+ if (defOfa.getValue() instanceof JVariableRef) {
+ JVariableRef varRefb = (JVariableRef) defOfa.getValue();
+ BasicBlock bbOfs1 = ControlFlowHelper.getBasicBlock(s1);
+ JStatement s0 = defOfa.getStatement();
+ assert s0 != null;
+ BasicBlock bbOfs0 = ControlFlowHelper.getBasicBlock(s0);
+ JVariable b = varRefb.getTarget();
- // Condition (2)
- if (bbOfs0 == bbOfs1) {
- if (!hasLocalDef(b, bbOfs0, s0, s1)) {
- return true;
+ // Condition (2)
+ if (bbOfs0 == bbOfs1) {
+ if (!hasLocalDef(b, bbOfs0, s0, s1)) {
+ return true;
+ }
+ } else {
+ // Condition (3)
+ List<DefinitionMarker> defsOfbUseFroms0 =
+ DefsAndUsesChainOptimizationTools.getUsedDefinitions(varRefb);
+ if (defsOfbUseFroms0.size() == 1 && bbHasOnlyDefinitions(bbOfs1, b, defsOfbUseFroms0)
+ && !hasLocalDef(b, bbOfs1, null, s1)) {
+ return true;
+ }
}
- } else {
- // Condition (3)
- List<DefinitionMarker> defsOfbUseFroms0 =
- DefsAndUsesChainOptimizationTools.getUsedDefinitions(varRefb);
- if (defsOfbUseFroms0.size() == 1 && bbHasOnlyDefinitions(bbOfs1, b, defsOfbUseFroms0)
- && !hasLocalDef(b, bbOfs1, null, s1)) {
- return true;
- }
+ // Condition (1)
+ } else if (optimizeCstDef && isLiteralWithoutSideEffect(defOfa.getValue())) {
+ // No more check since it is a literal value without side effect and that can not be
+ // redefined
+ return true;
}
return false;
@@ -232,6 +274,7 @@
if (method.isNative() || method.isAbstract() || !filter.accept(this.getClass(), method)) {
return;
}
+
ControlFlowGraph cfg = method.getMarker(ControlFlowGraph.class);
assert cfg != null;
diff --git a/jack/src/com/android/jack/optimizations/common/JlsNullabilityChecker.java b/jack/src/com/android/jack/optimizations/common/JlsNullabilityChecker.java
index af13157..00c357e 100644
--- a/jack/src/com/android/jack/optimizations/common/JlsNullabilityChecker.java
+++ b/jack/src/com/android/jack/optimizations/common/JlsNullabilityChecker.java
@@ -24,6 +24,7 @@
import com.android.jack.ir.ast.JIfStatement;
import com.android.jack.ir.ast.JNewInstance;
import com.android.jack.ir.ast.JNullLiteral;
+import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JStatement;
import com.android.jack.ir.ast.JThisRef;
import com.android.jack.ir.ast.JThrowStatement;
@@ -40,6 +41,7 @@
import com.android.sched.schedulable.Use;
import java.util.Collections;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -105,10 +107,11 @@
getPhantomLookup
.getClass(CommonTypes.JAVA_LANG_NULL_POINTER_EXCEPTION);
JNewInstance newInstance = new JNewInstance(srcInfo, exceptionType,
- exceptionType.getOrCreateMethodIdWide(
+ exceptionType.getOrCreateMethodId(
NamingTools.INIT_NAME,
Collections.<JType>emptyList(),
- MethodKind.INSTANCE_NON_VIRTUAL));
+ MethodKind.INSTANCE_NON_VIRTUAL,
+ JPrimitiveTypeEnum.VOID.getType()));
JExpression[] expressions = SplitNewInstance.NewExpressionSplitter
.splitNewInstance(newInstance, request, varCreator);
diff --git a/jack/src/com/android/jack/optimizations/common/OptimizerUtils.java b/jack/src/com/android/jack/optimizations/common/OptimizerUtils.java
index b87d9f4..65a8b46 100644
--- a/jack/src/com/android/jack/optimizations/common/OptimizerUtils.java
+++ b/jack/src/com/android/jack/optimizations/common/OptimizerUtils.java
@@ -44,6 +44,7 @@
import java.util.List;
import java.util.Set;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -65,7 +66,9 @@
@Nonnull
public static JExpression getAssignedValue(@Nonnull JExpression expr) {
assert isAssigned(expr);
- return ((JAsgOperation) expr.getParent()).getRhs();
+ JAsgOperation parent = (JAsgOperation) expr.getParent();
+ assert parent != null;
+ return parent.getRhs();
}
/**
@@ -139,7 +142,7 @@
public static boolean isConstructorDelegation(
@Nonnull JMethodCall call, @Nonnull JConstructor constructor) {
// Must be a constructor call on 'this'
- if (!call.getMethodId().isInit() ||
+ if (!call.getMethodIdWide().isInit() ||
!(call.getInstance() instanceof JThisRef)) {
return false;
}
diff --git a/jack/src/com/android/jack/optimizations/inlining/InlineAnnotatedMethods.java b/jack/src/com/android/jack/optimizations/inlining/InlineAnnotatedMethods.java
index 7912eba..44f54de 100644
--- a/jack/src/com/android/jack/optimizations/inlining/InlineAnnotatedMethods.java
+++ b/jack/src/com/android/jack/optimizations/inlining/InlineAnnotatedMethods.java
@@ -78,7 +78,7 @@
private class InlineVisitor extends JVisitor {
@Override
public void endVisit(@Nonnull JMethodCall call) {
- Collection<JMethod> targets = call.getMethodId().getMethods();
+ Collection<JMethod> targets = call.getMethodIdWide().getMethods();
if (targets.size() != 1) {
return;
}
diff --git a/jack/src/com/android/jack/optimizations/inlining/InlineAnnotationSanityCheck.java b/jack/src/com/android/jack/optimizations/inlining/InlineAnnotationSanityCheck.java
index eb043ea..8ff89fc 100644
--- a/jack/src/com/android/jack/optimizations/inlining/InlineAnnotationSanityCheck.java
+++ b/jack/src/com/android/jack/optimizations/inlining/InlineAnnotationSanityCheck.java
@@ -70,7 +70,7 @@
@Override
public void endVisit(@Nonnull JMethodCall call) {
- Collection<JMethod> targets = call.getMethodId().getMethods();
+ Collection<JMethod> targets = call.getMethodIdWide().getMethods();
if (targets.size() != 1) {
return;
}
diff --git a/jack/src/com/android/jack/optimizations/modifiers/FieldFinalizer.java b/jack/src/com/android/jack/optimizations/modifiers/FieldFinalizer.java
index e564fd0..b92beb2 100644
--- a/jack/src/com/android/jack/optimizations/modifiers/FieldFinalizer.java
+++ b/jack/src/com/android/jack/optimizations/modifiers/FieldFinalizer.java
@@ -284,7 +284,7 @@
JMethodCall call = (JMethodCall) expr;
// Must be a constructor call on 'this'
- if (!call.getMethodId().isInit() ||
+ if (!call.getMethodIdWide().isInit() ||
!(call.getInstance() instanceof JThisRef)) {
return;
}
diff --git a/jack/src/com/android/jack/optimizations/tailrecursion/TailRecursionOptimizer.java b/jack/src/com/android/jack/optimizations/tailrecursion/TailRecursionOptimizer.java
index 084fa38..512205a 100644
--- a/jack/src/com/android/jack/optimizations/tailrecursion/TailRecursionOptimizer.java
+++ b/jack/src/com/android/jack/optimizations/tailrecursion/TailRecursionOptimizer.java
@@ -179,7 +179,7 @@
if (retExpr instanceof JMethodCall) {
JMethodCall methodCall = (JMethodCall) retExpr;
JExpression instance = methodCall.getInstance();
- if (methodCall.getMethodId().equals(enclosingMethod.getMethodIdWide())
+ if (methodCall.getMethodIdWide().equals(enclosingMethod.getMethodIdWide())
&& (instance == null || (instance.getType().isSameType(methodCall.getReceiverType())
&& instance instanceof JThisRef))) {
tracer.getStatistic(TAIL_RECURSION_OPTS).incValue();
@@ -213,18 +213,18 @@
argAssignments.add(tempToArgStmt);
}
+ final JStatementList returnStmtParent = (JStatementList) returnStatement.getParent();
+ assert returnStmtParent != null;
for (JStatement asgStmt : tmpAssignments) {
- tr.append(
- new AppendStatement((JStatementList) returnStatement.getParent(), asgStmt));
+ tr.append(new AppendStatement(returnStmtParent, asgStmt));
}
for (JStatement asgStmt : argAssignments) {
- tr.append(
- new AppendStatement((JStatementList) returnStatement.getParent(), asgStmt));
+ tr.append(new AppendStatement(returnStmtParent, asgStmt));
}
JGoto tailCall = new JGoto(returnStatement.getSourceInfo(), labeledFirstStatement);
tailCall.setCatchBlocks(returnStatement.getJCatchBlocks());
- tr.append(new AppendStatement((JStatementList) returnStatement.getParent(), tailCall));
+ tr.append(new AppendStatement(returnStmtParent, tailCall));
tr.append(new Remove(returnStatement));
}
}
diff --git a/jack/src/com/android/jack/optimizations/valuepropagation/argument/AvpCollectMethodCallArguments.java b/jack/src/com/android/jack/optimizations/valuepropagation/argument/AvpCollectMethodCallArguments.java
index 6747fcb..5d04cba 100644
--- a/jack/src/com/android/jack/optimizations/valuepropagation/argument/AvpCollectMethodCallArguments.java
+++ b/jack/src/com/android/jack/optimizations/valuepropagation/argument/AvpCollectMethodCallArguments.java
@@ -61,7 +61,7 @@
}
if (expr instanceof JMethodCall) {
JMethodCall call = (JMethodCall) expr;
- JMethodIdWide methodId = call.getMethodId();
+ JMethodIdWide methodId = call.getMethodIdWide();
// Track only method calls with at least one parameter
if (methodId.getParamTypes().size() > 0) {
TypeMethodCallArgumentsMarker.markCallOnReceiverType(
diff --git a/jack/src/com/android/jack/optimizations/valuepropagation/argument/TypeMethodCallArgumentsMarker.java b/jack/src/com/android/jack/optimizations/valuepropagation/argument/TypeMethodCallArgumentsMarker.java
index 525144c..09005d0 100644
--- a/jack/src/com/android/jack/optimizations/valuepropagation/argument/TypeMethodCallArgumentsMarker.java
+++ b/jack/src/com/android/jack/optimizations/valuepropagation/argument/TypeMethodCallArgumentsMarker.java
@@ -97,7 +97,7 @@
// it's arguments if the method is tainted at this type.
TaintedVirtualMethodsMarker taintedMarker =
TaintedVirtualMethodsMarker.getMarker(type);
- if (call.getMethodId().getKind() == MethodKind.INSTANCE_VIRTUAL &&
+ if (call.getMethodIdWide().getKind() == MethodKind.INSTANCE_VIRTUAL &&
taintedMarker != null && taintedMarker.isMethodTainted(signature)) {
return;
}
diff --git a/jack/src/com/android/jack/optimizations/wofr/WofrRemoveFieldWrites.java b/jack/src/com/android/jack/optimizations/wofr/WofrRemoveFieldWrites.java
index 186ef94..be878d8 100644
--- a/jack/src/com/android/jack/optimizations/wofr/WofrRemoveFieldWrites.java
+++ b/jack/src/com/android/jack/optimizations/wofr/WofrRemoveFieldWrites.java
@@ -28,6 +28,7 @@
import com.android.jack.ir.ast.JLocal;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
+import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JPrimitiveType;
import com.android.jack.ir.ast.JStatement;
import com.android.jack.ir.ast.JThisRef;
@@ -233,7 +234,9 @@
JExpressionStatement stmt =
new JExpressionStatement(asg.getSourceInfo(), receiver);
- request.append(new AppendBefore(asg.getParent(), stmt));
+ final JNode parent = asg.getParent();
+ assert parent != null;
+ request.append(new AppendBefore(parent, stmt));
return local;
}
}
diff --git a/jack/src/com/android/jack/reporting/CommonReporter.java b/jack/src/com/android/jack/reporting/CommonReporter.java
index ac0589b..242c778 100644
--- a/jack/src/com/android/jack/reporting/CommonReporter.java
+++ b/jack/src/com/android/jack/reporting/CommonReporter.java
@@ -18,7 +18,7 @@
import com.android.jack.Jack;
import com.android.jack.Options;
-import com.android.jack.Options.VerbosityLevel;
+import com.android.jack.VerbosityLevel;
import com.android.jack.ir.HasSourceInfo;
import com.android.jack.reporting.Reportable.ProblemLevel;
import com.android.sched.util.config.ThreadConfig;
diff --git a/jack/src/com/android/jack/reporting/Reportable.java b/jack/src/com/android/jack/reporting/Reportable.java
index df34c27..956e23d 100644
--- a/jack/src/com/android/jack/reporting/Reportable.java
+++ b/jack/src/com/android/jack/reporting/Reportable.java
@@ -16,7 +16,7 @@
package com.android.jack.reporting;
-import com.android.jack.Options.VerbosityLevel;
+import com.android.jack.VerbosityLevel;
import com.android.sched.util.codec.EnumName;
import com.android.sched.util.codec.VariableName;
diff --git a/jack/src/com/android/jack/resource/ResourceOrMetaImporter.java b/jack/src/com/android/jack/resource/ResourceOrMetaImporter.java
index 51df922..c9fbd66 100644
--- a/jack/src/com/android/jack/resource/ResourceOrMetaImporter.java
+++ b/jack/src/com/android/jack/resource/ResourceOrMetaImporter.java
@@ -49,7 +49,7 @@
List<ResourceOrMeta> resultList = new ArrayList<ResourceOrMeta>();
try {
for (InputVFS resourceDir : resourceDirs) {
- importResourceDirElement(resourceDir.getRootInputVDir().list(), "",
+ importResourceDirElement(resourceDir.getRootDir().list(), "",
resourceDir.getLocation(), resultList);
}
} catch (ResourceImportConflictException e) {
diff --git a/jack/src/com/android/jack/shrob/obfuscation/MappingApplier.java b/jack/src/com/android/jack/shrob/obfuscation/MappingApplier.java
index 52a4073..db255bc 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/MappingApplier.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/MappingApplier.java
@@ -39,6 +39,7 @@
import com.android.jack.reporting.Reporter.Severity;
import com.android.jack.shrob.obfuscation.key.FieldKey;
import com.android.jack.shrob.obfuscation.key.MethodKey;
+import com.android.jack.shrob.obfuscation.key.TypeKey;
import com.android.jack.shrob.proguard.GrammarActions;
import com.android.jack.shrob.shrink.MappingCollisionException;
import com.android.jack.shrob.shrink.MappingCollisionPolicy;
@@ -131,10 +132,34 @@
throw new JackIOException(mappingFile.getPath() + ":" + lineNumber + ":" + message);
}
+ private boolean isExistingTypeName(@Nonnull String newSimpleName,
+ @Nonnull JPackage enclosingPackage) {
+ try {
+ try {
+ JClassOrInterface newType = enclosingPackage.getType(newSimpleName);
+ if (!Renamer.mustBeRenamed((MarkerManager) newType)) {
+ // A type was found that must not be renamed
+ return true;
+ }
+ } catch (JTypeLookupException e) {
+ // Ignored
+ }
+ NewTypeKeyMarker marker = enclosingPackage.getMarker(NewTypeKeyMarker.class);
+ if (marker != null) {
+ if (marker.getNewKeys().contains(new TypeKey(newSimpleName))) {
+ return true;
+ }
+ }
+ } catch (JLookupException exception) {
+ // No type was found
+ }
+ return false;
+ }
+
@CheckForNull
private JDefinedClassOrInterface createMappingForType(@Nonnull String oldName,
@Nonnull String newName, @Nonnull JSession session, @Nonnull File mappingFile,
- int lineNumber) {
+ int lineNumber) throws MappingCollisionException {
JClassOrInterface type = null;
JNodeLookup lookup = session.getLookup();
try {
@@ -145,7 +170,6 @@
new Object[] {mappingFile.getPath(), Integer.valueOf(lineNumber), oldName});
}
if (type instanceof JDefinedClassOrInterface) {
- JDefinedClassOrInterface clOrI = (JDefinedClassOrInterface) type;
int indexOfNewSimpleName = newName.lastIndexOf('.');
String newSimpleName, newPackageName;
if (indexOfNewSimpleName == -1) {
@@ -155,18 +179,36 @@
newPackageName = newName.substring(0, indexOfNewSimpleName).replace('.', '/');
newSimpleName = newName.substring(indexOfNewSimpleName + 1, newName.length());
}
- clOrI.addMarker(new OriginalPackageMarker(clOrI.getEnclosingPackage()));
JPackage newEnclosingPackage = lookup.getOrCreatePackage(newPackageName);
- request.append(new ChangeEnclosingPackage(clOrI, newEnclosingPackage));
- while (newEnclosingPackage != null) {
- if (!newEnclosingPackage.containsMarker(KeepNameMarker.class)) {
- newEnclosingPackage.addMarker(KeepNameMarker.INSTANCE);
- }
- newEnclosingPackage = newEnclosingPackage.getEnclosingPackage();
- }
- rename(clOrI, newSimpleName);
- return clOrI;
+ if (!oldName.equals(newName)
+ && isExistingTypeName(newSimpleName, newEnclosingPackage)) {
+ throw new MappingCollisionException(
+ new ColumnAndLineLocation(new FileLocation(mappingFile), lineNumber), type, newName);
+ } else {
+ JDefinedClassOrInterface clOrI = (JDefinedClassOrInterface) type;
+
+ clOrI.addMarker(new OriginalPackageMarker(clOrI.getEnclosingPackage()));
+
+ NewTypeKeyMarker marker = newEnclosingPackage.getMarker(NewTypeKeyMarker.class);
+ if (marker == null) {
+ marker = new NewTypeKeyMarker();
+ newEnclosingPackage.addMarker(marker);
+ }
+ assert marker != null;
+ marker.add(new TypeKey(newSimpleName));
+
+ request.append(new ChangeEnclosingPackage(clOrI, newEnclosingPackage));
+ while (newEnclosingPackage != null) {
+ if (!newEnclosingPackage.containsMarker(KeepNameMarker.class)) {
+ newEnclosingPackage.addMarker(KeepNameMarker.INSTANCE);
+ }
+ newEnclosingPackage = newEnclosingPackage.getEnclosingPackage();
+ }
+
+ rename(clOrI, newSimpleName);
+ return clOrI;
+ }
}
return null;
}
@@ -252,10 +294,18 @@
return createMappingForType(
qualifiedOldClassName, newClassName, session, mappingFile, lineNumber);
} catch (ArrayIndexOutOfBoundsException e) {
- throwException(
- mappingFile, lineNumber, "The mapping file is badly formatted (class mapping expected)");
- return null;
+ throwException(mappingFile, lineNumber,
+ "The mapping file is badly formatted (class mapping expected)");
+ } catch (MappingCollisionException e) {
+ if (collisionPolicy.equals(MappingCollisionPolicy.FAIL)) {
+ MappingContextException mappingReportableExn = new MappingContextException(e);
+ Jack.getSession().getReporter().report(Severity.FATAL, mappingReportableExn);
+ throw new JackAbortException(mappingReportableExn);
+ } else {
+ Jack.getSession().getReporter().report(Severity.NON_FATAL, new MappingContextInfo(e));
+ }
}
+ return null;
}
@CheckForNull
diff --git a/jack/src/com/android/jack/shrob/obfuscation/MappingPrinter.java b/jack/src/com/android/jack/shrob/obfuscation/MappingPrinter.java
index 5853d9f..2285a50 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/MappingPrinter.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/MappingPrinter.java
@@ -16,26 +16,17 @@
package com.android.jack.shrob.obfuscation;
-import com.google.common.base.Strings;
-
import com.android.jack.config.id.Arzon;
-import com.android.jack.ir.ast.HasName;
-import com.android.jack.ir.ast.JArrayType;
-import com.android.jack.ir.ast.JClassOrInterface;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.ast.JField;
import com.android.jack.ir.ast.JMethod;
-import com.android.jack.ir.ast.JNode;
-import com.android.jack.ir.ast.JPackage;
import com.android.jack.ir.ast.JParameter;
import com.android.jack.ir.ast.JSession;
-import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.reporting.ReportableIOException;
import com.android.jack.reporting.Reporter.Severity;
import com.android.jack.shrob.proguard.GrammarActions;
import com.android.sched.item.Description;
-import com.android.sched.marker.LocalMarkerManager;
import com.android.sched.schedulable.Constraint;
import com.android.sched.schedulable.Optional;
import com.android.sched.schedulable.Produce;
@@ -84,8 +75,6 @@
private static final String SEPARATOR = " -> ";
- private static final char PACKAGE_SEPARATOR = '.';
-
private static class Visitor extends JVisitor {
@Nonnull
private final PrintWriter writer;
@@ -94,67 +83,11 @@
this.writer = writer;
}
- private void appendOriginalQualifiedName(
- @Nonnull StringBuilder nameBuilder, @Nonnull JPackage pack) {
- JPackage enclosingPackage;
- OriginalPackageMarker marker = pack.getMarker(OriginalPackageMarker.class);
- if (marker != null) {
- enclosingPackage = marker.getOriginalEnclosingPackage();
- } else {
- enclosingPackage = pack.getEnclosingPackage();
- }
- if (enclosingPackage != null && !enclosingPackage.isTopLevelPackage()) {
- appendOriginalQualifiedName(nameBuilder, enclosingPackage);
- nameBuilder.append(PACKAGE_SEPARATOR);
- }
- appendOriginalName(nameBuilder, pack);
- }
-
- private void appendOriginalQualifiedName(
- @Nonnull StringBuilder nameBuilder, @Nonnull JClassOrInterface type) {
- JPackage enclosingPackage;
- OriginalPackageMarker marker = ((JNode) type).getMarker(OriginalPackageMarker.class);
- if (marker != null) {
- enclosingPackage = marker.getOriginalEnclosingPackage();
- } else {
- enclosingPackage = type.getEnclosingPackage();
- }
- assert enclosingPackage != null;
- appendOriginalQualifiedName(nameBuilder, enclosingPackage);
- if (!enclosingPackage.isTopLevelPackage()) {
- nameBuilder.append(PACKAGE_SEPARATOR);
- }
- appendOriginalName(nameBuilder, type);
- }
-
- private void appendOriginalName(@Nonnull StringBuilder nameBuilder, @Nonnull HasName node) {
- OriginalNameMarker marker = ((LocalMarkerManager) node).getMarker(OriginalNameMarker.class);
- if (marker != null) {
- nameBuilder.append(marker.getOriginalName());
- } else {
- nameBuilder.append(node.getName());
- }
- }
-
- private void appendOriginalQualifiedName(
- @Nonnull StringBuilder nameBuilder, @Nonnull HasName node) {
- if (node instanceof JArrayType) {
- JArrayType arrayType = (JArrayType) node;
- appendOriginalQualifiedName(nameBuilder, arrayType.getLeafType());
- nameBuilder.append(Strings.repeat("[]", arrayType.getDims()));
- } else if (node instanceof JDefinedClassOrInterface) {
- appendOriginalQualifiedName(nameBuilder, (JClassOrInterface) node);
- } else if (node instanceof JType) {
- nameBuilder.append(node.getName());
- } else {
- appendOriginalName(nameBuilder, node);
- }
- }
@Override
public boolean visit(@Nonnull JDefinedClassOrInterface type) {
StringBuilder info = new StringBuilder();
- appendOriginalQualifiedName(info, type);
+ OriginalNameTools.appendOriginalQualifiedName(info, type);
info.append(SEPARATOR);
info.append(GrammarActions.getSourceFormatter().getName(type));
info.append(':');
@@ -166,9 +99,9 @@
@Override
public boolean visit(@Nonnull JField field) {
StringBuilder info = new StringBuilder().append(" ");
- appendOriginalQualifiedName(info, field.getType());
+ OriginalNameTools.appendOriginalQualifiedName(info, field.getType());
info.append(' ');
- appendOriginalName(info, field.getId());
+ OriginalNameTools.appendOriginalName(info, field.getId());
info.append(SEPARATOR);
info.append(field.getName());
writer.println(info);
@@ -179,14 +112,14 @@
@Override
public boolean visit(@Nonnull JMethod method) {
StringBuilder info = new StringBuilder().append(" ");
- appendOriginalQualifiedName(info, method.getType());
+ OriginalNameTools.appendOriginalQualifiedName(info, method.getType());
info.append(' ');
- appendOriginalName(info, method.getMethodIdWide());
+ OriginalNameTools.appendOriginalName(info, method.getMethodIdWide());
info.append('(');
Iterator<JParameter> iterator = method.getParams().iterator();
while (iterator.hasNext()) {
JParameter param = iterator.next();
- appendOriginalQualifiedName(info, param.getType());
+ OriginalNameTools.appendOriginalQualifiedName(info, param.getType());
if (iterator.hasNext()) {
info.append(',');
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/NewTypeKeyMarker.java b/jack/src/com/android/jack/shrob/obfuscation/NewTypeKeyMarker.java
new file mode 100644
index 0000000..10161ea
--- /dev/null
+++ b/jack/src/com/android/jack/shrob/obfuscation/NewTypeKeyMarker.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.shrob.obfuscation;
+
+import com.android.jack.ir.ast.JPackage;
+import com.android.jack.shrob.obfuscation.key.TypeKey;
+import com.android.sched.item.Description;
+import com.android.sched.marker.ValidOn;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
+/**
+ * {@code Marker} that represents the new names of types in a package.
+ */
+@Description("Represents the new names of types in a package.")
+@ValidOn(JPackage.class)
+public class NewTypeKeyMarker extends NewKeyMarker {
+ @Nonnull
+ private final Set<TypeKey> newTypeKeys;
+
+ public NewTypeKeyMarker() {
+ newTypeKeys = new HashSet<TypeKey>();
+ }
+
+ public NewTypeKeyMarker(@Nonnull Set<TypeKey> existingKeys) {
+ this.newTypeKeys = existingKeys;
+ }
+
+ public void add(@Nonnull TypeKey key) {
+ newTypeKeys.add(key);
+ }
+
+ @Override
+ @Nonnull
+ public Collection<TypeKey> getNewKeys() {
+ return newTypeKeys;
+ }
+
+}
\ No newline at end of file
diff --git a/jack/src/com/android/jack/shrob/obfuscation/OriginalNameTools.java b/jack/src/com/android/jack/shrob/obfuscation/OriginalNameTools.java
new file mode 100644
index 0000000..5bf282d
--- /dev/null
+++ b/jack/src/com/android/jack/shrob/obfuscation/OriginalNameTools.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.shrob.obfuscation;
+
+import com.google.common.base.Strings;
+
+import com.android.jack.ir.ast.HasName;
+import com.android.jack.ir.ast.JArrayType;
+import com.android.jack.ir.ast.JClassOrInterface;
+import com.android.jack.ir.ast.JDefinedClassOrInterface;
+import com.android.jack.ir.ast.JNode;
+import com.android.jack.ir.ast.JPackage;
+import com.android.jack.ir.ast.JType;
+import com.android.sched.marker.LocalMarkerManager;
+
+import javax.annotation.Nonnull;
+
+/**
+ * A class regrouping all the tools used to retrieve original names.
+ */
+public class OriginalNameTools {
+
+ private static final char PACKAGE_SEPARATOR = '.';
+
+ public static void appendOriginalQualifiedName(
+ @Nonnull StringBuilder nameBuilder, @Nonnull JPackage pack) {
+ JPackage enclosingPackage;
+ OriginalPackageMarker marker = pack.getMarker(OriginalPackageMarker.class);
+ if (marker != null) {
+ enclosingPackage = marker.getOriginalEnclosingPackage();
+ } else {
+ enclosingPackage = pack.getEnclosingPackage();
+ }
+ if (enclosingPackage != null && !enclosingPackage.isTopLevelPackage()) {
+ appendOriginalQualifiedName(nameBuilder, enclosingPackage);
+ nameBuilder.append(PACKAGE_SEPARATOR);
+ }
+ appendOriginalName(nameBuilder, pack);
+ }
+
+ public static void appendOriginalQualifiedName(
+ @Nonnull StringBuilder nameBuilder, @Nonnull JClassOrInterface type) {
+ JPackage enclosingPackage;
+ OriginalPackageMarker marker = ((JNode) type).getMarker(OriginalPackageMarker.class);
+ if (marker != null) {
+ enclosingPackage = marker.getOriginalEnclosingPackage();
+ } else {
+ enclosingPackage = type.getEnclosingPackage();
+ }
+ assert enclosingPackage != null;
+ appendOriginalQualifiedName(nameBuilder, enclosingPackage);
+ if (!enclosingPackage.isTopLevelPackage()) {
+ nameBuilder.append(PACKAGE_SEPARATOR);
+ }
+ appendOriginalName(nameBuilder, type);
+ }
+
+ public static void appendOriginalName(@Nonnull StringBuilder nameBuilder, @Nonnull HasName node) {
+ OriginalNameMarker marker = ((LocalMarkerManager) node).getMarker(OriginalNameMarker.class);
+ if (marker != null) {
+ nameBuilder.append(marker.getOriginalName());
+ } else {
+ nameBuilder.append(node.getName());
+ }
+ }
+
+ public static void appendOriginalQualifiedName(
+ @Nonnull StringBuilder nameBuilder, @Nonnull HasName node) {
+ if (node instanceof JArrayType) {
+ JArrayType arrayType = (JArrayType) node;
+ appendOriginalQualifiedName(nameBuilder, arrayType.getLeafType());
+ nameBuilder.append(Strings.repeat("[]", arrayType.getDims()));
+ } else if (node instanceof JDefinedClassOrInterface) {
+ appendOriginalQualifiedName(nameBuilder, (JClassOrInterface) node);
+ } else if (node instanceof JType) {
+ nameBuilder.append(node.getName());
+ } else {
+ appendOriginalName(nameBuilder, node);
+ }
+ }
+
+}
+
diff --git a/jack/src/com/android/jack/shrob/obfuscation/Renamer.java b/jack/src/com/android/jack/shrob/obfuscation/Renamer.java
index 0b7d553..346e4a1 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/Renamer.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/Renamer.java
@@ -20,14 +20,17 @@
import com.android.jack.Jack;
import com.android.jack.frontend.MethodIdDuplicateRemover.UniqMethodIds;
import com.android.jack.ir.ast.CanBeRenamed;
+import com.android.jack.ir.ast.HasName;
import com.android.jack.ir.ast.JClassOrInterface;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.ast.JField;
import com.android.jack.ir.ast.JFieldId;
import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JMethodIdWide;
import com.android.jack.ir.ast.JPackage;
import com.android.jack.ir.ast.JSession;
+import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.library.DumpInLibrary;
@@ -59,6 +62,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -162,6 +166,49 @@
}
}
+ @Nonnull
+ static String getFieldKey(@Nonnull JFieldId fieldId) {
+ assert !fieldId.containsMarker(OriginalNameMarker.class);
+ StringBuilder sb = new StringBuilder();
+ sb.append(fieldId.getName());
+ sb.append(':');
+ OriginalNameTools.appendOriginalQualifiedName(sb, fieldId.getType());
+ return sb.toString();
+ }
+
+ @Nonnull
+ static String getMethodKey(@Nonnull JMethodIdWide methodId) {
+ assert !methodId.containsMarker(OriginalNameMarker.class);
+ StringBuilder sb = new StringBuilder();
+ sb.append(methodId.getName());
+ sb.append('(');
+ Iterator<JType> iterator = methodId.getParamTypes().iterator();
+ while (iterator.hasNext()) {
+ JType paramType = iterator.next();
+ OriginalNameTools.appendOriginalQualifiedName(sb, paramType);
+ if (iterator.hasNext()) {
+ sb.append(',');
+ }
+ }
+ sb.append(')');
+
+ return sb.toString();
+ }
+
+ @Nonnull
+ static String getKey(@Nonnull HasName namedElement) {
+ if (namedElement instanceof JFieldId) {
+ return getFieldKey((JFieldId) namedElement);
+ } else if (namedElement instanceof JMethodIdWide) {
+ return getMethodKey((JMethodIdWide) namedElement);
+ } else {
+ assert !(namedElement instanceof JMethod
+ || namedElement instanceof JMethodId
+ || namedElement instanceof JField);
+ return namedElement.getName();
+ }
+ }
+
private static void rename(
@Nonnull CanBeRenamed node, @Nonnull String newName) {
if (mustBeRenamed((MarkerManager) node)) {
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/LineNumberRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisLineNumberRemover.java
similarity index 66%
copy from jack/src/com/android/jack/shrob/obfuscation/annotation/LineNumberRemover.java
copy to jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisLineNumberRemover.java
index acb20ba..fa01e22 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/LineNumberRemover.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisLineNumberRemover.java
@@ -17,8 +17,9 @@
package com.android.jack.shrob.obfuscation.annotation;
import com.android.jack.Jack;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.ir.ast.JNode;
+import com.android.jack.ir.ast.JLocal;
+import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JThis;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.ir.sourceinfo.SourceInfoFactory;
@@ -29,11 +30,12 @@
import javax.annotation.Nonnull;
/**
- * A {@link RunnableSchedulable} that removes line numbers.
+ * A {@link RunnableSchedulable} that removes line numbers for local variables and 'this'.
*/
-@Description("Removes line numbers")
-@Support(RemoveLineNumber.class)
-public class LineNumberRemover implements RunnableSchedulable<JDefinedClassOrInterface> {
+@Description("Removes line numbers for local variable and 'this'")
+@Support(RemoveLocalLineNumber.class)
+public class LocalVariableAndThisLineNumberRemover
+ implements RunnableSchedulable<JMethod> {
private static class Visitor extends JVisitor {
@Nonnull
@@ -44,19 +46,28 @@
}
@Override
- public boolean visit(@Nonnull JNode node) {
+ public boolean visit(@Nonnull JLocal node) {
SourceInfo info = node.getSourceInfo();
if (info != SourceInfo.UNKNOWN) {
node.setSourceInfo(info.getFileSourceInfo());
}
- return false;
+ return true;
+ }
+
+ @Override
+ public boolean visit(@Nonnull JThis node) {
+ SourceInfo info = node.getSourceInfo();
+ if (info != SourceInfo.UNKNOWN) {
+ node.setSourceInfo(info.getFileSourceInfo());
+ }
+ return true;
}
}
@Override
- public void run(@Nonnull JDefinedClassOrInterface type) {
+ public void run(@Nonnull JMethod method) {
Visitor visitor = new Visitor(Jack.getSession().getSourceInfoFactory());
- visitor.accept(type);
+ visitor.accept(method);
}
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisNameRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisNameRemover.java
index d1f3682..28f0a53 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisNameRemover.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableAndThisNameRemover.java
@@ -16,11 +16,14 @@
package com.android.jack.shrob.obfuscation.annotation;
+import com.android.jack.debug.DebugVariableInfoMarker;
import com.android.jack.ir.ast.JLocal;
+import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JThis;
import com.android.jack.ir.ast.JVisitor;
import com.android.sched.item.Description;
+import com.android.sched.schedulable.Constraint;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
@@ -31,6 +34,7 @@
*/
@Description("Removes local variables and 'this' names")
@Transform(modify = {JLocal.class, JThis.class})
+@Constraint(need = DebugVariableInfoMarker.class)
public class LocalVariableAndThisNameRemover implements RunnableSchedulable<JMethod> {
private static class Visitor extends JVisitor {
@@ -42,6 +46,15 @@
}
@Override
+ public boolean visit(@Nonnull JLocalRef localRef) {
+ DebugVariableInfoMarker marker = localRef.getMarker(DebugVariableInfoMarker.class);
+ if (marker != null) {
+ marker.setName(null);
+ }
+ return false;
+ }
+
+ @Override
public boolean visit(@Nonnull JThis node) {
node.setName(null);
return false;
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/LineNumberRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterLineNumberRemover.java
similarity index 73%
rename from jack/src/com/android/jack/shrob/obfuscation/annotation/LineNumberRemover.java
rename to jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterLineNumberRemover.java
index acb20ba..d274403 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/LineNumberRemover.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterLineNumberRemover.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,8 +17,8 @@
package com.android.jack.shrob.obfuscation.annotation;
import com.android.jack.Jack;
-import com.android.jack.ir.ast.JDefinedClassOrInterface;
-import com.android.jack.ir.ast.JNode;
+import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JParameter;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.ir.sourceinfo.SourceInfoFactory;
@@ -29,11 +29,11 @@
import javax.annotation.Nonnull;
/**
- * A {@link RunnableSchedulable} that removes line numbers.
+ * A {@link RunnableSchedulable} that removes line numbers of parameters.
*/
-@Description("Removes line numbers")
-@Support(RemoveLineNumber.class)
-public class LineNumberRemover implements RunnableSchedulable<JDefinedClassOrInterface> {
+@Description("Removes line numbers of parameters")
+@Support(RemoveParameterLineNumber.class)
+public class ParameterLineNumberRemover implements RunnableSchedulable<JMethod> {
private static class Visitor extends JVisitor {
@Nonnull
@@ -44,19 +44,20 @@
}
@Override
- public boolean visit(@Nonnull JNode node) {
+ public boolean visit(@Nonnull JParameter node) {
SourceInfo info = node.getSourceInfo();
if (info != SourceInfo.UNKNOWN) {
node.setSourceInfo(info.getFileSourceInfo());
}
- return false;
+ return true;
}
}
+
@Override
- public void run(@Nonnull JDefinedClassOrInterface type) {
+ public void run(@Nonnull JMethod method) {
Visitor visitor = new Visitor(Jack.getSession().getSourceInfoFactory());
- visitor.accept(type);
+ visitor.accept(method);
}
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterNameRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterNameRemover.java
index f876c36..1623c1c 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterNameRemover.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/ParameterNameRemover.java
@@ -16,8 +16,11 @@
package com.android.jack.shrob.obfuscation.annotation;
+import com.android.jack.debug.DebugVariableInfoMarker;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JParameter;
+import com.android.jack.ir.ast.JParameterRef;
+import com.android.jack.ir.ast.JVisitor;
import com.android.sched.item.Description;
import com.android.sched.schedulable.Constraint;
import com.android.sched.schedulable.RunnableSchedulable;
@@ -29,14 +32,30 @@
* A {@link RunnableSchedulable} that removes parameter names.
*/
@Description("Removes parameters names")
-@Constraint(need = JParameter.class)
+@Constraint(need = {JParameter.class, DebugVariableInfoMarker.class})
@Transform(modify = JParameter.class)
public class ParameterNameRemover implements RunnableSchedulable<JMethod> {
+ private static class Visitor extends JVisitor {
+
+ @Override
+ public boolean visit(@Nonnull JParameterRef parameterRef) {
+ DebugVariableInfoMarker marker = parameterRef.getMarker(DebugVariableInfoMarker.class);
+ if (marker != null) {
+ marker.setName(null);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean visit(@Nonnull JParameter node) {
+ node.setName(null);
+ return false;
+ }
+ }
+
@Override
public void run(@Nonnull JMethod t) {
- for (JParameter param : t.getParams()) {
- param.setName(null);
- }
+ new Visitor().accept(t);
}
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalLineNumber.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalLineNumber.java
new file mode 100644
index 0000000..c89588f
--- /dev/null
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalLineNumber.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.shrob.obfuscation.annotation;
+
+import com.android.sched.item.Description;
+import com.android.sched.item.Feature;
+import com.android.sched.util.config.HasKeyId;
+import com.android.sched.util.config.id.BooleanPropertyId;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Represents the removal of line numbers of local variables and 'this' in source info.
+ */
+@HasKeyId
+@Description("The removal of line numbers of local variables and 'this' in source info")
+public class RemoveLocalLineNumber implements Feature {
+
+ /**
+ * This property indicates if the line numbers of local variables and 'this' in source info must
+ * be removed.
+ * If a flags file (provided with --config-proguard) contradicts this property, the property is
+ * overridden.
+ */
+ @Nonnull
+ public static final BooleanPropertyId KEEP_LOCAL_LINE_NUMBER = BooleanPropertyId.create(
+ "jack.obfuscation.local.keep-line-number", "Keep line numbers for locals")
+ .addDefaultValue(Boolean.TRUE);
+}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java
index b70bab2..4244912 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,11 +18,26 @@
import com.android.sched.item.Description;
import com.android.sched.item.Feature;
+import com.android.sched.util.config.HasKeyId;
+import com.android.sched.util.config.id.BooleanPropertyId;
+
+import javax.annotation.Nonnull;
/**
- * A {@link Feature} that represents the removal of local variables names.
+ * A {@link Feature} that represents the removal of local variables and 'this' names.
*/
-@Description("The removal of local variables names")
+@HasKeyId
+@Description("The removal of local variables and 'this' names")
public class RemoveLocalVariableName implements Feature {
+ /**
+ * This property indicates if the names of local variables and 'this' in source info must
+ * be removed.
+ * If a flags file (provided with --config-proguard) contradicts this property, the property is
+ * overridden.
+ */
+ @Nonnull
+ public static final BooleanPropertyId KEEP_LOCAL_NAME = BooleanPropertyId.create(
+ "jack.obfuscation.local.keep-name", "Keep names for locals")
+ .addDefaultValue(Boolean.TRUE);
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterLineNumber.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterLineNumber.java
new file mode 100644
index 0000000..1a3ccc5
--- /dev/null
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterLineNumber.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.shrob.obfuscation.annotation;
+
+import com.android.sched.item.Description;
+import com.android.sched.item.Feature;
+import com.android.sched.util.config.HasKeyId;
+import com.android.sched.util.config.id.BooleanPropertyId;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Represents the removal of line numbers in source info for parameters.
+ */
+@HasKeyId
+@Description("The removal of line numbers in source info for parameters")
+public class RemoveParameterLineNumber implements Feature {
+
+ /**
+ * This property indicates if the line numbers of parameters in source info must be removed.
+ * If a flags file (provided with --config-proguard) contradicts this property, the property is
+ * overridden.
+ */
+ @Nonnull
+ public static final BooleanPropertyId KEEP_PARAMETER_LINE_NUMBER = BooleanPropertyId.create(
+ "jack.obfuscation.parameter.keep-line-number", "Keep line numbers for parameters")
+ .addDefaultValue(Boolean.TRUE);
+
+}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterName.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterName.java
index 4afd970..cf3f1ed 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterName.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveParameterName.java
@@ -18,11 +18,25 @@
import com.android.sched.item.Description;
import com.android.sched.item.Feature;
+import com.android.sched.util.config.HasKeyId;
+import com.android.sched.util.config.id.BooleanPropertyId;
+
+import javax.annotation.Nonnull;
/**
* A {@link Feature} that represents the removal of parameter names.
*/
+@HasKeyId
@Description("The removal of parameter names")
public class RemoveParameterName implements Feature {
+ /**
+ * This property indicates if the names of parameters in source info must be removed.
+ * If a flags file (provided with --config-proguard) contradicts this property, the property is
+ * overridden.
+ */
+ @Nonnull
+ public static final BooleanPropertyId KEEP_PARAMETER_NAME = BooleanPropertyId.create(
+ "jack.obfuscation.parameter.keep-name", "Keep names for parameters")
+ .addDefaultValue(Boolean.TRUE);
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLineNumber.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveVariableGenericSignature.java
similarity index 79%
rename from jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLineNumber.java
rename to jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveVariableGenericSignature.java
index 4d63713..3bab585 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLineNumber.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveVariableGenericSignature.java
@@ -20,9 +20,9 @@
import com.android.sched.item.Feature;
/**
- * Represents the removal of line numbers in source info.
+ * Represents the removal of the generic signatures of a variable
*/
-@Description("The removal of line numbers in source info")
-public class RemoveLineNumber implements Feature {
+@Description("The removal of the generic signatures of a variable")
+public class RemoveVariableGenericSignature implements Feature {
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/VariableGenericSignatureRemover.java
similarity index 86%
rename from jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java
rename to jack/src/com/android/jack/shrob/obfuscation/annotation/VariableGenericSignatureRemover.java
index a3fd7d6..1cf7a7f 100644
--- a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/VariableGenericSignatureRemover.java
@@ -29,12 +29,11 @@
import javax.annotation.Nonnull;
/**
- * A {@link RunnableSchedulable} that removes signatures from local variables.
+ * A {@link RunnableSchedulable} that removes signatures from variables.
*/
-@Description("Removes signatures from local variables")
-@Support(RemoveLocalVariableGenericSignature.class)
-public class LocalVariableGenericSignatureRemover implements
- RunnableSchedulable<JMethod> {
+@Description("Removes signatures from variables")
+@Support(RemoveVariableGenericSignature.class)
+public class VariableGenericSignatureRemover implements RunnableSchedulable<JMethod> {
private static class Visitor extends JVisitor {
diff --git a/jack/src/com/android/jack/shrob/proguard/GrammarActions.java b/jack/src/com/android/jack/shrob/proguard/GrammarActions.java
index 0382273..3c917b8 100644
--- a/jack/src/com/android/jack/shrob/proguard/GrammarActions.java
+++ b/jack/src/com/android/jack/shrob/proguard/GrammarActions.java
@@ -79,10 +79,10 @@
SourceFormatter.getFormatter();
enum FilterSeparator {
- GENERAL(".", "[^./]*"),
- FILE(".", "[^/]*"),
- CLASS("[^.]", "[^.]*"),
- ATTRIBUTE(".", ".*");
+ GENERAL(".", "[^./]*", ".*"),
+ FILE(".", "[^/]*", ".*"),
+ CLASS("[^.]", "[^.]*", "[^\\[\\]]*"),
+ ATTRIBUTE(".", ".*", ".*");
/**
* Represents the pattern equivalent to Proguard's "?"
@@ -96,9 +96,17 @@
@Nonnull
private final String multipleCharWildcard;
- FilterSeparator(@Nonnull String singleCharWilcard, @Nonnull String multipleCharWildcard) {
+ /**
+ * Represents the pattern equivalent to Proguard's "**"
+ */
+ @Nonnull
+ private final String multipleCharWildcardWithSeparator;
+
+ FilterSeparator(@Nonnull String singleCharWilcard, @Nonnull String multipleCharWildcard,
+ @Nonnull String multipleCharWildcardWithSeparator) {
this.singleCharWilcard = singleCharWilcard;
this.multipleCharWildcard = multipleCharWildcard;
+ this.multipleCharWildcardWithSeparator = multipleCharWildcardWithSeparator;
}
}
@@ -117,30 +125,30 @@
@Nonnull
public static String getSignature(@Nonnull String name) {
- assert name != null;
- if (name.contains("[")) {
- String nameWithoutArray = name.substring(0, name.lastIndexOf('['));
+ int lastOpeningBracketPos = name.lastIndexOf('[');
+ if (lastOpeningBracketPos != -1) {
+ String nameWithoutArray = name.substring(0, lastOpeningBracketPos);
return '[' + getSignature(nameWithoutArray);
}
StringBuilder sig = new StringBuilder();
if (name.equals("boolean")) {
- sig.append("Z");
+ sig.append('Z');
} else if (name.equals("byte")) {
- sig.append("B");
+ sig.append('B');
} else if (name.equals("char")) {
- sig.append("C");
+ sig.append('C');
} else if (name.equals("short")) {
- sig.append("S");
+ sig.append('S');
} else if (name.equals("int")) {
- sig.append("I");
+ sig.append('I');
} else if (name.equals("float")) {
- sig.append("F");
+ sig.append('F');
} else if (name.equals("double")) {
- sig.append("D");
+ sig.append('D');
} else if (name.equals("long")) {
- sig.append("J");
+ sig.append('J');
} else if (name.equals("void")) {
- sig.append("V");
+ sig.append('V');
} else {
sig.append(NamingTools.getTypeSignatureName(name));
}
@@ -148,16 +156,15 @@
return sig.toString();
}
+ private static final String PRIMITIVE_TYPE_NON_VOID =
+ "(boolean|byte|char|short|int|float|double|long)";
+
@Nonnull
- static String getSignature(@Nonnull String name, int dim) {
+ static String getSourceNamePattern(@Nonnull String name, int dim) {
assert name != null;
StringBuilder sig = new StringBuilder();
- for (int i = 0; i < dim; i++) {
- sig.append("\\[");
- }
-
// ... matches any number of arguments of any type
if (name.equals("...")) {
sig.append(".*");
@@ -166,35 +173,23 @@
sig.append(".*");
// % matches any primitive type ("boolean", "int", etc, but not "void")
} else if (name.equals("%")) {
- sig.append("(B|C|D|F|I|J|S|Z)");
- } else if (name.equals("boolean")) {
- sig.append("Z");
- } else if (name.equals("byte")) {
- sig.append("B");
- } else if (name.equals("char")) {
- sig.append("C");
- } else if (name.equals("short")) {
- sig.append("S");
- } else if (name.equals("int")) {
- sig.append("I");
- } else if (name.equals("float")) {
- sig.append("F");
- } else if (name.equals("double")) {
- sig.append("D");
- } else if (name.equals("long")) {
- sig.append("J");
- } else if (name.equals("void")) {
- sig.append("V");
+ sig.append(PRIMITIVE_TYPE_NON_VOID);
+ } else if (name.equals("**")) {
+ sig.append("[^\\[\\[]*(?<!" + PRIMITIVE_TYPE_NON_VOID + ")");
} else {
sig.append(
- convertNameToPattern(NamingTools.getTypeSignatureName(name), FilterSeparator.CLASS));
+ convertNameToRegex(name, FilterSeparator.CLASS));
+ }
+
+ for (int i = 0; i < dim; i++) {
+ sig.append("\\[\\]");
}
return sig.toString();
}
@Nonnull
- private static String convertNameToPattern(
+ private static String convertNameToRegex(
@Nonnull String name, @Nonnull FilterSeparator separator) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < name.length(); i++) {
@@ -208,7 +203,7 @@
if (j < name.length() && name.charAt(j) == '*') {
// ** matches any part of a name, possibly containing
// any number of package separators or directory separators
- sb.append(".*");
+ sb.append(separator.multipleCharWildcardWithSeparator);
i++;
} else {
// * matches any part of a name not containing
@@ -231,7 +226,7 @@
static NameSpecification name(/*@Nonnull*/ String name, @Nonnull FilterSeparator separator) {
assert name != null;
String transformedName = "^" +
- convertNameToPattern(name, separator) + "$";
+ convertNameToRegex(name, separator) + "$";
Pattern pattern = Pattern.compile(transformedName);
return new NameSpecification(pattern);
@@ -296,48 +291,55 @@
static void method(@Nonnull ClassSpecification classSpec,
@CheckForNull AnnotationSpecification annotationType,
- @CheckForNull String typeSig, /*@Nonnull*/ String name, @Nonnull String signature,
+ @CheckForNull String typeSigRegex, /*@Nonnull*/ String name, @Nonnull String signature,
@CheckForNull ModifierSpecification modifier) {
assert name != null;
- String fullName = "^" + convertNameToPattern(name, FilterSeparator.CLASS);
+ String fullName = "^" + convertNameToRegex(name, FilterSeparator.CLASS);
fullName += signature;
- if (typeSig != null) {
- fullName += typeSig;
- } else {
- fullName += "V";
+ NameSpecification typeSignature = null;
+ if (typeSigRegex != null) {
+ Pattern pattern = Pattern.compile("^" + typeSigRegex + "$");
+ typeSignature = new NameSpecification(pattern);
}
fullName += "$";
Pattern pattern = Pattern.compile(fullName);
classSpec.add(new MethodSpecification(new NameSpecification(pattern),
- modifier, annotationType));
+ modifier, typeSignature, annotationType));
}
static void fieldOrAnyMember(@Nonnull ClassSpecification classSpec,
@CheckForNull AnnotationSpecification annotationType, @CheckForNull String typeSig,
- /*@Nonnull*/ String name, @Nonnull ModifierSpecification modifier) {
+ /* @Nonnull */ String name, @Nonnull ModifierSpecification modifier,
+ @Nonnull CharStream inputStream) throws RecognitionException {
assert name != null;
if (typeSig == null) {
- assert name.equals("*");
+ if (!name.equals("*")) {
+ throw new RecognitionException(inputStream);
+ }
// This is the "any member" case, we have to handle methods as well.
method(classSpec,
annotationType,
- getSignature("***", 0),
+ getSourceNamePattern("***", 0),
"*",
- "\\(" + getSignature("...", 0) + "\\)",
+ "\\(" + getSourceNamePattern("...", 0) + "\\)",
modifier);
}
- field(classSpec, annotationType, typeSig, name, modifier);
+ field(classSpec, annotationType, typeSig, name, modifier, inputStream);
}
static void field(@Nonnull ClassSpecification classSpec,
- @CheckForNull AnnotationSpecification annotationType, @CheckForNull String typeSig,
- /*@Nonnull*/ String name, @Nonnull ModifierSpecification modifier) {
+ @CheckForNull AnnotationSpecification annotationType, @CheckForNull String typeSigRegex,
+ /* @Nonnull */ String name, @Nonnull ModifierSpecification modifier,
+ @Nonnull CharStream inputStream) throws RecognitionException {
assert name != null;
NameSpecification typeSignature = null;
- if (typeSig != null) {
- typeSignature = name(typeSig, FilterSeparator.CLASS);
+ if (typeSigRegex != null) {
+ Pattern pattern = Pattern.compile("^" + typeSigRegex + "$");
+ typeSignature = new NameSpecification(pattern);
} else {
- assert name.equals("*");
+ if (!name.equals("*")) {
+ throw new RecognitionException(inputStream);
+ }
}
classSpec.add(
new FieldSpecification(
diff --git a/jack/src/com/android/jack/shrob/proguard/Proguard.g b/jack/src/com/android/jack/shrob/proguard/Proguard.g
index bdd4a89..e045dec 100644
--- a/jack/src/com/android/jack/shrob/proguard/Proguard.g
+++ b/jack/src/com/android/jack/shrob/proguard/Proguard.g
@@ -202,11 +202,11 @@
annotation? modifiers
(
(typeSig=type)? name=(NAME|'<init>') (signature=arguments {GrammarActions.method(classSpec, $annotation.annotSpec, typeSig, $name.text, signature, $modifiers.modifiers);}
- | {GrammarActions.fieldOrAnyMember(classSpec, $annotation.annotSpec, typeSig, $name.text, $modifiers.modifiers);})
+ | {assert $name != null; GrammarActions.fieldOrAnyMember(classSpec, $annotation.annotSpec, typeSig, $name.text, $modifiers.modifiers, $name.getInputStream());})
| '<methods>' {GrammarActions.method(classSpec, $annotation.annotSpec,
- GrammarActions.getSignature("***", 0), "*", "\\("+ GrammarActions.getSignature("...", 0) + "\\)",
+ GrammarActions.getSourceNamePattern("***", 0), "*", "\\("+ GrammarActions.getSourceNamePattern("...", 0) + "\\)",
$modifiers.modifiers);}
- | '<fields>' {GrammarActions.field(classSpec, $annotation.annotSpec, null, "*", $modifiers.modifiers);}
+ | fields='<fields>' {GrammarActions.field(classSpec, $annotation.annotSpec, null, "*", $modifiers.modifiers, $fields.getInputStream());}
) ';'
;
@@ -261,20 +261,20 @@
'(' {signature = "\\(";}
(
(
- parameterSig=type {signature += parameterSig;}
- (',' parameterSig=type {signature += parameterSig;})*
+ parameterSig=type {signature += $parameterSig.typeSourceNamePattern;}
+ (',' parameterSig=type {signature += ", " + $parameterSig.typeSourceNamePattern;})*
)?
)
')' {signature += "\\)";}
;
-private type returns [String signature]
+private type returns [String typeSourceNamePattern]
@init {
int dim = 0;
}
:
(
- typeName=('%' | NAME) ('[]' {dim++;})* {String sig = $typeName.text; signature = GrammarActions.getSignature(sig == null ? "" : sig, dim);}
+ typeName=('%' | NAME) ('[]' {dim++;})* {String sig = $typeName.text; typeSourceNamePattern = GrammarActions.getSourceNamePattern(sig == null ? "" : sig, dim);}
)
;
diff --git a/jack/src/com/android/jack/shrob/proguard/ProguardFileParsingException.java b/jack/src/com/android/jack/shrob/proguard/ProguardFileParsingException.java
index 981ef07..47b559f 100644
--- a/jack/src/com/android/jack/shrob/proguard/ProguardFileParsingException.java
+++ b/jack/src/com/android/jack/shrob/proguard/ProguardFileParsingException.java
@@ -21,7 +21,7 @@
import javax.annotation.Nonnull;
/**
- * This exception is thrown if a problem occured when attempting to parse
+ * This exception is thrown if a problem occurred when attempting to parse
* a proguard flags file.
*/
public class ProguardFileParsingException extends ConfigurationException {
diff --git a/jack/src/com/android/jack/shrob/spec/ClassSpecification.java b/jack/src/com/android/jack/shrob/spec/ClassSpecification.java
index b5b9b8e..2678a07 100644
--- a/jack/src/com/android/jack/shrob/spec/ClassSpecification.java
+++ b/jack/src/com/android/jack/shrob/spec/ClassSpecification.java
@@ -185,7 +185,7 @@
sb.append('\n');
}
- sb.append("}");
+ sb.append('}');
return sb.toString();
}
diff --git a/jack/src/com/android/jack/shrob/spec/FieldSpecification.java b/jack/src/com/android/jack/shrob/spec/FieldSpecification.java
index 3b01752..5fc8427 100644
--- a/jack/src/com/android/jack/shrob/spec/FieldSpecification.java
+++ b/jack/src/com/android/jack/shrob/spec/FieldSpecification.java
@@ -65,7 +65,7 @@
}
if (type != null
- && !type.matches(GrammarActions.getSignatureFormatter().getName(f.getType()))) {
+ && !type.matches(GrammarActions.getSourceFormatter().getName(f.getType()))) {
return false;
}
diff --git a/jack/src/com/android/jack/shrob/spec/Flags.java b/jack/src/com/android/jack/shrob/spec/Flags.java
index 969adfd..b654c51 100644
--- a/jack/src/com/android/jack/shrob/spec/Flags.java
+++ b/jack/src/com/android/jack/shrob/spec/Flags.java
@@ -16,6 +16,9 @@
package com.android.jack.shrob.spec;
+import com.android.jack.ir.ast.JClassOrInterface;
+import com.android.jack.shrob.proguard.GrammarActions;
+
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -391,4 +394,10 @@
public List<FilterSpecification> getAdaptResourceFileContents() {
return adaptResourceFileContents;
}
+
+ public static boolean acceptClass(@Nonnull JClassOrInterface type,
+ @Nonnull List<FilterSpecification> specs) {
+ return specs.stream()
+ .anyMatch(x -> x.matches(GrammarActions.getSourceFormatter().getName(type)));
+ }
}
\ No newline at end of file
diff --git a/jack/src/com/android/jack/shrob/spec/MethodSpecification.java b/jack/src/com/android/jack/shrob/spec/MethodSpecification.java
index 63d2c29..9ad6790 100644
--- a/jack/src/com/android/jack/shrob/spec/MethodSpecification.java
+++ b/jack/src/com/android/jack/shrob/spec/MethodSpecification.java
@@ -34,16 +34,21 @@
@CheckForNull
private final ModifierSpecification modifier;
+ @CheckForNull
+ private final NameSpecification type;
+
@Nonnull
- private final NameSpecification sigPattern;
+ private final NameSpecification fullSourceName;
public MethodSpecification(
@Nonnull NameSpecification sigPattern,
@CheckForNull ModifierSpecification modifier,
+ @CheckForNull NameSpecification type,
@CheckForNull AnnotationSpecification annotationType) {
- this.sigPattern = sigPattern;
+ this.fullSourceName = sigPattern;
this.modifier = modifier;
this.annotationType = annotationType;
+ this.type = type;
}
@Override
@@ -56,20 +61,26 @@
return false;
}
- String signature = GrammarActions.getSignatureFormatter().getName(t);
+ if (type != null
+ && !type.matches(GrammarActions.getSourceFormatter().getName(t.getType()))) {
+ return false;
+ }
+
+ String signature =
+ GrammarActions.getSourceFormatter().getNameWithoutReturnType(t.getMethodIdWide());
if (t instanceof JConstructor) {
String methodName = signature.replace(NamingTools.INIT_NAME, t.getEnclosingType().getName());
- if (sigPattern.matches(methodName)) {
+ if (fullSourceName.matches(methodName)) {
return true;
}
methodName = signature.replace(NamingTools.INIT_NAME,
GrammarActions.getSourceFormatter().getName(t.getEnclosingType()));
- if (sigPattern.matches(methodName)) {
+ if (fullSourceName.matches(methodName)) {
return true;
}
}
- return sigPattern.matches(signature);
+ return fullSourceName.matches(signature);
}
@Override
@@ -87,7 +98,12 @@
sb.append(' ');
}
- sb.append(sigPattern);
+ if (type != null) {
+ sb.append(type);
+ sb.append(' ');
+ }
+
+ sb.append(fullSourceName);
sb.append(';');
return sb.toString();
diff --git a/jack/src/com/android/jack/tools/merger/AnnotationMerger.java b/jack/src/com/android/jack/tools/merger/AnnotationMerger.java
index b097494..e647f5b 100644
--- a/jack/src/com/android/jack/tools/merger/AnnotationMerger.java
+++ b/jack/src/com/android/jack/tools/merger/AnnotationMerger.java
@@ -37,9 +37,8 @@
import com.android.jack.dx.rop.cst.CstIndexMap;
import com.android.jack.dx.rop.cst.CstKnownNull;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.util.ByteInput;
import com.android.jack.dx.util.Leb128Utils;
@@ -125,7 +124,7 @@
Section annotationItemIn = dex.open(annotationItemOffset);
Annotation ioAnnotation = annotationItemIn.readAnnotation();
assert cstIndexMap != null;
- CstType annotationType = cstIndexMap.getCstType(ioAnnotation.getTypeIndex());
+ Type annotationType = cstIndexMap.getType(ioAnnotation.getTypeIndex());
com.android.jack.dx.rop.annotation.Annotation a =
new com.android.jack.dx.rop.annotation.Annotation(annotationType,
AnnotationItem.getAnnotationVisibility(ioAnnotation.getVisibility()));
@@ -181,7 +180,7 @@
assert cstIndexMap != null;
com.android.jack.dx.rop.annotation.Annotation embeddedAnnotation =
new com.android.jack.dx.rop.annotation.Annotation(
- cstIndexMap.getCstType(typeIndex), AnnotationVisibility.EMBEDDED);
+ cstIndexMap.getType(typeIndex), AnnotationVisibility.EMBEDDED);
for (int i = 0; i < size; i++) {
@@ -243,9 +242,8 @@
} else {
assert type == ValueType.VALUE_ENUM.getValue();
FieldId fieldId = dexBuffer.fieldIds().get(index);
- CstNat fieldNat = new CstNat(cstIndexMap.getCstString(fieldId.getNameIndex()),
- new CstString(dexBuffer.typeNames().get(fieldId.getTypeIndex())));
- constantValue = new CstEnumRef(fieldNat);
+ constantValue = new CstEnumRef(cstIndexMap.getCstString(fieldId.getNameIndex()),
+ cstIndexMap.getType(fieldId.getTypeIndex()));
}
}
@@ -259,7 +257,7 @@
@Override
protected void visitType(int index) {
assert cstIndexMap != null;
- constantValue = cstIndexMap.getCstType(index);
+ constantValue = cstIndexMap.getType(index);
}
@Override
diff --git a/jack/src/com/android/jack/tools/merger/ConstantManager.java b/jack/src/com/android/jack/tools/merger/ConstantManager.java
index 3b7fedb..a8e08f5 100644
--- a/jack/src/com/android/jack/tools/merger/ConstantManager.java
+++ b/jack/src/com/android/jack/tools/merger/ConstantManager.java
@@ -23,16 +23,16 @@
import com.android.jack.dx.io.MethodHandleId;
import com.android.jack.dx.io.MethodId;
import com.android.jack.dx.io.ProtoId;
+import com.android.jack.dx.io.TypeList;
import com.android.jack.dx.rop.cst.CstFieldRef;
import com.android.jack.dx.rop.cst.CstIndexMap;
import com.android.jack.dx.rop.cst.CstMethodHandleRef;
import com.android.jack.dx.rop.cst.CstMethodHandleRef.MethodHandleKind;
import com.android.jack.dx.rop.cst.CstMethodRef;
-import com.android.jack.dx.rop.cst.CstNat;
import com.android.jack.dx.rop.cst.CstPrototypeRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.Prototype;
+import com.android.jack.dx.rop.type.StdTypeList;
import com.android.jack.dx.rop.type.Type;
import java.util.ArrayList;
@@ -62,10 +62,7 @@
private final HashSet<CstMethodRef> cstMethodRefs = new HashSet<CstMethodRef>();
@Nonnull
- private final HashSet<CstType> cstTypes = new HashSet<CstType>();
-
- @Nonnull
- private final Map<String, CstString> protoStr2CstString = new HashMap<String, CstString>();
+ private final HashSet<Type> types = new HashSet<Type>();
@Nonnull
private final HashSet<CstMethodHandleRef> cstMethodHandleRefs = new HashSet<CstMethodHandleRef>();
@@ -86,8 +83,8 @@
}
@Nonnull
- public Collection<CstType> getCstTypes() {
- return Jack.getUnmodifiableCollections().getUnmodifiableCollection(cstTypes);
+ public Collection<Type> getTypes() {
+ return Jack.getUnmodifiableCollections().getUnmodifiableCollection(types);
}
@Nonnull
@@ -103,7 +100,7 @@
List<CstPrototypeRef> cstPrototypeRefsNewlyAdded = new ArrayList<>();
List<CstFieldRef> cstFieldRefsNewlyAdded = new ArrayList<CstFieldRef>();
List<CstMethodRef> cstMethodRefsNewlyAdded = new ArrayList<CstMethodRef>();
- List<CstType> cstTypesNewlyAdded = new ArrayList<CstType>();
+ List<Type> typesNewlyAdded = new ArrayList<Type>();
List<CstMethodHandleRef> cstMethodHandleRefsNewlyAdded = new ArrayList<CstMethodHandleRef>();
int idx = 0;
@@ -124,27 +121,28 @@
* Note: VOID isn't put in the intern table of type, since it's special and shouldn't be found
* by a normal call to intern() from Type.
*/
- CstType cstType = null;
- if (typeNameDesc.equals(Type.VOID.getDescriptor())) {
- cstType = CstType.intern(Type.VOID);
+ Type type = null;
+ if (typeNameDesc.equals(Type.VOID.getDescriptor().getString())) {
+ type = Type.VOID;
} else {
- cstType = CstType.intern(Type.intern(typeNameDesc));
+ type = Type.intern(typeNameDesc);
}
- if (cstTypes.add(cstType)) {
- cstTypesNewlyAdded.add(cstType);
+ if (types.add(type)) {
+ typesNewlyAdded.add(type);
}
- cstIndexMap.addTypeMapping(idx++, cstType);
+ cstIndexMap.addTypeMapping(idx++, type);
}
idx = 0;
for (FieldId fieldId : dexBuffer.fieldIds()) {
- CstNat fieldNat = new CstNat(cstIndexMap.getCstString(fieldId.getNameIndex()),
- cstIndexMap.getCstType(fieldId.getTypeIndex()).getDescriptor());
CstFieldRef cstFieldRef =
- new CstFieldRef(cstIndexMap.getCstType(fieldId.getDeclaringClassIndex()), fieldNat);
+ new CstFieldRef(cstIndexMap.getType(fieldId.getDeclaringClassIndex()),
+ cstIndexMap.getCstString(fieldId.getNameIndex()),
+ cstIndexMap.getType(fieldId.getTypeIndex()));
+
if (cstFieldRefs.add(cstFieldRef)) {
cstFieldRefsNewlyAdded.add(cstFieldRef);
}
@@ -153,13 +151,10 @@
idx = 0;
List<ProtoId> protoIds = dexBuffer.protoIds();
- String[] protoIdx2String = new String[protoIds.size()];
-
for (ProtoId protoId : protoIds) {
- String protoStr = dexBuffer.readTypeList(protoId.getParametersOffset()).toString();
- protoStr += typeNames.get(protoId.getReturnTypeIndex());
- protoIdx2String[idx] = protoStr;
- Prototype prototype = Prototype.intern(protoStr);
+ Prototype prototype = Prototype.intern(
+ getStdTypeList(cstIndexMap, dexBuffer.readTypeList(protoId.getParametersOffset())),
+ cstIndexMap.getType(protoId.getReturnTypeIndex()));
CstPrototypeRef cstProtoRef = new CstPrototypeRef(prototype);
if (cstPrototypeRefs.add(cstProtoRef)) {
cstPrototypeRefsNewlyAdded.add(cstProtoRef);
@@ -171,19 +166,12 @@
for (MethodId methodId : dexBuffer.methodIds()) {
int protoIdx = methodId.getProtoIndex();
- String protoStr = protoIdx2String[protoIdx];
- assert protoStr != null;
- CstString protoCstString = protoStr2CstString.get(protoStr);
- if (protoCstString == null) {
- protoCstString = new CstString(protoStr);
- protoStr2CstString.put(protoStr, protoCstString);
- }
-
- CstNat methNat =
- new CstNat(cstIndexMap.getCstString(methodId.getNameIndex()), protoCstString);
CstMethodRef cstMethodRef =
- new CstMethodRef(cstIndexMap.getCstType(methodId.getDeclaringClassIndex()), methNat);
+ new CstMethodRef(cstIndexMap.getType(methodId.getDeclaringClassIndex()),
+ cstIndexMap.getCstString(methodId.getNameIndex()),
+ cstIndexMap.getCstPrototype(protoIdx).getPrototype());
+
if (cstMethodRefs.add(cstMethodRef)) {
cstMethodRefsNewlyAdded.add(cstMethodRef);
}
@@ -230,31 +218,31 @@
if ((cstMethodHandleRefs.size()) > DexFormat.MAX_MEMBER_IDX + 1) {
removeItems(cstStringsNewlyAdded, cstFieldRefsNewlyAdded, cstMethodRefsNewlyAdded,
- cstTypesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
+ typesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
throw new MethodHandleIdOverflowException();
}
if ((cstFieldRefs.size()) > DexFormat.MAX_MEMBER_IDX + 1) {
removeItems(cstStringsNewlyAdded, cstFieldRefsNewlyAdded, cstMethodRefsNewlyAdded,
- cstTypesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
+ typesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
throw new FieldIdOverflowException();
}
if ((cstMethodRefs.size()) > DexFormat.MAX_MEMBER_IDX + 1) {
removeItems(cstStringsNewlyAdded, cstFieldRefsNewlyAdded, cstMethodRefsNewlyAdded,
- cstTypesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
+ typesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
throw new MethodIdOverflowException();
}
- if ((cstTypes.size()) > DexFormat.MAX_TYPE_IDX + 1) {
+ if ((types.size()) > DexFormat.MAX_TYPE_IDX + 1) {
removeItems(cstStringsNewlyAdded, cstFieldRefsNewlyAdded, cstMethodRefsNewlyAdded,
- cstTypesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
+ typesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
throw new TypeIdOverflowException();
}
if ((cstPrototypeRefs.size()) > DexFormat.MAX_PROTOTYPE_IDX + 1) {
removeItems(cstStringsNewlyAdded, cstFieldRefsNewlyAdded, cstMethodRefsNewlyAdded,
- cstTypesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
+ typesNewlyAdded, cstPrototypeRefsNewlyAdded, cstMethodHandleRefsNewlyAdded);
throw new PrototypedOverflowException();
}
@@ -263,21 +251,33 @@
private void removeItems(@Nonnull List<String> cstStringsToRemove,
@Nonnull List<CstFieldRef> cstFieldRefsToRemove,
- @Nonnull List<CstMethodRef> cstMethodRefsToRemove, @Nonnull List<CstType> cstTypesToRemove,
+ @Nonnull List<CstMethodRef> cstMethodRefsToRemove, @Nonnull List<Type> cstTypesToRemove,
@Nonnull List<CstPrototypeRef> cstPrototypeRefsToRemove,
@Nonnull List<CstMethodHandleRef> cstMethodHandleRefsToRemove) {
string2CstStrings.keySet().removeAll(cstStringsToRemove);
cstFieldRefs.removeAll(cstFieldRefsToRemove);
cstMethodRefs.removeAll(cstMethodRefsToRemove);
- cstTypes.removeAll(cstTypesToRemove);
+ types.removeAll(cstTypesToRemove);
cstPrototypeRefs.removeAll(cstPrototypeRefsToRemove);
cstMethodHandleRefs.removeAll(cstMethodHandleRefsToRemove);
}
+ @Nonnull
+ private StdTypeList getStdTypeList(@Nonnull CstIndexMap cstIndexMap, @Nonnull TypeList typeList) {
+ short[] type = typeList.getTypes();
+ int typesLength = type.length;
+ StdTypeList stdTypeList = new StdTypeList(typesLength);
+ for (int i = 0; i < typesLength; i++) {
+ stdTypeList.set(i, cstIndexMap.getType(type[i]));
+ }
+ stdTypeList.setImmutable();
+ return stdTypeList;
+ }
+
public boolean validate(@Nonnull DexFile dexFile) {
return ((dexFile.getStringIds().items().size() == string2CstStrings.size())
&& (dexFile.getFieldIds().items().size() == cstFieldRefs.size())
&& (dexFile.getMethodIds().items().size() == cstMethodRefs.size())
- && (dexFile.getTypeIds().items().size() == cstTypes.size()));
+ && (dexFile.getTypeIds().items().size() == types.size()));
}
}
diff --git a/jack/src/com/android/jack/tools/merger/JackMerger.java b/jack/src/com/android/jack/tools/merger/JackMerger.java
index 42e04a8..5da082f 100644
--- a/jack/src/com/android/jack/tools/merger/JackMerger.java
+++ b/jack/src/com/android/jack/tools/merger/JackMerger.java
@@ -31,9 +31,11 @@
import com.android.jack.dx.rop.cst.CstIndexMap;
import com.android.jack.dx.rop.cst.CstMethodRef;
import com.android.jack.dx.rop.cst.CstString;
-import com.android.jack.dx.rop.cst.CstType;
import com.android.jack.dx.rop.type.StdTypeList;
+import com.android.jack.dx.rop.type.Type;
import com.android.jack.dx.rop.type.TypeList;
+import com.android.sched.util.file.CannotWriteException;
+import com.android.sched.util.location.HasLocation;
import java.io.IOException;
import java.io.OutputStream;
@@ -68,10 +70,10 @@
CstIndexMap cstIndexMap = cstManager.addDexFile(dexToMerge);
for (ClassDef classDefToMerge : dexToMerge.classDefs()) {
- CstType superType = null;
+ Type superType = null;
int supertypeIndex = classDefToMerge.getSupertypeIndex();
if (supertypeIndex != ClassDef.NO_INDEX) {
- superType = cstIndexMap.getCstType(supertypeIndex);
+ superType = cstIndexMap.getType(supertypeIndex);
}
CstString sourceFilename = null;
int sourceFileIndex = classDefToMerge.getSourceFileIndex();
@@ -80,7 +82,7 @@
}
ClassDefItem newClassDef = new ClassDefItem(
- cstIndexMap.getCstType(classDefToMerge.getTypeIndex()), classDefToMerge.getAccessFlags(),
+ cstIndexMap.getType(classDefToMerge.getTypeIndex()), classDefToMerge.getAccessFlags(),
superType, getInterfacesList(classDefToMerge, cstIndexMap), sourceFilename);
dexResult.add(newClassDef);
@@ -142,13 +144,18 @@
}
}
- public void finish(@Nonnull OutputStream out) throws IOException {
+ public void finish(@Nonnull OutputStream out, @Nonnull HasLocation locationProvider)
+ throws CannotWriteException {
dexResult.prepare(cstManager.getCstStrings(), cstManager.getCstFieldRefs(),
- cstManager.getCstMethodRefs(), cstManager.getCstTypes(), cstManager.getCstPrototypeRefs());
+ cstManager.getCstMethodRefs(), cstManager.getTypes(), cstManager.getCstPrototypeRefs());
if (!cstManager.validate(dexResult)) {
throw new AssertionError();
}
- dexResult.writeTo(out, null /* humanOut */, false /* verbose */);
+ try {
+ dexResult.writeTo(out, null /* humanOut */, false /* verbose */);
+ } catch (IOException e) {
+ throw new CannotWriteException(locationProvider);
+ }
finished = true;
}
@@ -171,7 +178,7 @@
StdTypeList interfaceList = new StdTypeList(interfaceCount);
int idx = 0;
for (int interfaceIdx : classDefToMerge.getInterfaces()) {
- interfaceList.set(idx++, cstIndexMap.getCstType(interfaceIdx).getClassType());
+ interfaceList.set(idx++, cstIndexMap.getType(interfaceIdx));
}
return (interfaceList);
diff --git a/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java b/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java
index a87c906..8b6b5d2 100644
--- a/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java
+++ b/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java
@@ -91,8 +91,7 @@
if (method.isPublic() && !(method instanceof JConstructor) && !method.isStatic()
&& !method.isFinal()) {
try {
- declaredType.getMethod(method.getName(), method.getType(),
- method.getMethodIdWide().getParamTypes());
+ declaredType.getMethod(method.getMethodId());
} catch (JMethodLookupException e) {
// the method is not declared in class, a bridge is required
synthesizeBridge((JDefinedClass) declaredType, method);
@@ -117,7 +116,7 @@
CloneExpressionVisitor cloner = new CloneExpressionVisitor();
for (JParameter param : method.getParams()) {
JParameter bridgeParam = new JParameter(sourceInfo, param.getName(), param.getType(),
- param.getModifier(), bridge);
+ param.getModifier() | JModifier.SYNTHETIC, bridge);
for (JAnnotation annotation : param.getAnnotations()) {
bridgeParam.addAnnotation(cloner.cloneExpression(annotation));
}
@@ -135,7 +134,7 @@
JThis jThis = bridge.getThis();
assert jThis != null;
JMethodCall callToSuper = new JMethodCall(sourceInfo, jThis.makeRef(sourceInfo), superClass,
- methodId.getMethodIdWide(), method.getType(), false /* isVirtualDispatch */);
+ methodId, false /* isVirtualDispatch */);
for (JParameter param : bridge.getParams()) {
callToSuper.addArg(param.makeRef(sourceInfo));
}
diff --git a/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java b/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java
index 9a6b074..f62eb4b 100644
--- a/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java
+++ b/jack/src/com/android/jack/transformations/assertion/DynamicAssertionTransformer.java
@@ -153,9 +153,10 @@
JFieldRef lhs = new JFieldRef(sourceInfo, null, assertionStatusId, type);
JExpression rhs = new JPrefixNotOperation(sourceInfo,
new JMethodCall(sourceInfo, thisClass, javaLangClass,
- javaLangClass.getOrCreateMethodIdWide("desiredAssertionStatus",
- Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL),
- JPrimitiveTypeEnum.BOOLEAN.getType(), true /* isVirtualDispatch */));
+ javaLangClass.getOrCreateMethodId("desiredAssertionStatus",
+ Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL,
+ JPrimitiveTypeEnum.BOOLEAN.getType()),
+ true /* isVirtualDispatch */));
JAsgOperation asg = new JAsgOperation(SourceInfo.UNKNOWN, lhs, rhs);
assertionStatus.addMarker(new InitializationExpression(asg.makeStatement()));
@@ -190,10 +191,9 @@
JClass assertionError =
Jack.getSession().getPhantomLookup()
.getClass(CommonTypes.JAVA_LANG_ASSERTION_ERROR);
- JNewInstance newAssertionError = new JNewInstance(assertSt.getSourceInfo(),
- assertionError,
- assertionError.getOrCreateMethodIdWide(NamingTools.INIT_NAME, ctorDescriptor,
- MethodKind.INSTANCE_NON_VIRTUAL));
+ JNewInstance newAssertionError = new JNewInstance(assertSt.getSourceInfo(), assertionError,
+ assertionError.getOrCreateMethodId(NamingTools.INIT_NAME, ctorDescriptor,
+ MethodKind.INSTANCE_NON_VIRTUAL, JPrimitiveTypeEnum.VOID.getType()));
if (arg != null) {
newAssertionError.addArg(arg);
diff --git a/jack/src/com/android/jack/transformations/assertion/EnabledAssertionTransformer.java b/jack/src/com/android/jack/transformations/assertion/EnabledAssertionTransformer.java
index 3df133f..9986673 100644
--- a/jack/src/com/android/jack/transformations/assertion/EnabledAssertionTransformer.java
+++ b/jack/src/com/android/jack/transformations/assertion/EnabledAssertionTransformer.java
@@ -28,6 +28,7 @@
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JNewInstance;
import com.android.jack.ir.ast.JPrefixNotOperation;
+import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JThrowStatement;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JVisitor;
@@ -105,10 +106,9 @@
ctorDescriptor.add(jlo);
}
- JNewInstance newAssertionError = new JNewInstance(assertSt.getSourceInfo(),
- assertionError,
- assertionError.getOrCreateMethodIdWide(NamingTools.INIT_NAME, ctorDescriptor,
- MethodKind.INSTANCE_NON_VIRTUAL));
+ JNewInstance newAssertionError = new JNewInstance(assertSt.getSourceInfo(), assertionError,
+ assertionError.getOrCreateMethodId(NamingTools.INIT_NAME, ctorDescriptor,
+ MethodKind.INSTANCE_NON_VIRTUAL, JPrimitiveTypeEnum.VOID.getType()));
if (arg != null) {
newAssertionError.addArg(arg);
diff --git a/jack/src/com/android/jack/transformations/ast/BoostLockedRegionPriority.java b/jack/src/com/android/jack/transformations/ast/BoostLockedRegionPriority.java
index f2c7d32..a42d235 100644
--- a/jack/src/com/android/jack/transformations/ast/BoostLockedRegionPriority.java
+++ b/jack/src/com/android/jack/transformations/ast/BoostLockedRegionPriority.java
@@ -24,7 +24,7 @@
import com.android.jack.ir.ast.JLock;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JStatement;
import com.android.jack.ir.ast.JStatementList;
@@ -111,8 +111,8 @@
@CheckForNull private final JClass lockClass;
@CheckForNull private final JClass requestClass;
@CheckForNull private final JClass resetClass;
- @CheckForNull private final JMethodIdWide requestMethodId;
- @CheckForNull private final JMethodIdWide resetMethodId;
+ @CheckForNull private final JMethodId requestMethodId;
+ @CheckForNull private final JMethodId resetMethodId;
@Nonnull private final Filter<JMethod> filter = ThreadConfig.get(Options.METHOD_FILTER);
public BoostLockedRegionPriority() {
@@ -162,10 +162,11 @@
}
}
- private static JMethodIdWide getStaticMethodOrReportFailure(
+ private static JMethodId getStaticMethodOrReportFailure(
JClass cls, String name, String prop) {
try {
- return cls.getMethodIdWide(name, Collections.<JType>emptyList(), MethodKind.STATIC);
+ return cls.getMethodId(name, Collections.<JType>emptyList(), MethodKind.STATIC,
+ JPrimitiveTypeEnum.VOID.getType());
} catch (Throwable e) {
Jack.getSession()
.getReporter()
@@ -212,6 +213,7 @@
}
JStatementList list = (JStatementList) jLock.getParent();
+ assert list != null;
int index = list.getStatements().indexOf(jLock) + 1;
if (index >= list.getStatements().size()) {
abortPass();
@@ -240,16 +242,14 @@
return new JExpressionStatement(
info,
new JMethodCall(
- info, null, requestClass, requestMethodId, JPrimitiveTypeEnum.VOID.getType(), false));
+ info, null, requestClass, requestMethodId, false));
}
@Nonnull
private JExpressionStatement makeResetCall(SourceInfo info) {
assert lockClass != null && resetClass != null && resetMethodId != null;
- return new JExpressionStatement(
- info,
- new JMethodCall(
- info, null, resetClass, resetMethodId, JPrimitiveTypeEnum.VOID.getType(), false));
+ return new JExpressionStatement(info,
+ new JMethodCall(info, null, resetClass, resetMethodId, false));
}
}
diff --git a/jack/src/com/android/jack/transformations/ast/ConcatRemover.java b/jack/src/com/android/jack/transformations/ast/ConcatRemover.java
index 1059b83..2edb69e 100644
--- a/jack/src/com/android/jack/transformations/ast/ConcatRemover.java
+++ b/jack/src/com/android/jack/transformations/ast/ConcatRemover.java
@@ -27,7 +27,7 @@
import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewInstance;
import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JPrimitiveType;
@@ -116,9 +116,10 @@
if (binary instanceof JConcatOperation) {
TransformationRequest tr = new TransformationRequest(method);
SourceInfo sourceInfo = binary.getSourceInfo();
- JNode parent = binary.getParent();
- if (isReplaceableAppend(parent)) {
- JMethodCall toReplace = (JMethodCall) parent;
+ final JNode binaryParent = binary.getParent();
+ assert binaryParent != null;
+ if (isReplaceableAppend(binaryParent)) {
+ JMethodCall toReplace = (JMethodCall) binaryParent;
JExpression instance = toReplace.getInstance();
assert instance != null;
@@ -131,23 +132,22 @@
} else {
JClassOrInterface stringBuilder = getStringBuilder();
JNewInstance instance = new JNewInstance(sourceInfo, stringBuilder,
- stringBuilder.getOrCreateMethodIdWide(STRING_BUILDER_CONSTRUCTOR_NAME,
- Lists.<JType>create(), MethodKind.INSTANCE_NON_VIRTUAL));
+ stringBuilder.getOrCreateMethodId(STRING_BUILDER_CONSTRUCTOR_NAME,
+ Lists.<JType>create(), MethodKind.INSTANCE_NON_VIRTUAL,
+ JPrimitiveTypeEnum.VOID.getType()));
JMethodCall appendLhs = getCallToAppend(sourceInfo, instance, binary.getLhs());
JMethodCall appendRhs = getCallToAppend(sourceInfo, appendLhs, binary.getRhs());
- JMethodIdWide stringBuilderToString =
- stringBuilder.getOrCreateMethodIdWide(TO_STRING, Lists.<JType>create(),
- MethodKind.INSTANCE_VIRTUAL);
+ JMethodId stringBuilderToString = stringBuilder.getOrCreateMethodId(TO_STRING,
+ Lists.<JType>create(), MethodKind.INSTANCE_VIRTUAL, jls);
assert session != null;
JMethodCall toString = new JMethodCall(sourceInfo,
appendRhs,
stringBuilder,
stringBuilderToString,
- jls,
- stringBuilderToString.canBeVirtual());
+ stringBuilderToString.getMethodIdWide().canBeVirtual());
tr.append(new Replace(binary, toString));
}
@@ -245,14 +245,13 @@
}
JClassOrInterface stringBuilder = getStringBuilder();
- JMethodIdWide stringBuilderAppend =
- stringBuilder.getOrCreateMethodIdWide(APPEND_METHOD_NAME, Lists.create(appendArgType),
- MethodKind.INSTANCE_VIRTUAL);
+ JMethodId stringBuilderAppend =
+ stringBuilder.getOrCreateMethodId(APPEND_METHOD_NAME, Lists.create(appendArgType),
+ MethodKind.INSTANCE_VIRTUAL, stringBuilder);
JMethodCall call = new JMethodCall(sourceInfo,
stringBuilderInstance,
stringBuilder,
stringBuilderAppend,
- stringBuilder,
true /* isVirtualDispatch */);
call.addArg(toAppend);
return call;
diff --git a/jack/src/com/android/jack/transformations/ast/ImplicitBlocks.java b/jack/src/com/android/jack/transformations/ast/ImplicitBlocks.java
index 87b8246..b2df7db 100644
--- a/jack/src/com/android/jack/transformations/ast/ImplicitBlocks.java
+++ b/jack/src/com/android/jack/transformations/ast/ImplicitBlocks.java
@@ -64,7 +64,7 @@
@Override
public boolean visit(@Nonnull JIfStatement ifStmt) {
JStatement thenStmt = ifStmt.getThenStmt();
- if (thenStmt != null && !(thenStmt instanceof JBlock)) {
+ if (!(thenStmt instanceof JBlock)) {
moveIntoBLock(thenStmt);
}
diff --git a/jack/src/com/android/jack/transformations/ast/ImplicitBlocksChecker.java b/jack/src/com/android/jack/transformations/ast/ImplicitBlocksChecker.java
index aaaaeba..d528dfc 100644
--- a/jack/src/com/android/jack/transformations/ast/ImplicitBlocksChecker.java
+++ b/jack/src/com/android/jack/transformations/ast/ImplicitBlocksChecker.java
@@ -60,7 +60,7 @@
JStatement thenStmt = ifStmt.getThenStmt();
JStatement elseStmt = ifStmt.getElseStmt();
- if ((thenStmt != null && !(thenStmt instanceof JBlock)) ||
+ if ((!(thenStmt instanceof JBlock)) ||
(elseStmt != null && !(elseStmt instanceof JBlock))) {
throw new AssertionError("If statement with stand-alone statement.");
}
diff --git a/jack/src/com/android/jack/transformations/ast/MultiDimensionNewArrayRemover.java b/jack/src/com/android/jack/transformations/ast/MultiDimensionNewArrayRemover.java
index 90cbff6..3bc0c25 100644
--- a/jack/src/com/android/jack/transformations/ast/MultiDimensionNewArrayRemover.java
+++ b/jack/src/com/android/jack/transformations/ast/MultiDimensionNewArrayRemover.java
@@ -26,7 +26,7 @@
import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewArray;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JType;
@@ -81,7 +81,7 @@
private final JArrayType intArrayType =
Jack.getSession().getLookup().getArrayType(JPrimitiveTypeEnum.INT.getType(), 1);
@Nonnull
- private final JMethodIdWide newInstance;
+ private final JMethodId newInstance;
private class Visitor extends JVisitor {
@@ -105,8 +105,7 @@
null,
reflectArrayType,
newInstance,
- jlo,
- newInstance.canBeVirtual());
+ newInstance.getMethodIdWide().canBeVirtual());
call.addArg(new JClassLiteral(sourceInfo,
getComponentTypeForNewInstance(newArray, nbPresentDimensions)));
call.addArg(JNewArray.createWithInits(sourceInfo, intArrayType, presentDimensions));
@@ -155,8 +154,8 @@
List<JType> argsType = new ArrayList<JType>(2);
argsType.add(jlc);
argsType.add(intArrayType);
- newInstance = reflectArrayType.getOrCreateMethodIdWide("newInstance", argsType,
- MethodKind.STATIC);
+ newInstance = reflectArrayType.getOrCreateMethodId("newInstance", argsType,
+ MethodKind.STATIC, jlo);
}
@Override
diff --git a/jack/src/com/android/jack/transformations/ast/NumericConversionChecker.java b/jack/src/com/android/jack/transformations/ast/NumericConversionChecker.java
index e173ef5..ba93d37 100644
--- a/jack/src/com/android/jack/transformations/ast/NumericConversionChecker.java
+++ b/jack/src/com/android/jack/transformations/ast/NumericConversionChecker.java
@@ -249,7 +249,7 @@
@Override
public void endVisit(@Nonnull JMethodCall call) {
List<JExpression> args = call.getArgs();
- List<JType> parameterTypes = call.getMethodId().getParamTypes();
+ List<JType> parameterTypes = call.getMethodIdWide().getParamTypes();
assert args.size() == parameterTypes.size();
Iterator<JType> paramTypeIterator = parameterTypes.iterator();
for (JExpression jExpression : args) {
diff --git a/jack/src/com/android/jack/transformations/ast/SideEffectExtractor.java b/jack/src/com/android/jack/transformations/ast/SideEffectExtractor.java
index 88050e5..b89bdb8 100644
--- a/jack/src/com/android/jack/transformations/ast/SideEffectExtractor.java
+++ b/jack/src/com/android/jack/transformations/ast/SideEffectExtractor.java
@@ -23,6 +23,7 @@
import com.android.jack.ir.ast.JLocal;
import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JMultiExpression;
+import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JParameter;
import com.android.jack.ir.ast.JParameterRef;
import com.android.jack.ir.sourceinfo.SourceInfo;
@@ -87,7 +88,9 @@
if (!extracted.isEmpty()) {
extracted.add((JExpression) ref.getParent());
JMultiExpression multiExpression = new JMultiExpression(sourceInfo, extracted);
- tr.append(new Replace(ref.getParent(), multiExpression));
+ final JNode parent = ref.getParent();
+ assert parent != null;
+ tr.append(new Replace(parent, multiExpression));
}
return new JFieldRef(sourceInfo, newInstance, ref.getFieldId(), ref.getReceiverType());
@@ -105,7 +108,9 @@
if (!extracted.isEmpty()) {
extracted.add((JExpression) ref.getParent());
JMultiExpression multiExpression = new JMultiExpression(sourceInfo, extracted);
- tr.append(new Replace(ref.getParent(), multiExpression));
+ final JNode parent = ref.getParent();
+ assert parent != null;
+ tr.append(new Replace(parent, multiExpression));
}
assert newInstance != null;
diff --git a/jack/src/com/android/jack/transformations/ast/SynchronizeTransformer.java b/jack/src/com/android/jack/transformations/ast/SynchronizeTransformer.java
index 0a7cf3f..3b33935 100644
--- a/jack/src/com/android/jack/transformations/ast/SynchronizeTransformer.java
+++ b/jack/src/com/android/jack/transformations/ast/SynchronizeTransformer.java
@@ -74,6 +74,7 @@
@Constraint(need = {NoImplicitBlock.class})
@Transform(remove = {JSynchronizedBlock.class, ThreeAddressCodeForm.class}, add = {JBlock.class,
JTryStatement.class,
+ JTryStatement.FinallyBlock.class,
JLock.class,
JUnlock.class,
JLocalRef.class,
diff --git a/jack/src/com/android/jack/transformations/ast/TryWithResourcesTransformer.java b/jack/src/com/android/jack/transformations/ast/TryWithResourcesTransformer.java
index 4ac6d7c..ec736c4 100644
--- a/jack/src/com/android/jack/transformations/ast/TryWithResourcesTransformer.java
+++ b/jack/src/com/android/jack/transformations/ast/TryWithResourcesTransformer.java
@@ -35,7 +35,7 @@
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodBody;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JModifier;
import com.android.jack.ir.ast.JNeqOperation;
import com.android.jack.ir.ast.JNullLiteral;
@@ -249,18 +249,20 @@
Collections.singletonList(catchBlock),
finallyBlock);
- JMethodIdWide closeMethodId;
- JMethodIdWide addSuppressedMethodId;
+ JMethodId closeMethodId;
+ JMethodId addSuppressedMethodId;
try {
// Lookup AutoCloseable.close() method
JInterface autoCloseableInterface =
Jack.getSession().getPhantomLookup().getInterface(AUTO_CLOSEABLE_SIGNATURE);
- closeMethodId = autoCloseableInterface.getMethodIdWide(
- CLOSE_METHOD_NAME, Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL);
+ closeMethodId =
+ autoCloseableInterface.getMethodId(CLOSE_METHOD_NAME, Collections.<JType>emptyList(),
+ MethodKind.INSTANCE_VIRTUAL, JPrimitiveTypeEnum.VOID.getType());
// Lookup Throwable.addSuppressed(Throwable t) method
- addSuppressedMethodId = throwableClass.getMethodIdWide(ADD_SUPPRESSED_METHOD_NAME,
- Collections.singletonList(throwableClass), MethodKind.INSTANCE_VIRTUAL);
+ addSuppressedMethodId = throwableClass.getMethodId(ADD_SUPPRESSED_METHOD_NAME,
+ Collections.singletonList(throwableClass), MethodKind.INSTANCE_VIRTUAL,
+ JPrimitiveTypeEnum.VOID.getType());
} catch (JMethodLookupException e) {
TransformationException transformationException =
new TransformationException(new MissingJavaSupportException(JavaVersion.JAVA_7, e));
@@ -284,7 +286,6 @@
resourceLocal.makeRef(endOfTrySourceInfos),
(JClassOrInterface) resourceLocal.getType(),
closeMethodId,
- JPrimitiveTypeEnum.VOID.getType(),
true);
JBlock thenBlock = new JBlock(endOfTrySourceInfos);
@@ -331,8 +332,7 @@
exceptionToThrow.makeRef(endOfTrySourceInfos),
throwableClass,
addSuppressedMethodId,
- JPrimitiveTypeEnum.VOID.getType(),
- closeMethodId.canBeVirtual());
+ closeMethodId.getMethodIdWide().canBeVirtual());
addSuppressCall.addArg(exceptionThrownByClose.makeRef(endOfTrySourceInfos));
callSuppressBlock.addStmt(new JExpressionStatement(endOfTrySourceInfos, addSuppressCall));
diff --git a/jack/src/com/android/jack/transformations/ast/TypeLegalizer.java b/jack/src/com/android/jack/transformations/ast/TypeLegalizer.java
index e5875ea..0ad888d 100644
--- a/jack/src/com/android/jack/transformations/ast/TypeLegalizer.java
+++ b/jack/src/com/android/jack/transformations/ast/TypeLegalizer.java
@@ -33,7 +33,7 @@
import com.android.jack.ir.ast.JIfStatement;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewArray;
import com.android.jack.ir.ast.JPolymorphicMethodCall;
import com.android.jack.ir.ast.JPrimitiveType;
@@ -279,7 +279,7 @@
@Override
public void endVisit(@Nonnull JMethodCall call) {
List<JExpression> args = call.getArgs();
- List<JType> parameterTypes = call.getMethodId().getParamTypes();
+ List<JType> parameterTypes = call.getMethodIdWide().getParamTypes();
assert args.size() == parameterTypes.size();
Iterator<JType> paramTypeIterator = parameterTypes.iterator();
for (JExpression jExpression : args) {
@@ -436,12 +436,10 @@
}
- JMethodIdWide unboxMethod =
- typeToUnbox.getOrCreateMethodIdWide(methodName, Lists.<JType>create(),
- MethodKind.INSTANCE_VIRTUAL);
- JMethodCall unboxMethodCall = new JMethodCall(
- exprToUnbox.getSourceInfo(), exprToUnbox, typeToUnbox,
- unboxMethod, returnType, unboxMethod.canBeVirtual());
+ JMethodId unboxMethod = typeToUnbox.getOrCreateMethodId(methodName, Lists.<JType>create(),
+ MethodKind.INSTANCE_VIRTUAL, returnType);
+ JMethodCall unboxMethodCall = new JMethodCall(exprToUnbox.getSourceInfo(), exprToUnbox,
+ typeToUnbox, unboxMethod, unboxMethod.getMethodIdWide().canBeVirtual());
return unboxMethodCall;
}
@@ -521,12 +519,12 @@
}
- JMethodIdWide methodId = wrapperType.getOrCreateMethodIdWide("valueOf", Lists.create(argType),
- MethodKind.STATIC);
+ JMethodId methodId = wrapperType.getOrCreateMethodId("valueOf", Lists.create(argType),
+ MethodKind.STATIC, wrapperType);
JMethodCall boxMethodCall = new JMethodCall(
- exprToBox.getSourceInfo(), null, wrapperType, methodId, wrapperType,
- methodId.canBeVirtual());
- List<JType> paramTypes = methodId.getParamTypes();
+ exprToBox.getSourceInfo(), null, wrapperType, methodId,
+ methodId.getMethodIdWide().canBeVirtual());
+ List<JType> paramTypes = methodId.getMethodIdWide().getParamTypes();
assert paramTypes.size() == 1;
JType paramType = paramTypes.get(0);
JType exprToBoxType = exprToBox.getType();
diff --git a/jack/src/com/android/jack/transformations/ast/inner/GetterMarker.java b/jack/src/com/android/jack/transformations/ast/inner/GetterMarker.java
index 533e6e2..7203e4b 100644
--- a/jack/src/com/android/jack/transformations/ast/inner/GetterMarker.java
+++ b/jack/src/com/android/jack/transformations/ast/inner/GetterMarker.java
@@ -107,7 +107,7 @@
JExpression instance = null;
if (!field.isStatic()) {
JParameter thisParam = new JParameter(
- sourceInfo, InnerAccessorGenerator.THIS_PARAM_NAME, accessorClass, JModifier.SYNTHETIC,
+ sourceInfo, InnerAccessorGenerator.THIS_PARAM_NAME, accessorClass, JModifier.DEFAULT,
getter);
tr.append(new AppendMethodParam(getter, thisParam));
instance = thisParam.makeRef(sourceInfo);
diff --git a/jack/src/com/android/jack/transformations/ast/inner/InnerAccessorGenerator.java b/jack/src/com/android/jack/transformations/ast/inner/InnerAccessorGenerator.java
index 9797ef6..101cbbf 100644
--- a/jack/src/com/android/jack/transformations/ast/inner/InnerAccessorGenerator.java
+++ b/jack/src/com/android/jack/transformations/ast/inner/InnerAccessorGenerator.java
@@ -36,6 +36,7 @@
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JMethodCall.DispatchKind;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JMethodIdWide;
import com.android.jack.ir.ast.JModifier;
import com.android.jack.ir.ast.JNewInstance;
@@ -211,7 +212,7 @@
JType returnType =
x instanceof JNewInstance ? JPrimitiveTypeEnum.VOID.getType() : x.getType();
JMethod method = getMethod((JDefinedClassOrInterface) receiverType,
- (JDefinedClassOrInterface) receiverType, returnType, x.getMethodId());
+ (JDefinedClassOrInterface) receiverType, returnType, x.getMethodIdWide());
// Method can be null when an interface method is implemented by a sub type of the receiver
// type, but in this case accessors are not needed
if (method != null) {
@@ -303,11 +304,11 @@
// this.this$0.field = $value => $set<id>(this.this$0, $value)
JBinaryOperation binOp = (JBinaryOperation) fieldRef.getParent();
+ assert binOp != null;
- JMethodIdWide setterId = setter.getMethodIdWide();
- JMethodCall setterCall =
- new JMethodCall(binOp.getSourceInfo(), null, accessorClass, setterId,
- setter.getType(), setterId.canBeVirtual());
+ JMethodId setterId = setter.getMethodId();
+ JMethodCall setterCall = new JMethodCall(binOp.getSourceInfo(), null, accessorClass, setterId,
+ setterId.getMethodIdWide().canBeVirtual());
if (!field.isStatic()) {
JExpression instance = fieldRef.getInstance();
@@ -334,9 +335,9 @@
JMethod getter = marker.getOrCreateGetter(field, (JDefinedClass) accessorClass, tr);
// this.this$0.field => $get<id>(this.this$0)
- JMethodIdWide getterId = getter.getMethodIdWide();
+ JMethodId getterId = getter.getMethodId();
JMethodCall getterCall = new JMethodCall(fieldRef.getSourceInfo(), null, accessorClass,
- getterId, getter.getType(), getterId.canBeVirtual());
+ getterId, getterId.getMethodIdWide().canBeVirtual());
if (!field.isStatic()) {
JExpression instance = fieldRef.getInstance();
@@ -366,22 +367,21 @@
SourceInfo sourceInfo = methodCall.getSourceInfo();
if (methodCall instanceof JNewInstance) {
assert wrapper instanceof JConstructor;
- wrapperCall =
- new JNewInstance(sourceInfo, wrapper.getEnclosingType(), wrapper.getMethodIdWide());
+ wrapperCall = new JNewInstance(sourceInfo, wrapper.getEnclosingType(), wrapper.getMethodId());
} else {
- JMethodIdWide wrapperId = wrapper.getMethodIdWide();
+ JMethodId wrapperId = wrapper.getMethodId();
// this.this$0.method(param) => $wrap<id>(this.this$0, param)
if (!method.isStatic() && !(wrapper instanceof JConstructor)) {
wrapperCall = new JMethodCall(sourceInfo, null, accessorClass, wrapperId,
- wrapper.getType(), wrapperId.canBeVirtual());
+ wrapperId.getMethodIdWide().canBeVirtual());
JExpression instance = methodCall.getInstance();
assert instance != null;
wrapperCall.addArg(instance);
} else {
wrapperCall = new JMethodCall(sourceInfo, methodCall.getInstance(), accessorClass,
- wrapperId, wrapper.getType(), wrapperId.canBeVirtual());
+ wrapperId, wrapperId.getMethodIdWide().canBeVirtual());
}
}
diff --git a/jack/src/com/android/jack/transformations/ast/inner/MethodCallDispatchAdjuster.java b/jack/src/com/android/jack/transformations/ast/inner/MethodCallDispatchAdjuster.java
index 9b8e4a6..886b3fc 100644
--- a/jack/src/com/android/jack/transformations/ast/inner/MethodCallDispatchAdjuster.java
+++ b/jack/src/com/android/jack/transformations/ast/inner/MethodCallDispatchAdjuster.java
@@ -73,7 +73,7 @@
@Override
public boolean visit(@Nonnull JMethodCall methodCall) {
- JMethodIdWide id = methodCall.getMethodId();
+ JMethodIdWide id = methodCall.getMethodIdWide();
if (id.containsMarker(NeedsDispatchAdjustment.class)) {
JExpression instance = methodCall.getInstance();
if (instance != null) {
diff --git a/jack/src/com/android/jack/transformations/ast/inner/SetterMarker.java b/jack/src/com/android/jack/transformations/ast/inner/SetterMarker.java
index 7428638..7e55233 100644
--- a/jack/src/com/android/jack/transformations/ast/inner/SetterMarker.java
+++ b/jack/src/com/android/jack/transformations/ast/inner/SetterMarker.java
@@ -117,13 +117,13 @@
if (!field.isStatic()) {
JParameter thisParam =
new JParameter(sourceInfo, InnerAccessorGenerator.THIS_PARAM_NAME, accessorClass,
- JModifier.FINAL | JModifier.SYNTHETIC, setter);
+ JModifier.DEFAULT, setter);
tr.append(new AppendMethodParam(setter, thisParam));
instance = thisParam.makeRef(sourceInfo);
}
JParameter value = new JParameter(sourceInfo, VALUE_PARAM_NAME, fieldType,
- JModifier.FINAL | JModifier.SYNTHETIC, setter);
+ JModifier.DEFAULT, setter);
tr.append(new AppendMethodParam(setter, value));
JFieldRef lhs = new JFieldRef(sourceInfo, instance, field.getId(), accessorClass);
diff --git a/jack/src/com/android/jack/transformations/ast/inner/WrapperMarker.java b/jack/src/com/android/jack/transformations/ast/inner/WrapperMarker.java
index 1c401d9..d7ef123 100644
--- a/jack/src/com/android/jack/transformations/ast/inner/WrapperMarker.java
+++ b/jack/src/com/android/jack/transformations/ast/inner/WrapperMarker.java
@@ -197,20 +197,21 @@
} else if (!method.isStatic()){
JParameter thisParam =
new JParameter(sourceInfo, InnerAccessorGenerator.THIS_PARAM_NAME, accessorClass,
- JModifier.FINAL | JModifier.SYNTHETIC, wrapper);
+ JModifier.DEFAULT, wrapper);
wrapper.addParam(thisParam);
id.addParam(accessorClass);
instance = thisParam.makeRef(sourceInfo);
}
- JMethodIdWide calledMethodId = method.getMethodIdWide();
- JMethodCall methodCall = new JMethodCall(sourceInfo, instance, mthCallReceiverType,
- calledMethodId,
- method.getType(), calledMethodId.canBeVirtual() && !isSuper /* isVirtualDispatch */);
+ JMethodId calledMethodId = method.getMethodId();
+ JMethodCall methodCall =
+ new JMethodCall(sourceInfo, instance, mthCallReceiverType, calledMethodId,
+ calledMethodId.getMethodIdWide().canBeVirtual() && !isSuper /* isVirtualDispatch */);
for (JParameter param : method.getParams()) {
JType paramType = param.getType();
+ // Do not propagate modifier from called method to the wrapper method
JParameter newParam = new JParameter(sourceInfo, param.getName(), paramType,
- param.getModifier(), wrapper);
+ JModifier.DEFAULT, wrapper);
wrapper.addParam(newParam);
id.addParam(paramType);
methodCall.addArg(newParam.makeRef(sourceInfo));
@@ -220,7 +221,7 @@
while (constructorExists((JConstructor) wrapper, accessorClass)) {
JParameter newParam = new JParameter(
sourceInfo, InnerAccessorGenerator.THIS_PARAM_NAME + wrapper.getParams().size(),
- accessorClass, JModifier.SYNTHETIC, wrapper);
+ accessorClass, JModifier.DEFAULT, wrapper);
wrapper.addParam(newParam);
id.addParam(accessorClass);
}
@@ -229,7 +230,7 @@
JBlock bodyBlock = new JBlock(sourceInfo);
JMethodBody body = new JMethodBody(sourceInfo, bodyBlock);
- assert methodCall.getArgs().size() == methodCall.getMethodId().getParamTypes().size();
+ assert methodCall.getArgs().size() == methodCall.getMethodIdWide().getParamTypes().size();
if (method.getType() == JPrimitiveTypeEnum.VOID.getType()) {
bodyBlock.addStmt(methodCall.makeStatement());
diff --git a/jack/src/com/android/jack/transformations/ast/removeinit/FieldInitMethodCallRemover.java b/jack/src/com/android/jack/transformations/ast/removeinit/FieldInitMethodCallRemover.java
index d19223b..b9feea0 100644
--- a/jack/src/com/android/jack/transformations/ast/removeinit/FieldInitMethodCallRemover.java
+++ b/jack/src/com/android/jack/transformations/ast/removeinit/FieldInitMethodCallRemover.java
@@ -25,6 +25,7 @@
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodBody;
import com.android.jack.ir.ast.JMethodCall;
+import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.lookup.JMethodLookupException;
@@ -92,12 +93,14 @@
assert body instanceof JMethodBody;
JBlock varInitMethodBLock = ((JMethodBody) body).getBlock();
+ final JNode methodCallParent = methodCall.getParent();
+ assert methodCallParent != null;
if (varInitMethodBLock.getStatements().isEmpty()) {
- tr.append(new Remove(methodCall.getParent()));
+ tr.append(new Remove(methodCallParent));
} else {
CloneStatementVisitor csv = new CloneStatementVisitor(tr,
methodCall.getParent(JMethod.class));
- tr.append(new Replace(methodCall.getParent(), csv.cloneStatement(varInitMethodBLock)));
+ tr.append(new Replace(methodCallParent, csv.cloneStatement(varInitMethodBLock)));
}
}
super.endVisit(methodCall);
diff --git a/jack/src/com/android/jack/transformations/ast/splitnew/SplitNewInstance.java b/jack/src/com/android/jack/transformations/ast/splitnew/SplitNewInstance.java
index 2cf6b20..219a584 100644
--- a/jack/src/com/android/jack/transformations/ast/splitnew/SplitNewInstance.java
+++ b/jack/src/com/android/jack/transformations/ast/splitnew/SplitNewInstance.java
@@ -25,7 +25,7 @@
import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JMultiExpression;
import com.android.jack.ir.ast.JNewInstance;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
@@ -117,10 +117,11 @@
new JAsgOperation(srcInfos, tmp.makeRef(srcInfos), alloc);
// tmp.init(args)
- JMethodIdWide methodId = newInstance.getMethodId();
- JMethodCall initCall = new JMethodCall(
- srcInfos, tmp.makeRef(srcInfos), type, methodId,
- JPrimitiveTypeEnum.VOID.getType(), methodId.canBeVirtual());
+ JMethodId methodId =
+ newInstance.getMethodIdWide().getMethodId(JPrimitiveTypeEnum.VOID.getType());
+ assert methodId != null;
+ JMethodCall initCall = new JMethodCall(srcInfos, tmp.makeRef(srcInfos), type, methodId,
+ methodId.getMethodIdWide().canBeVirtual());
initCall.addArgs(newInstance.getArgs());
// tmp
diff --git a/jack/src/com/android/jack/transformations/ast/string/FieldStringLiteralRefiner.java b/jack/src/com/android/jack/transformations/ast/string/FieldStringLiteralRefiner.java
index 7a7aab0..c60f8b9 100644
--- a/jack/src/com/android/jack/transformations/ast/string/FieldStringLiteralRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/FieldStringLiteralRefiner.java
@@ -16,14 +16,20 @@
package com.android.jack.transformations.ast.string;
+import com.android.jack.Options;
import com.android.jack.ir.ast.JField;
import com.android.jack.ir.ast.JSession;
+import com.android.jack.shrob.spec.FilterSpecification;
+import com.android.jack.shrob.spec.Flags;
import com.android.jack.transformations.request.TransformationRequest;
import com.android.sched.item.Description;
import com.android.sched.schedulable.Access;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
import com.android.sched.schedulable.Use;
+import com.android.sched.util.config.ThreadConfig;
+
+import java.util.List;
import javax.annotation.Nonnull;
@@ -33,16 +39,22 @@
@Description("Refine JStringLiteral in fields into more specific string literals.")
@Use(StringLiteralRefinerVisitor.class)
@Transform(add = StringLiteralRefined.Field.class)
-// Uses StringLiteralRefinerVisitor which lookup types.
+// Uses StringLiteralRefinerVisitor which looks up types.
@Access(JSession.class)
public class FieldStringLiteralRefiner implements RunnableSchedulable<JField> {
+ @Nonnull
+ private final List<FilterSpecification> adaptClassStrings =
+ ThreadConfig.get(Options.FLAGS).getAdaptClassStrings();
+
@Override
public void run(@Nonnull JField field) {
- TransformationRequest tr = new TransformationRequest(field);
- StringLiteralRefinerVisitor visitor = new StringLiteralRefinerVisitor(tr);
- visitor.accept(field);
- tr.commit();
+ if (Flags.acceptClass(field.getEnclosingType(), adaptClassStrings)) {
+ TransformationRequest tr = new TransformationRequest(field);
+ StringLiteralRefinerVisitor visitor = new StringLiteralRefinerVisitor(tr);
+ visitor.accept(field);
+ tr.commit();
+ }
}
}
diff --git a/jack/src/com/android/jack/transformations/ast/string/MethodStringLiteralRefiner.java b/jack/src/com/android/jack/transformations/ast/string/MethodStringLiteralRefiner.java
index 0cc57c2..f3c02ed 100644
--- a/jack/src/com/android/jack/transformations/ast/string/MethodStringLiteralRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/MethodStringLiteralRefiner.java
@@ -16,14 +16,20 @@
package com.android.jack.transformations.ast.string;
+import com.android.jack.Options;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JSession;
+import com.android.jack.shrob.spec.FilterSpecification;
+import com.android.jack.shrob.spec.Flags;
import com.android.jack.transformations.request.TransformationRequest;
import com.android.sched.item.Description;
import com.android.sched.schedulable.Access;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
import com.android.sched.schedulable.Use;
+import com.android.sched.util.config.ThreadConfig;
+
+import java.util.List;
import javax.annotation.Nonnull;
@@ -32,16 +38,23 @@
*/
@Description("Refine JStringLiteral in methods into more specific string literals.")
@Use(StringLiteralRefinerVisitor.class)
+// Uses StringLiteralRefinerVisitor which looks up types.
@Access(JSession.class)
@Transform(add = StringLiteralRefined.Method.class)
public class MethodStringLiteralRefiner implements RunnableSchedulable<JMethod> {
+ @Nonnull
+ private final List<FilterSpecification> adaptClassStrings =
+ ThreadConfig.get(Options.FLAGS).getAdaptClassStrings();
+
@Override
public void run(@Nonnull JMethod method) {
- TransformationRequest tr = new TransformationRequest(method);
- StringLiteralRefinerVisitor visitor = new StringLiteralRefinerVisitor(tr);
- visitor.accept(method);
- tr.commit();
+ if (Flags.acceptClass(method.getEnclosingType(), adaptClassStrings)) {
+ TransformationRequest tr = new TransformationRequest(method);
+ StringLiteralRefinerVisitor visitor = new StringLiteralRefinerVisitor(tr);
+ visitor.accept(method);
+ tr.commit();
+ }
}
}
diff --git a/jack/src/com/android/jack/transformations/ast/string/ReflectionStringLiteralRefiner.java b/jack/src/com/android/jack/transformations/ast/string/ReflectionStringLiteralRefiner.java
index 5c2f03d..cbefc39 100644
--- a/jack/src/com/android/jack/transformations/ast/string/ReflectionStringLiteralRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/ReflectionStringLiteralRefiner.java
@@ -65,6 +65,7 @@
AtomicReferenceUpdaterParameterRefiner.class,
GetMethodParameterRefiner.class,
GetDeclaredMethodParameterRefiner.class})
+// Uses refiners which look up types.
@Access(JSession.class)
public class ReflectionStringLiteralRefiner implements RunnableSchedulable<JMethod> {
diff --git a/jack/src/com/android/jack/transformations/ast/string/StringLiteralRefinerVisitor.java b/jack/src/com/android/jack/transformations/ast/string/StringLiteralRefinerVisitor.java
index 7761df3..c9c493b 100644
--- a/jack/src/com/android/jack/transformations/ast/string/StringLiteralRefinerVisitor.java
+++ b/jack/src/com/android/jack/transformations/ast/string/StringLiteralRefinerVisitor.java
@@ -62,16 +62,16 @@
@Override
public boolean visit(@Nonnull JStringLiteral stringLiteral) {
String strValue = stringLiteral.getValue();
- boolean hasDot = strValue.contains(".");
- boolean hasSlash = strValue.contains("/");
+ boolean hasDot = strValue.indexOf('.') != -1;
+ boolean hasSlash = strValue.indexOf('/') != -1;
if (hasDot && hasSlash) {
// String mixing '.' and '/' is not considered as type.
return false;
}
-
- JType type = getTypeFromString(strValue);
+ String signatureName = getSignatureName(strValue);
+ JType type = getTypeFromSignature(signatureName);
if (type != null) {
tr.append(new Replace(stringLiteral, new JTypeStringLiteral(stringLiteral.getSourceInfo(),
hasDot ? Kind.SRC_QN : Kind.BINARY_QN, type)));
@@ -80,8 +80,7 @@
}
@CheckForNull
- private JType getTypeFromString(@Nonnull String str) {
- String signatureName = getSignatureName(str);
+ private JType getTypeFromSignature(@Nonnull String signatureName) {
if (NamingTools.isTypeDescriptor(signatureName)) {
try {
JType type = lookup.getType(signatureName);
diff --git a/jack/src/com/android/jack/transformations/ast/string/TypeStringLiteralRefiner.java b/jack/src/com/android/jack/transformations/ast/string/TypeStringLiteralRefiner.java
index 81ea40c..107e691 100644
--- a/jack/src/com/android/jack/transformations/ast/string/TypeStringLiteralRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/TypeStringLiteralRefiner.java
@@ -16,14 +16,20 @@
package com.android.jack.transformations.ast.string;
+import com.android.jack.Options;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.ast.JSession;
+import com.android.jack.shrob.spec.FilterSpecification;
+import com.android.jack.shrob.spec.Flags;
import com.android.jack.transformations.request.TransformationRequest;
import com.android.sched.item.Description;
import com.android.sched.schedulable.Access;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
import com.android.sched.schedulable.Use;
+import com.android.sched.util.config.ThreadConfig;
+
+import java.util.List;
import javax.annotation.Nonnull;
@@ -32,16 +38,23 @@
*/
@Description("Refine JStringLiteral in types into more specific string literals.")
@Use(StringLiteralRefinerVisitor.class)
+// Uses StringLiteralRefinerVisitor which looks up types.
@Access(JSession.class)
@Transform(add = StringLiteralRefined.Type.class)
public class TypeStringLiteralRefiner implements RunnableSchedulable<JDefinedClassOrInterface> {
+ @Nonnull
+ private final List<FilterSpecification> adaptClassStrings =
+ ThreadConfig.get(Options.FLAGS).getAdaptClassStrings();
+
@Override
public void run(@Nonnull JDefinedClassOrInterface type) {
- TransformationRequest tr = new TransformationRequest(type);
- StringLiteralRefinerVisitor visitor = new StringLiteralRefinerVisitor(tr);
- visitor.accept(type);
- tr.commit();
+ if (Flags.acceptClass(type, adaptClassStrings)) {
+ TransformationRequest tr = new TransformationRequest(type);
+ StringLiteralRefinerVisitor visitor = new StringLiteralRefinerVisitor(tr);
+ visitor.accept(type.getAnnotations());
+ tr.commit();
+ }
}
}
diff --git a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/CommonStringParameterRefiner.java b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/CommonStringParameterRefiner.java
index 78de47c..8e1c463 100644
--- a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/CommonStringParameterRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/CommonStringParameterRefiner.java
@@ -25,6 +25,7 @@
import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JReferenceType;
+import com.android.jack.ir.ast.JReinterpretCastOperation;
import com.android.jack.ir.ast.JStringLiteral;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.formatter.BinarySignatureFormatter;
@@ -81,6 +82,9 @@
if (arg instanceof JStringLiteral) {
return (JStringLiteral) arg;
+ } else if (arg instanceof JReinterpretCastOperation
+ && ((JReinterpretCastOperation) arg).getExpr() instanceof JStringLiteral) {
+ return (JStringLiteral) ((JReinterpretCastOperation) arg).getExpr();
}
return null;
diff --git a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/ForNameParameterRefiner.java b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/ForNameParameterRefiner.java
index 1dfad29..91ec8f1 100644
--- a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/ForNameParameterRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/ForNameParameterRefiner.java
@@ -56,7 +56,7 @@
@Override
public boolean isApplicable(@Nonnull JMethodCall call) throws JMethodLookupException {
if (call.getReceiverType().isSameType(javaLangClass)
- && call.getMethodId().equals(forNameMethodId)) {
+ && call.getMethodIdWide().equals(forNameMethodId)) {
assert call.getType().isSameType(javaLangClass);
return true;
}
@@ -79,11 +79,11 @@
JType type;
JTypeStringLiteral strTypeLiteral = null;
- if (typeName.contains("/")) {
+ if (typeName.indexOf('/') != -1) {
return null;
}
- if (typeName.startsWith("[")) {
+ if (typeName.charAt(0) == '[') {
typeSignature = NamingTools.getBinaryName(typeName);
} else {
typeSignature = NamingTools.getTypeSignatureName(typeName);
diff --git a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredFieldsParameterRefiner.java b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredFieldsParameterRefiner.java
index 6588356..b4f1a04 100644
--- a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredFieldsParameterRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredFieldsParameterRefiner.java
@@ -50,7 +50,7 @@
@Override
public boolean isApplicable(@Nonnull JMethodCall call) throws JMethodLookupException {
if (call.getReceiverType().isSameType(javaLangClass)
- && call.getMethodId().equals(getFieldMethodId)) {
+ && call.getMethodIdWide().equals(getFieldMethodId)) {
assert formatter.getName(call.getType()).equals(FIELD_CLASS_SIGNATURE);
return true;
}
diff --git a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredMethodParameterRefiner.java b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredMethodParameterRefiner.java
index a79731a..c01e695 100644
--- a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredMethodParameterRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetDeclaredMethodParameterRefiner.java
@@ -61,7 +61,7 @@
@Override
public boolean isApplicable(@Nonnull JMethodCall call) throws JMethodLookupException {
if (call.getReceiverType().isSameType(javaLangClass)
- && call.getMethodId().equals(getDeclaredMethodMethodId)) {
+ && call.getMethodIdWide().equals(getDeclaredMethodMethodId)) {
assert formatter.getName(call.getType()).equals(METHOD_CLASS_SIGNATURE);
return true;
}
diff --git a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetFieldParameterRefiner.java b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetFieldParameterRefiner.java
index ffb6841..9887454 100644
--- a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetFieldParameterRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetFieldParameterRefiner.java
@@ -56,7 +56,7 @@
@Override
public boolean isApplicable(@Nonnull JMethodCall call) throws JMethodLookupException {
if (call.getReceiverType().isSameType(javaLangClass)
- && call.getMethodId().equals(getFieldMethodId)) {
+ && call.getMethodIdWide().equals(getFieldMethodId)) {
assert formatter.getName(call.getType()).equals(FIELD_CLASS_SIGNATURE);
return true;
}
diff --git a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetMethodParameterRefiner.java b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetMethodParameterRefiner.java
index 6b0d258..236c28b 100644
--- a/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetMethodParameterRefiner.java
+++ b/jack/src/com/android/jack/transformations/ast/string/parameterrefiners/GetMethodParameterRefiner.java
@@ -72,7 +72,7 @@
@Override
public boolean isApplicable(@Nonnull JMethodCall call) throws JMethodLookupException {
if (call.getReceiverType().isSameType(javaLangClass)
- && call.getMethodId().equals(getMethodMethodId)) {
+ && call.getMethodIdWide().equals(getMethodMethodId)) {
assert formatter.getName(call.getType()).equals(METHOD_CLASS_SIGNATURE);
return true;
}
@@ -93,7 +93,7 @@
JMethodNameLiteral strMethodLiteral = null;
String methodName = paramToRefine.getValue();
JDefinedClassOrInterface type = getTypeFromClassLiteralExpression(call.getInstance());
- String methodSignature = getMethodSignature(call);
+ String methodSignature = getMethodSignature(methodName, call);
if (type != null && methodSignature != null) {
JMethod method = lookupMethod(type, methodSignature);
@@ -120,18 +120,17 @@
}
@CheckForNull
- private String getMethodSignature(@Nonnull JMethodCall call) {
+ private String getMethodSignature(@Nonnull String methodName, @Nonnull JMethodCall call) {
JExpression instance = call.getInstance();
assert instance != null;
List<JExpression> args = call.getArgs();
assert args.size() == 2;
- JExpression methodName = args.get(0);
JExpression parameters = args.get(1);
- if (methodName instanceof JStringLiteral && parameters instanceof JNewArray) {
- StringBuilder sb = new StringBuilder(((JStringLiteral) methodName).getValue());
- sb.append("(");
+ if (parameters instanceof JNewArray) {
+ StringBuilder sb = new StringBuilder(methodName);
+ sb.append('(');
for (JExpression param : ((JNewArray) parameters).getInitializers()) {
if (param instanceof JClassLiteral) {
sb.append(Jack.getLookupFormatter().getName(((JClassLiteral) param).getRefType()));
@@ -140,7 +139,7 @@
}
}
- sb.append(")");
+ sb.append(')');
return sb.toString();
}
diff --git a/jack/src/com/android/jack/transformations/ast/switches/SwitchStringSupport.java b/jack/src/com/android/jack/transformations/ast/switches/SwitchStringSupport.java
index 4217e4d..816ca7c 100644
--- a/jack/src/com/android/jack/transformations/ast/switches/SwitchStringSupport.java
+++ b/jack/src/com/android/jack/transformations/ast/switches/SwitchStringSupport.java
@@ -34,7 +34,7 @@
import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JSession;
import com.android.jack.ir.ast.JStatement;
@@ -86,16 +86,15 @@
ThreadConfig.get(Options.METHOD_FILTER);
@Nonnull
- private final JMethodIdWide equalsMethodId;
+ private final JMethodId equalsMethodId;
{
JSession session = Jack.getSession();
JPhantomLookup lookup = session.getPhantomLookup();
JClass jlo = lookup.getClass(CommonTypes.JAVA_LANG_OBJECT);
JClass jls = lookup.getClass(CommonTypes.JAVA_LANG_STRING);
- equalsMethodId =
- jls.getMethodIdWide("equals", Collections.singletonList((JType) jlo),
- MethodKind.INSTANCE_VIRTUAL);
+ equalsMethodId = jls.getMethodId("equals", Collections.singletonList((JType) jlo),
+ MethodKind.INSTANCE_VIRTUAL, JPrimitiveTypeEnum.BOOLEAN.getType());
}
@@ -147,8 +146,7 @@
tr.append(new Replace(caseStmt, labelStmt));
JMethodCall equalsCall = new JMethodCall(dbgInfo, tempLocal.makeRef(dbgInfo),
- (JClassOrInterface) switchStmt.getExpr().getType(), equalsMethodId,
- JPrimitiveTypeEnum.BOOLEAN.getType(), true);
+ (JClassOrInterface) switchStmt.getExpr().getType(), equalsMethodId, true);
equalsCall.addArg(caseExpr);
JBlock thenBlock = new JBlock(dbgInfo);
thenBlock.addStmt(new JGoto(dbgInfo, labelStmt));
diff --git a/jack/src/com/android/jack/transformations/enums/SwitchEnumSupport.java b/jack/src/com/android/jack/transformations/enums/SwitchEnumSupport.java
index 2fff026..bb88a5b 100644
--- a/jack/src/com/android/jack/transformations/enums/SwitchEnumSupport.java
+++ b/jack/src/com/android/jack/transformations/enums/SwitchEnumSupport.java
@@ -199,18 +199,19 @@
JMethod getEnumSwitchValues = getSwitchValuesMethod(enumType);
// Replace enum access by $SwitchesValues[x.ordinal()]
- JMethodIdWide methodId = getEnumSwitchValues.getMethodIdWide();
- JExpression callSwitchValues = new JMethodCall(
- switchStmt.getSourceInfo(), null, getEnumSwitchValues.getEnclosingType(),
- methodId, getEnumSwitchValues.getType(),
- methodId.canBeVirtual());
+ JMethodId methodId = getEnumSwitchValues.getMethodId();
+ JExpression callSwitchValues = new JMethodCall(switchStmt.getSourceInfo(), null,
+ getEnumSwitchValues.getEnclosingType(), methodId,
+ methodId.getMethodIdWide().canBeVirtual());
- JMethodIdWide ordinalMethodId = enumType.getOrCreateMethodIdWide(
- ORDINAL, Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL);
+ JMethodId ordinalMethodId =
+ enumType.getOrCreateMethodId(ORDINAL, Collections.<JType>emptyList(),
+ MethodKind.INSTANCE_VIRTUAL, JPrimitiveTypeEnum.INT.getType());
- tr.append(new Replace(expr, new JArrayRef(SourceInfo.UNKNOWN, callSwitchValues,
- new JMethodCall(SourceInfo.UNKNOWN, expr, enumType, ordinalMethodId,
- JPrimitiveTypeEnum.INT.getType(), ordinalMethodId.canBeVirtual()))));
+ tr.append(new Replace(expr,
+ new JArrayRef(SourceInfo.UNKNOWN, callSwitchValues,
+ new JMethodCall(SourceInfo.UNKNOWN, expr, enumType, ordinalMethodId,
+ ordinalMethodId.getMethodIdWide().canBeVirtual()))));
}
return super.visit(switchStmt);
}
@@ -302,10 +303,9 @@
}
// int[] array = new int[enum.values().length]
- JMethodIdWide valuesId = valuesMethod.getMethodIdWide();
+ JMethodId valuesId = valuesMethod.getMethodId();
JExpression valuesLength = new JArrayLength(dbgInfo, new JMethodCall(dbgInfo,
- null /* instance */, enumType, valuesId, valuesMethod.getType(),
- valuesId.canBeVirtual()));
+ null /* instance */, enumType, valuesId, valuesId.getMethodIdWide().canBeVirtual()));
List<JExpression> dimensions = new ArrayList<JExpression>();
dimensions.add(valuesLength);
bodyBlock.addStmt(new JAsgOperation(dbgInfo, arrayVar.makeRef(dbgInfo),
@@ -353,12 +353,11 @@
JFieldId enumFieldId = enumField.getId();
JExpression enumFieldAccess =
new JFieldRef(dbgInfo, null /* instance */, enumFieldId, enumType);
- JMethodIdWide ordinalMethodId = enumType.getOrCreateMethodIdWide(
- ORDINAL, Collections.<JType>emptyList(), MethodKind.INSTANCE_VIRTUAL);
- JExpression callOrdinal =
- new JMethodCall(dbgInfo, enumFieldAccess, enumType, ordinalMethodId,
- JPrimitiveTypeEnum.INT.getType(),
- ordinalMethodId.canBeVirtual());
+ JMethodId ordinalMethodId =
+ enumType.getOrCreateMethodId(ORDINAL, Collections.<JType>emptyList(),
+ MethodKind.INSTANCE_VIRTUAL, JPrimitiveTypeEnum.INT.getType());
+ JExpression callOrdinal = new JMethodCall(dbgInfo, enumFieldAccess, enumType,
+ ordinalMethodId, ordinalMethodId.getMethodIdWide().canBeVirtual());
int constant;
assert usedEnumFields != null;
diff --git a/jack/src/com/android/jack/transformations/OptimizedSwitchEnumFeedbackFeature.java b/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumFeedbackFeature.java
similarity index 89%
rename from jack/src/com/android/jack/transformations/OptimizedSwitchEnumFeedbackFeature.java
rename to jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumFeedbackFeature.java
index 7bc01ea..f740a1c 100644
--- a/jack/src/com/android/jack/transformations/OptimizedSwitchEnumFeedbackFeature.java
+++ b/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumFeedbackFeature.java
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.transformations;
+package com.android.jack.transformations.enums.opt;
-import com.android.jack.transformations.enums.opt.OptimizedSwitchEnumSupport;
import com.android.sched.item.Description;
import com.android.sched.item.Feature;
import com.android.sched.item.Name;
diff --git a/jack/src/com/android/jack/transformations/OptimizedSwitchEnumNonFeedbackFeature.java b/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumNonFeedbackFeature.java
similarity index 89%
rename from jack/src/com/android/jack/transformations/OptimizedSwitchEnumNonFeedbackFeature.java
rename to jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumNonFeedbackFeature.java
index dda415c..6a2cb06 100644
--- a/jack/src/com/android/jack/transformations/OptimizedSwitchEnumNonFeedbackFeature.java
+++ b/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumNonFeedbackFeature.java
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-package com.android.jack.transformations;
+package com.android.jack.transformations.enums.opt;
-import com.android.jack.transformations.enums.opt.OptimizedSwitchEnumSupport;
import com.android.sched.item.Description;
import com.android.sched.item.Feature;
import com.android.sched.item.Name;
diff --git a/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumSupport.java b/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumSupport.java
index c7b2f76..00decd8 100644
--- a/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumSupport.java
+++ b/jack/src/com/android/jack/transformations/enums/opt/OptimizedSwitchEnumSupport.java
@@ -50,6 +50,8 @@
import com.android.jack.ir.ast.JTryStatement;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.library.DumpInLibrary;
+import com.android.jack.library.PrebuiltCompatibility;
import com.android.jack.scheduling.filter.SourceTypeFilter;
import com.android.jack.shrob.obfuscation.OriginalNames;
import com.android.jack.transformations.LocalVarCreator;
@@ -67,8 +69,9 @@
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Transform;
import com.android.sched.schedulable.Use;
+import com.android.sched.util.config.HasKeyId;
+import com.android.sched.util.config.id.EnumPropertyId;
-import java.util.Collections;
import java.util.Map;
import javax.annotation.CheckForNull;
@@ -99,7 +102,22 @@
@Filter(SourceTypeFilter.class)
// This schedulable modifies a class (that it added in a previous run) that it is not visiting.
@ExclusiveAccess(JSession.class)
+@HasKeyId
public class OptimizedSwitchEnumSupport implements RunnableSchedulable<JMethod> {
+
+ /**
+ * property used to specify the kind of switch enum optimization that is enabled. See(@link
+ * SwitchEnumOptStrategy)
+ */
+ @Nonnull
+ public static final EnumPropertyId<SwitchEnumOptStrategy> OPTIMIZED_ENUM_SWITCH =
+ EnumPropertyId.create(
+ "jack.optimization.enum.switch", "Optimize enum switch", SwitchEnumOptStrategy.class)
+ .addDefaultValue(SwitchEnumOptStrategy.NEVER)
+ .ignoreCase()
+ .addCategory(DumpInLibrary.class)
+ .addCategory(PrebuiltCompatibility.class);
+
// switch map filler which will fills synthetic switch map field and initializer
@Nonnull
private final SwitchMapClassFiller classFiller = new SwitchMapClassFiller();
@@ -187,17 +205,16 @@
// create expression representing call to synthetic switch map initializer
JExpression getSwitchMapInvocExpr =
new JMethodCall(switchStmt.getSourceInfo(), null /*static method*/, switchMapClass,
- syntheticInitializer.getMethodIdWide(), syntheticInitializer.getType(),
+ syntheticInitializer.getMethodId(),
syntheticInitializer.canBeVirtual());
- JMethod ordinalMethod =
- Jack.getSession().getLookup().getClass("Ljava/lang/Enum;").
- getMethod("ordinal", JPrimitiveTypeEnum.INT.getType(), Collections.<JType>emptyList());
+ JMethod ordinalMethod = Jack.getSession().getLookup().getClass("Ljava/lang/Enum;")
+ .getMethod("ordinal", JPrimitiveTypeEnum.INT.getType());
transformRequest.append(
new Replace(switchExpr, new JArrayRef(switchStmt.getSourceInfo(), getSwitchMapInvocExpr,
new JMethodCall(switchStmt.getSourceInfo(), switchExpr, enumType,
- ordinalMethod.getMethodIdWide(), ordinalMethod.getType(),
+ ordinalMethod.getMethodId(),
ordinalMethod.canBeVirtual()))));
}
// keep traversing because case statement needs transformation as well
diff --git a/jack/src/com/android/jack/transformations/enums/opt/SwitchEnumOptStrategy.java b/jack/src/com/android/jack/transformations/enums/opt/SwitchEnumOptStrategy.java
new file mode 100644
index 0000000..1e06882
--- /dev/null
+++ b/jack/src/com/android/jack/transformations/enums/opt/SwitchEnumOptStrategy.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.transformations.enums.opt;
+
+import com.android.sched.util.codec.EnumName;
+import com.android.sched.util.codec.VariableName;
+
+/**
+ * Types of switch enum optimization strategies.
+ * 1. feedback (set on by default)
+ * 2. always
+ * 3. never
+ */
+@VariableName("strategy")
+public enum SwitchEnumOptStrategy {
+ // feedback-based optimization: this strategy will be enabled/disabled based on the
+ // compile time information collected, e.g., if it is detected that an enum is only
+ // used in one/few switch statements, it is useless to optimize it. Potentially enable
+ // this strategy will cost more compilation time, but save more dex code
+ @EnumName(name = "feedback")
+ FEEDBACK(),
+ // different from feedback-based optimization, always strategy doesn't collect compile-
+ // time information to guide switch enum optimization. It will always enable switch enum
+ // optimization no matter the enum is rarely/frequently used. Ideally this strategy will
+ // compile code quicker than feedback-based strategy does, but the generated dex may be
+ // larger than feedback strategy
+ @EnumName(name = "always")
+ ALWAYS(),
+ // this actually is not real strategy, but we still need it because switch enum
+ // optimization is disabled when incremental compilation is triggered
+ @EnumName(name = "never")
+ NEVER();
+}
\ No newline at end of file
diff --git a/jack/src/com/android/jack/transformations/enums/opt/SwitchMapClassFiller.java b/jack/src/com/android/jack/transformations/enums/opt/SwitchMapClassFiller.java
index f20a486..ece9c20 100644
--- a/jack/src/com/android/jack/transformations/enums/opt/SwitchMapClassFiller.java
+++ b/jack/src/com/android/jack/transformations/enums/opt/SwitchMapClassFiller.java
@@ -202,8 +202,7 @@
JMethodCall superCall = new JMethodCall(SourceInfo.UNKNOWN,
thisRef,
objectClass,
- superConstruct.getMethodIdWide(),
- JPrimitiveTypeEnum.VOID.getType(),
+ superConstruct.getMethodId(),
superConstruct.canBeVirtual());
transformRequest.append(new AppendStatement(block, superCall.makeStatement()));
@@ -389,8 +388,7 @@
new JMethodCall(SourceInfo.UNKNOWN,
null /* instance */,
enumType,
- valuesMethod.getMethodIdWide(),
- valuesMethod.getType(),
+ valuesMethod.getMethodId(),
valuesMethod.canBeVirtual()));
JLocal switchmapLocal = createSwitchmapArrayStatement(
@@ -461,8 +459,7 @@
SourceInfo.UNKNOWN,
enumFieldExpr,
enumType,
- ordinalMethod.getMethodIdWide(),
- JPrimitiveTypeEnum.INT.getType(),
+ ordinalMethod.getMethodId(),
ordinalMethod.canBeVirtual());
transformRequest.append(new AppendStatement(tryBlock,
diff --git a/jack/src/com/android/jack/transformations/enums/opt/SyntheticClassManager.java b/jack/src/com/android/jack/transformations/enums/opt/SyntheticClassManager.java
index 3ab512f..be6bba0 100644
--- a/jack/src/com/android/jack/transformations/enums/opt/SyntheticClassManager.java
+++ b/jack/src/com/android/jack/transformations/enums/opt/SyntheticClassManager.java
@@ -21,8 +21,6 @@
import com.google.common.collect.Sets;
import com.android.jack.Jack;
-import com.android.jack.Options;
-import com.android.jack.Options.SwitchEnumOptStrategy;
import com.android.jack.ir.ast.JDefinedClass;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.ir.ast.JDefinedEnum;
@@ -79,7 +77,7 @@
@Nonnull
private final SwitchEnumOptStrategy optimizationStrategy =
- ThreadConfig.get(Options.OPTIMIZED_ENUM_SWITCH);
+ ThreadConfig.get(OptimizedSwitchEnumSupport.OPTIMIZED_ENUM_SWITCH);
// this map represents relationship from the package to synthetic class. There should only be
// one synthetic class at most per package. Synthetic class cannot be located anywhere because
@@ -366,14 +364,14 @@
sortedEnumType.getMarker(EnumFieldMarker.class);
assert enumFieldMarker != null;
sb.append(Jack.getLookupFormatter().getName(sortedEnumType));
- sb.append(":");
+ sb.append(':');
enumFieldMarker.sortEnumFields();
List<JEnumField> sortedEnumFields = enumFieldMarker.getEnumFields();
for (JEnumField enumField : sortedEnumFields) {
sb.append(enumField.getName());
- sb.append(",");
+ sb.append(',');
}
- sb.append(".");
+ sb.append('.');
}
String sig = sb.toString();
sb.delete(0, sb.length());
diff --git a/jack/src/com/android/jack/transformations/finallyblock/FinallyRemover.java b/jack/src/com/android/jack/transformations/finallyblock/FinallyRemover.java
index 0e253c5..6367c0c 100644
--- a/jack/src/com/android/jack/transformations/finallyblock/FinallyRemover.java
+++ b/jack/src/com/android/jack/transformations/finallyblock/FinallyRemover.java
@@ -268,6 +268,7 @@
// Find the previous try statement which will catch exceptions.
while (!(stmt instanceof JTryStatement) && !(stmt instanceof JMethodBody)) {
+ assert stmt != null;
previous = stmt;
stmt = stmt.getParent();
}
@@ -402,6 +403,7 @@
private boolean isBranchingOutsideOfTryStatement(@Nonnull JGoto gotoStatement) {
JNode parent = gotoStatement.getTargetBlock().getParent();
while (parent != tryStmt && !(parent instanceof JMethodBody)) {
+ assert parent != null;
parent = parent.getParent();
}
if (parent == tryStmt) {
diff --git a/jack/src/com/android/jack/transformations/lambda/LambdaCollection.java b/jack/src/com/android/jack/transformations/lambda/LambdaCollection.java
index b1e3e4e..1882659 100644
--- a/jack/src/com/android/jack/transformations/lambda/LambdaCollection.java
+++ b/jack/src/com/android/jack/transformations/lambda/LambdaCollection.java
@@ -45,11 +45,11 @@
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
-import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
/**
@@ -214,14 +214,14 @@
* </pre>
*/
void createLambdaClassGroups(@Nonnull JSession session) {
- int nextId = 0;
// Create a map sorted by key to ensure a stable order
// of the created lambda group classes
+ Map<String, Integer> typeHashConflicts = new HashMap<>();
TreeMap<Key, ConcurrentHashMap<String, JLambda>> sorted = new TreeMap<>(lambdaClassSets);
for (Map.Entry<Key, ConcurrentHashMap<String, JLambda>> entry : sorted.entrySet()) {
// Create a group class to represent lambda group
- JDefinedClass groupClass = createGroupClass(
- nextId++, session, entry.getKey().pkg, getLambdaTypesHash(entry.getValue().values()));
+ JDefinedClass groupClass = createGroupClass(session, entry.getKey().pkg,
+ getLambdaTypesHash(entry.getValue().values()), typeHashConflicts);
LambdaGroup lambdaGroup = new LambdaGroup(
entry.getValue(), groupClass, entry.getKey().captureSignature);
@@ -248,16 +248,28 @@
digest.update(name.getBytes(StandardCharsets.UTF_8));
digest.update((byte) 0);
}
- return BaseEncoding.base64Url().omitPadding().encode(digest.digest());
+ String encode = BaseEncoding.base64Url().omitPadding().encode(digest.digest());
+ assert encode != null;
+ return encode;
}
@Nonnull
- private JDefinedClass createGroupClass(@Nonnegative int id,
- @Nonnull JSession session, @Nonnull JPackage pkg, @Nonnull String typesHash) {
+ private JDefinedClass createGroupClass(@Nonnull JSession session, @Nonnull JPackage pkg,
+ @Nonnull String typesHash, @Nonnull Map<String, Integer> typeHashConflicts) {
+ String lambdaClassName =
+ NamingTools.getNonSourceConflictingName(LAMBDA_GROUP_CLASS_NAME_PREFIX + typesHash);
+ Integer count = typeHashConflicts.get(typesHash);
+ if (count == null) {
+ typeHashConflicts.put(typesHash, Integer.valueOf(0));
+ } else {
+ int nextId = count.intValue() + 1;
+ lambdaClassName += "$" + nextId;
+ typeHashConflicts.put(typesHash, Integer.valueOf(nextId));
+ }
+
// Create a class
- JDefinedClass groupClass = new JDefinedClass(SourceInfo.UNKNOWN,
- NamingTools.getNonSourceConflictingName(
- LAMBDA_GROUP_CLASS_NAME_PREFIX + id + "$" + typesHash),
+ JDefinedClass groupClass = new JDefinedClass(
+ SourceInfo.UNKNOWN, lambdaClassName,
JModifier.FINAL | JModifier.SYNTHETIC,
pkg, NopClassOrInterfaceLoader.INSTANCE);
groupClass.setSuperClass(javaLangObject);
diff --git a/jack/src/com/android/jack/transformations/lambda/LambdaGroupClassFinalizer.java b/jack/src/com/android/jack/transformations/lambda/LambdaGroupClassFinalizer.java
index 3b70569..e306dc9 100644
--- a/jack/src/com/android/jack/transformations/lambda/LambdaGroupClassFinalizer.java
+++ b/jack/src/com/android/jack/transformations/lambda/LambdaGroupClassFinalizer.java
@@ -46,6 +46,7 @@
import com.android.jack.ir.ast.JParameter;
import com.android.jack.ir.ast.JParameterRef;
import com.android.jack.ir.ast.JPrimitiveType;
+import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JReturnStatement;
import com.android.jack.ir.ast.JSession;
import com.android.jack.ir.ast.JShortLiteral;
@@ -60,6 +61,8 @@
import com.android.jack.ir.types.JIntegralType32;
import com.android.jack.lookup.CommonTypes;
import com.android.jack.lookup.JPhantomLookup;
+import com.android.jack.scheduling.filter.TypeWithoutPrebuiltFilter;
+import com.android.jack.transformations.ast.NewInstanceRemoved;
import com.android.jack.transformations.request.AppendField;
import com.android.jack.transformations.request.AppendMethod;
import com.android.jack.transformations.request.AppendStatement;
@@ -68,6 +71,7 @@
import com.android.sched.item.Description;
import com.android.sched.schedulable.Constraint;
import com.android.sched.schedulable.ExclusiveAccess;
+import com.android.sched.schedulable.Filter;
import com.android.sched.schedulable.RunnableSchedulable;
import com.android.sched.schedulable.Support;
import com.android.sched.schedulable.Transform;
@@ -78,6 +82,7 @@
import java.util.Collections;
import java.util.List;
import java.util.TreeMap;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
@@ -85,14 +90,16 @@
/** Finishing lambda group classes construction */
@Description("Lambdas optimization, finishing lambda group classes construction")
@Constraint(need = LambdaGroupMarker.class)
-@Transform(add = { JAsgOperation.class, JBlock.class, JByteLiteral.class, JConstructor.class,
- JDynamicCastOperation.class, JField.class, JFieldRef.class, JIntLiteral.class,
- JMethod.class, JMethodBody.class, JMethodCall.class, JNewInstance.class,
- JParameter.class, JParameterRef.class, JReturnStatement.class,
- JShortLiteral.class, JSwitchStatement.class, JThisRef.class,
- JThrowStatement.class, LambdaInfoMarker.class })
+@Transform(
+ add = {JAsgOperation.class, JBlock.class, JByteLiteral.class, JConstructor.class,
+ JDynamicCastOperation.class, JField.class, JFieldRef.class, JIntLiteral.class,
+ JMethod.class, JMethodBody.class, JMethodCall.class, JNewInstance.class,
+ JParameter.class, JParameterRef.class, JReturnStatement.class, JShortLiteral.class,
+ JSwitchStatement.class, JThisRef.class, JThrowStatement.class, LambdaInfoMarker.class},
+ remove = {NewInstanceRemoved.class})
@ExclusiveAccess(JSession.class)
@Support(LambdaToAnonymousConverter.class)
+@Filter(TypeWithoutPrebuiltFilter.class)
public final class LambdaGroupClassFinalizer
implements RunnableSchedulable<JDefinedClassOrInterface> {
@@ -426,11 +433,11 @@
assert thisLocal != null;
// super()
- JMethodIdWide superConstructor = javaLangObject.getOrCreateMethodIdWide(
- NamingTools.INIT_NAME, Collections.<JType>emptyList(), MethodKind.INSTANCE_NON_VIRTUAL);
+ JMethodId superConstructor =
+ javaLangObject.getOrCreateMethodId(NamingTools.INIT_NAME, Collections.<JType>emptyList(),
+ MethodKind.INSTANCE_NON_VIRTUAL, JPrimitiveType.JPrimitiveTypeEnum.VOID.getType());
JMethodCall superCall = new JMethodCall(SourceInfo.UNKNOWN,
- thisLocal.makeRef(SourceInfo.UNKNOWN), javaLangObject,
- superConstructor, JPrimitiveType.JPrimitiveTypeEnum.VOID.getType(), false);
+ thisLocal.makeRef(SourceInfo.UNKNOWN), javaLangObject, superConstructor, false);
request.append(new AppendStatement(block, superCall.makeStatement()));
// Add $id assignment if needed
@@ -510,9 +517,7 @@
// Generate a body of the main method
JMethodIdRef lambdaMethodIdRef = lambda.getMethodIdRef();
JMethodId methodId = lambdaMethodIdRef.getMethodId();
- JMethod lambdaMethod = lambdaMethodIdRef.getEnclosingType()
- .getMethod(methodId.getMethodIdWide().getName(), methodId.getType(),
- methodId.getMethodIdWide().getParamTypes());
+ JMethod lambdaMethod = lambdaMethodIdRef.getEnclosingType().getMethod(methodId);
LambdaInfoMarker marker = lambda.getMarker(LambdaInfoMarker.class);
assert marker != null;
@@ -590,10 +595,9 @@
JBlock bodyBlock = new JBlock(SourceInfo.UNKNOWN);
JMethodBody body = new JMethodBody(SourceInfo.UNKNOWN, bodyBlock);
- JMethodCall call = new JMethodCall(SourceInfo.UNKNOWN,
- calleeThisRef, callee.getEnclosingType(),
- callee.getMethodId().getMethodIdWide(), callee.getType(),
- !callee.isStatic() && !callee.isPrivate());
+ JMethodCall call =
+ new JMethodCall(SourceInfo.UNKNOWN, calleeThisRef, callee.getEnclosingType(),
+ callee.getMethodId(), !callee.isStatic() && !callee.isPrivate());
// Build call arguments, reshuffled captures first, then arguments
List<JParameter> callerParams = caller.getParams();
@@ -777,11 +781,10 @@
request.append(new AppendStatement(mainSwitchBlock, defaultCase));
JBlock next = new JBlock(SourceInfo.UNKNOWN);
request.append(new AppendStatement(mainSwitchBlock, next));
- JNewInstance newAssertionError = new JNewInstance(
- SourceInfo.UNKNOWN, javaLangAssertionError,
- javaLangAssertionError.getOrCreateMethodIdWide(
- NamingTools.INIT_NAME, Collections.<JType>emptyList(),
- MethodKind.INSTANCE_NON_VIRTUAL));
+ JNewInstance newAssertionError = new JNewInstance(SourceInfo.UNKNOWN, javaLangAssertionError,
+ javaLangAssertionError.getOrCreateMethodId(NamingTools.INIT_NAME,
+ Collections.<JType>emptyList(), MethodKind.INSTANCE_NON_VIRTUAL,
+ JPrimitiveTypeEnum.VOID.getType()));
JThrowStatement throwStmt =
new JThrowStatement(SourceInfo.UNKNOWN, newAssertionError);
request.append(new AppendStatement(next, throwStmt));
@@ -810,7 +813,7 @@
JType returnType = method.getType();
JMethodCall call = new JMethodCall(SourceInfo.UNKNOWN,
self.makeRef(SourceInfo.UNKNOWN), this.group.getGroupClass(),
- method.getMethodIdWide(), returnType, false /* method is private */);
+ method.getMethodId(), false /* method is private */);
for (JParameter param : params) {
call.addArg(param.makeRef(SourceInfo.UNKNOWN));
diff --git a/jack/src/com/android/jack/transformations/lambda/LambdaInfoMarker.java b/jack/src/com/android/jack/transformations/lambda/LambdaInfoMarker.java
index 2b1420d..2225f0f 100644
--- a/jack/src/com/android/jack/transformations/lambda/LambdaInfoMarker.java
+++ b/jack/src/com/android/jack/transformations/lambda/LambdaInfoMarker.java
@@ -24,7 +24,7 @@
import com.android.jack.ir.ast.JIntLiteral;
import com.android.jack.ir.ast.JLambda;
import com.android.jack.ir.ast.JMethod;
-import com.android.jack.ir.ast.JMethodIdWide;
+import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNewInstance;
import com.android.jack.ir.ast.JShortLiteral;
import com.android.jack.ir.ast.JType;
@@ -39,6 +39,7 @@
import com.android.sched.schedulable.Transform;
import java.util.List;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
@@ -58,9 +59,9 @@
@CheckForNull
private final JField instanceField;
/** Lambda class id or NO_LAMBDA_ID */
- private int lambdaId;
+ private final int lambdaId;
@Nonnull
- private int[] captureMapping;
+ private final int[] captureMapping;
LambdaInfoMarker(@Nonnull JDefinedClass groupClass,
@CheckForNull JField instanceField, int lambdaId, @Nonnull int[] captureMapping) {
@@ -119,8 +120,8 @@
@Nonnull TransformationRequest request, @Nonnull JConstructor constructor,
@Nonnull List<JExpression> args, @Nonnull SourceInfo sourceInfo) {
- JMethodIdWide constructorIdWide = constructor.getMethodIdWide();
- List<JType> paramTypes = constructorIdWide.getParamTypes();
+ JMethodId constructorId = constructor.getMethodId();
+ List<JType> paramTypes = constructorId.getMethodIdWide().getParamTypes();
JExpression[] newArgs = new JExpression[paramTypes.size()];
int offset = 0;
@@ -147,7 +148,7 @@
// Create instance creation
JNewInstance newNode = new JNewInstance(
- sourceInfo, this.groupClass, constructorIdWide);
+ sourceInfo, this.groupClass, constructorId);
for (JExpression newArg : newArgs) {
assert newArg != null;
request.append(new AppendArgument(newNode, newArg));
diff --git a/jack/src/com/android/jack/transformations/request/AddNameValuePair.java b/jack/src/com/android/jack/transformations/request/AddNameValuePair.java
index 3c6fafd..cfa97d4 100644
--- a/jack/src/com/android/jack/transformations/request/AddNameValuePair.java
+++ b/jack/src/com/android/jack/transformations/request/AddNameValuePair.java
@@ -18,6 +18,7 @@
import com.android.jack.ir.ast.JAnnotation;
import com.android.jack.ir.ast.JNameValuePair;
+import com.android.jack.ir.ast.JNode;
import com.android.sched.transform.TransformStep;
import javax.annotation.Nonnull;
@@ -54,12 +55,14 @@
@Override
@Nonnull
public String toString() {
+ JNode annotationParent = annotation.getParent();
+ assert annotationParent != null;
StringBuilder sb = new StringBuilder("Add ");
sb.append(pair.toSource());
sb.append(" in ");
sb.append(annotation.toSource());
sb.append(" on ");
- sb.append(annotation.getParent().toSource());
+ sb.append(annotationParent.toSource());
return sb.toString();
}
}
diff --git a/jack/src/com/android/jack/transformations/request/AppendBefore.java b/jack/src/com/android/jack/transformations/request/AppendBefore.java
index 43969cd..25f6184 100644
--- a/jack/src/com/android/jack/transformations/request/AppendBefore.java
+++ b/jack/src/com/android/jack/transformations/request/AppendBefore.java
@@ -50,21 +50,24 @@
@Override
public void apply() throws UnsupportedOperationException {
- if (existingNode.getParent() == null) {
+ final JNode existingNodeParent = existingNode.getParent();
+ if (existingNodeParent == null) {
throw new UnsupportedOperationException();
}
- existingNode.getParent().insertBefore(existingNode, newNode);
+ existingNodeParent.insertBefore(existingNode, newNode);
}
@Override
@Nonnull
public String toString() {
+ final JNode existingNodeParent = existingNode.getParent();
+ assert existingNodeParent != null;
StringBuilder sb = new StringBuilder("Append ");
sb.append(newNode.toSource());
sb.append(" before ");
sb.append(existingNode.toSource());
sb.append(" in ");
- sb.append(existingNode.getParent().toSource());
+ sb.append(existingNodeParent.toSource());
return sb.toString();
}
diff --git a/jack/src/com/android/jack/transformations/request/PrependAfter.java b/jack/src/com/android/jack/transformations/request/PrependAfter.java
index 1b49e46..32b7903 100644
--- a/jack/src/com/android/jack/transformations/request/PrependAfter.java
+++ b/jack/src/com/android/jack/transformations/request/PrependAfter.java
@@ -50,21 +50,24 @@
@Override
public void apply() throws UnsupportedOperationException {
- if (existingNode.getParent() == null) {
+ final JNode existingNodeParent = existingNode.getParent();
+ if (existingNodeParent == null) {
throw new UnsupportedOperationException();
}
- existingNode.getParent().insertAfter(existingNode, newNode);
+ existingNodeParent.insertAfter(existingNode, newNode);
}
@Override
@Nonnull
public String toString() {
+ final JNode existingNodeParent = existingNode.getParent();
+ assert existingNodeParent != null;
StringBuilder sb = new StringBuilder("Prepend ");
sb.append(newNode.toSource());
sb.append(" after ");
sb.append(existingNode.toSource());
sb.append(" in ");
- sb.append(existingNode.getParent().toSource());
+ sb.append(existingNodeParent.toSource());
return sb.toString();
}
diff --git a/jack/src/com/android/jack/transformations/request/PutNameValuePair.java b/jack/src/com/android/jack/transformations/request/PutNameValuePair.java
index 5c98e49..aef0557 100644
--- a/jack/src/com/android/jack/transformations/request/PutNameValuePair.java
+++ b/jack/src/com/android/jack/transformations/request/PutNameValuePair.java
@@ -18,6 +18,7 @@
import com.android.jack.ir.ast.JAnnotation;
import com.android.jack.ir.ast.JNameValuePair;
+import com.android.jack.ir.ast.JNode;
import javax.annotation.Nonnull;
@@ -54,12 +55,14 @@
@Override
@Nonnull
public String toString() {
+ final JNode annotationParent = annotation.getParent();
+ assert annotationParent != null;
StringBuilder sb = new StringBuilder("Put ");
sb.append(pair.toSource());
sb.append(" in ");
sb.append(annotation.toSource());
sb.append(" on ");
- sb.append(annotation.getParent().toSource());
+ sb.append(annotationParent.toSource());
return sb.toString();
}
}
diff --git a/jack/src/com/android/jack/transformations/request/Remove.java b/jack/src/com/android/jack/transformations/request/Remove.java
index 6dd2ccb..61b9941 100644
--- a/jack/src/com/android/jack/transformations/request/Remove.java
+++ b/jack/src/com/android/jack/transformations/request/Remove.java
@@ -41,18 +41,21 @@
@Override
public void apply() throws UnsupportedOperationException {
- if (node.getParent() == null) {
+ final JNode parent = node.getParent();
+ if (parent == null) {
throw new UnsupportedOperationException();
}
- node.getParent().remove(node);
+ parent.remove(node);
}
@Override
public String toString() {
+ final JNode parent = node.getParent();
+ assert parent != null;
StringBuilder sb = new StringBuilder("Remove ");
sb.append(node.toSource());
sb.append(" in ");
- sb.append(node.getParent().toSource());
+ sb.append(parent.toSource());
return sb.toString();
}
diff --git a/jack/src/com/android/jack/transformations/request/Replace.java b/jack/src/com/android/jack/transformations/request/Replace.java
index 57a2e4f..d766999 100644
--- a/jack/src/com/android/jack/transformations/request/Replace.java
+++ b/jack/src/com/android/jack/transformations/request/Replace.java
@@ -48,21 +48,24 @@
@Override
public void apply() throws UnsupportedOperationException {
- if (existingNode.getParent() == null) {
+ final JNode existingNodeParent = existingNode.getParent();
+ if (existingNodeParent == null) {
throw new UnsupportedOperationException();
}
- existingNode.getParent().replace(existingNode, newNode);
+ existingNodeParent.replace(existingNode, newNode);
}
@Override
@Nonnull
public String toString() {
+ final JNode existingNodeParent = existingNode.getParent();
+ assert existingNodeParent != null;
StringBuilder sb = new StringBuilder("Replace ");
sb.append(existingNode.toSource());
sb.append(" with ");
sb.append(newNode.toSource());
sb.append(" in ");
- sb.append(existingNode.getParent().toSource());
+ sb.append(existingNodeParent.toSource());
return sb.toString();
}
}
diff --git a/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java b/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java
index 62931b0..8ed5513 100644
--- a/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java
+++ b/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java
@@ -87,7 +87,8 @@
*/
@Description("Transform body of a JMethod to into a three address form.")
@Name("ThreeAddressCodeBuilder")
-@Constraint(need = {NoImplicitBlock.class, SourceCast.class}, no = {BooleanTestOutsideIf.class,
+@Constraint(need = {NoImplicitBlock.class, SourceCast.class, DefinitionMarker.class},
+ no = {BooleanTestOutsideIf.class,
InitInNewArray.class, JAssertStatement.class, JAsgOperation.class, JFieldInitializer.class,
JConditionalOperation.class, JLoop.class, JCastOperation.WithIntersectionType.class})
@Transform(add = {ThreeAddressCodeForm.class,
diff --git a/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeChecker.java b/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeChecker.java
index e138738..cff840f 100644
--- a/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeChecker.java
+++ b/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeChecker.java
@@ -26,6 +26,7 @@
import com.android.jack.ir.ast.JLocalRef;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
+import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JParameterRef;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.transformations.SanityChecks;
@@ -74,7 +75,9 @@
}
private static void throwError(@Nonnull JExpression expr) {
- throw new AssertionError(expr.getParent().toSource() + " is not three address code.");
+ final JNode parent = expr.getParent();
+ assert parent != null;
+ throw new AssertionError(parent.toSource() + " is not three address code.");
}
private boolean isValidExpressionForTac(@Nonnull JExpression expr) {
diff --git a/jack/src/com/android/jack/transformations/uselessif/UselessIfRemover.java b/jack/src/com/android/jack/transformations/uselessif/UselessIfRemover.java
index 63aaeaf..7a4baed 100644
--- a/jack/src/com/android/jack/transformations/uselessif/UselessIfRemover.java
+++ b/jack/src/com/android/jack/transformations/uselessif/UselessIfRemover.java
@@ -75,13 +75,8 @@
tracer.getStatistic(REMOVED_IF).incValue();
if (cond.getValue()) {
JStatement thenStmt = ifStmt.getThenStmt();
- if (thenStmt != null) {
- // if (true) A else B => A
- request.append(new Replace(ifStmt, thenStmt));
- } else {
- // if (true) else B => []
- request.append(new Remove(ifStmt));
- }
+ // if (true) A else B => A
+ request.append(new Replace(ifStmt, thenStmt));
} else {
JStatement elseStmt = ifStmt.getElseStmt();
if (elseStmt != null) {
diff --git a/jack/tests/com/android/jack/AllUnitTests.java b/jack/tests/com/android/jack/AllUnitTests.java
index 9042487..b0af5fb 100644
--- a/jack/tests/com/android/jack/AllUnitTests.java
+++ b/jack/tests/com/android/jack/AllUnitTests.java
@@ -20,7 +20,7 @@
import com.android.jack.ir.ast.JDefinedInterfaceTest;
import com.android.jack.ir.ast.MarkerCollectorTest;
import com.android.jack.ir.impl.ReferenceMapperTest;
-import com.android.jack.jayce.v0002.io.EscapeStringTest;
+import com.android.jack.jayce.v0004.io.EscapeStringTest;
import com.android.jack.optimizations.ExpressionSimplifierTest;
import com.android.jack.optimizations.tailrecursion.TailRecursionTest;
import com.android.jack.preprocessor.PreProcessorTest;
diff --git a/jack/tests/com/android/jack/LongLastingUnitTests.java b/jack/tests/com/android/jack/LongLastingUnitTests.java
index fdb76ac..4539d88 100644
--- a/jack/tests/com/android/jack/LongLastingUnitTests.java
+++ b/jack/tests/com/android/jack/LongLastingUnitTests.java
@@ -18,7 +18,7 @@
import com.android.jack.category.KnownBugs;
-import com.android.jack.category.SlowTests;
+import com.android.jack.category.FunctionalNonPreSubmitTests;
import org.junit.experimental.categories.Categories;
import org.junit.experimental.categories.Categories.ExcludeCategory;
@@ -31,7 +31,7 @@
* CL.
*/
@RunWith(Categories.class)
-@IncludeCategory(SlowTests.class)
+@IncludeCategory(FunctionalNonPreSubmitTests.class)
@ExcludeCategory(KnownBugs.class)
@SuiteClasses(value = {AllUnitTests.class})
public class LongLastingUnitTests {
diff --git a/jack/tests/com/android/jack/category/ExtraTests.java b/jack/tests/com/android/jack/category/ExtraTests.java
index bf0e5ad..6c85158 100644
--- a/jack/tests/com/android/jack/category/ExtraTests.java
+++ b/jack/tests/com/android/jack/category/ExtraTests.java
@@ -19,6 +19,6 @@
/**
* Tests that are not critical, so that we do not want to run them each time we submit a CL.
*/
-public interface ExtraTests extends NonPreSubmitTests {
+public interface ExtraTests extends FunctionalNonPreSubmitTests {
}
diff --git a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java b/jack/tests/com/android/jack/category/FunctionalNonPreSubmitTests.java
similarity index 73%
copy from jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
copy to jack/tests/com/android/jack/category/FunctionalNonPreSubmitTests.java
index 8c344dd..d832449 100644
--- a/jack-tests/tests/com/android/jack/clinit/jack/ClInitWithVariableInit.java
+++ b/jack/tests/com/android/jack/category/FunctionalNonPreSubmitTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.android.jack.clinit.jack;
+package com.android.jack.category;
-public class ClInitWithVariableInit {
+/**
+ * Tests that we do not need to run before submitting a CL.
+ */
+public interface FunctionalNonPreSubmitTests {
- static {
- int lv = 5;
- }
}
diff --git a/jack/tests/com/android/jack/category/NonPreSubmitTests.java b/jack/tests/com/android/jack/category/NonPreSubmitTests.java
index 9c4d07a..5221203 100644
--- a/jack/tests/com/android/jack/category/NonPreSubmitTests.java
+++ b/jack/tests/com/android/jack/category/NonPreSubmitTests.java
@@ -17,7 +17,8 @@
package com.android.jack.category;
/**
- * Tests that we do not need to run before submitting a CL.
+ * This category is aimed at grouping functional non-pre-submit tests
+ * along with tests that fail due to non bugs.
*/
public interface NonPreSubmitTests {
diff --git a/jack/tests/com/android/jack/category/RedundantTests.java b/jack/tests/com/android/jack/category/RedundantTests.java
index 02e7410..75c5483 100644
--- a/jack/tests/com/android/jack/category/RedundantTests.java
+++ b/jack/tests/com/android/jack/category/RedundantTests.java
@@ -20,6 +20,6 @@
* Tests that are already covered by another test. They may be interesting on their own, but do not
* need to be included in a pre-submit test suite.
*/
-public interface RedundantTests extends NonPreSubmitTests {
+public interface RedundantTests extends FunctionalNonPreSubmitTests {
}
diff --git a/jack/tests/com/android/jack/category/SlowTests.java b/jack/tests/com/android/jack/category/SlowTests.java
index 78dff67..16d0c43 100644
--- a/jack/tests/com/android/jack/category/SlowTests.java
+++ b/jack/tests/com/android/jack/category/SlowTests.java
@@ -19,6 +19,6 @@
/**
* Tests that are time-consuming, so that we do not want to run them each time we submit a CL.
*/
-public interface SlowTests extends NonPreSubmitTests {
+public interface SlowTests extends FunctionalNonPreSubmitTests {
}
diff --git a/jack/tests/com/android/jack/frontend/ClinitTest.java b/jack/tests/com/android/jack/frontend/ClinitTest.java
index 7f4fac0..f88725e 100644
--- a/jack/tests/com/android/jack/frontend/ClinitTest.java
+++ b/jack/tests/com/android/jack/frontend/ClinitTest.java
@@ -36,9 +36,9 @@
public class ClinitTest {
public static final String CLASS_WITH_VARIABLE_INIT_BINARY_NAME
- = "com/android/jack/clinit/jack/ClInitWithVariableInit";
+ = "com/android/jack/clinit/test001/jack/ClInitWithVariableInit";
public static final String CLASS_BINARY_NAME
- = "com/android/jack/clinit/jack/ClInit";
+ = "com/android/jack/clinit/test001/jack/ClInit";
@After
public void tearDown() {
diff --git a/jack/tests/com/android/jack/jayce/v0003/io/EscapeStringTest.java b/jack/tests/com/android/jack/jayce/v0003/io/EscapeStringTest.java
deleted file mode 100644
index 8ee4e46..0000000
--- a/jack/tests/com/android/jack/jayce/v0003/io/EscapeStringTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.jayce.v0003.io;
-
-import com.android.jack.IllegalOptionsException;
-import com.android.jack.Options;
-import com.android.jack.TestTools;
-import com.android.sched.util.RunnableHooks;
-import com.android.sched.util.config.ConfigurationException;
-import com.android.sched.util.config.ThreadConfig;
-import com.android.sched.util.file.CannotChangePermissionException;
-import com.android.sched.util.file.CannotCreateFileException;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import javax.annotation.Nonnull;
-
-public class EscapeStringTest {
-
- @Test
- public void test001() throws Exception {
- String string = "abcd";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test002() throws Exception {
- String string = "ab\"cd\"";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test003() throws Exception {
- String string = "ab'cd'";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test004() throws Exception {
- String string = "ab\tcd";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test005() throws Exception {
- String string = "ab\rcd";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test006() throws Exception {
- String string = "ab\ncd";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test007() throws Exception {
- String string = "ab\bcd";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test008() throws Exception {
- String string = "ab\fcd";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test009() throws Exception {
- String string = "\"'\\";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test010() throws Exception {
- String string = "[ab]\\b\\\\o5\\xF9\\u1E7B\\t\\n\\f\\r\\a\\e[yz]";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test011() throws Exception {
- String string = "\uD9A0\uDE81*abc";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Test
- public void test012() throws Exception {
- String string = "\uDE81|\uD9A0\uDE81|\uD9A0";
- Assert.assertEquals(string, writeStringAndReadItAfter(string));
- }
-
- @Nonnull
- private String writeStringAndReadItAfter(@Nonnull String stringToWrite) throws IOException,
- IllegalOptionsException, CannotCreateFileException, CannotChangePermissionException {
- File tmp = TestTools.createTempFile("tmp", "");
- RunnableHooks hooks = new RunnableHooks();
- try {
- Options options = new Options();
- options.checkValidity(hooks);
- options.getConfigBuilder(hooks).getCodecContext().setDebug();
- ThreadConfig.setConfig(options.getConfig());
- FileOutputStream fos = new FileOutputStream(tmp);
- JayceInternalWriterImpl jw = new JayceInternalWriterImpl(fos);
- jw.writeString(stringToWrite);
- jw.close();
- FileInputStream fis = new FileInputStream(tmp);
- Tokenizer t = new Tokenizer(fis);
- String result = t.readString();
- fis.close();
- assert result != null;
- return result;
- } catch (ConfigurationException e) {
- throw new AssertionError(e);
- } finally {
- ThreadConfig.unsetConfig();
- hooks.runHooks();
- }
- }
-}
diff --git a/jack/tests/com/android/jack/jayce/v0002/io/EscapeStringTest.java b/jack/tests/com/android/jack/jayce/v0004/io/EscapeStringTest.java
similarity index 90%
rename from jack/tests/com/android/jack/jayce/v0002/io/EscapeStringTest.java
rename to jack/tests/com/android/jack/jayce/v0004/io/EscapeStringTest.java
index 4900be2..011b30f 100644
--- a/jack/tests/com/android/jack/jayce/v0002/io/EscapeStringTest.java
+++ b/jack/tests/com/android/jack/jayce/v0004/io/EscapeStringTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.jack.jayce.v0002.io;
+package com.android.jack.jayce.v0004.io;
import com.android.jack.IllegalOptionsException;
import com.android.jack.Options;
@@ -23,7 +23,11 @@
import com.android.sched.util.config.ConfigurationException;
import com.android.sched.util.config.ThreadConfig;
import com.android.sched.util.file.CannotChangePermissionException;
+import com.android.sched.util.file.CannotCloseException;
import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.util.location.FileLocation;
+import com.android.sched.util.location.HasLocation;
+import com.android.sched.util.location.Location;
import junit.framework.Assert;
@@ -113,7 +117,7 @@
@Nonnull
private String writeStringAndReadItAfter(@Nonnull String stringToWrite)
throws CannotCreateFileException, CannotChangePermissionException, IllegalOptionsException,
- IOException {
+ CannotCloseException, IOException {
File tmp = TestTools.createTempFile("tmp", "");
RunnableHooks hooks = new RunnableHooks();
try {
@@ -122,7 +126,13 @@
options.getConfigBuilder(hooks).getCodecContext().setDebug();
ThreadConfig.setConfig(options.getConfig());
FileOutputStream fos = new FileOutputStream(tmp);
- JayceInternalWriterImpl jw = new JayceInternalWriterImpl(fos);
+ JayceInternalWriterImpl jw = new JayceInternalWriterImpl(fos, new HasLocation(){
+ @Override
+ @Nonnull
+ public Location getLocation() {
+ return new FileLocation(tmp);
+ }
+ });
jw.writeString(stringToWrite);
jw.close();
FileInputStream fis = new FileInputStream(tmp);
diff --git a/jack/tests/com/android/jack/reporting/ProblemLevelTest.java b/jack/tests/com/android/jack/reporting/ProblemLevelTest.java
index 0b5eb5f..5551c5c 100644
--- a/jack/tests/com/android/jack/reporting/ProblemLevelTest.java
+++ b/jack/tests/com/android/jack/reporting/ProblemLevelTest.java
@@ -16,7 +16,7 @@
package com.android.jack.reporting;
-import com.android.jack.Options.VerbosityLevel;
+import com.android.jack.VerbosityLevel;
import com.android.jack.reporting.Reportable.ProblemLevel;
import junit.framework.Assert;
diff --git a/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/DictionaryNameProviderTest.java b/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/DictionaryNameProviderTest.java
index c31c4bc..e4af15f 100644
--- a/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/DictionaryNameProviderTest.java
+++ b/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/DictionaryNameProviderTest.java
@@ -16,12 +16,14 @@
package com.android.jack.shrob.obfuscation.nameprovider;
+import com.android.jack.category.KnownBugs;
import com.android.jack.shrob.obfuscation.key.TypeKey;
import com.android.jack.test.TestsProperties;
import junit.framework.Assert;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
import java.io.File;
@@ -43,6 +45,28 @@
Assert.assertEquals("stu", dnp.getNewName(oldKey));
Assert.assertEquals("vw$", dnp.getNewName(oldKey));
Assert.assertEquals("xyz_", dnp.getNewName(oldKey));
+ Assert.assertEquals("ea", dnp.getNewName(oldKey));
+ Assert.assertEquals("abc", dnp.getNewName(oldKey));
+ Assert.assertEquals("a", dnp.getNewName(oldKey));
+ }
+
+ @Test
+ @Category(KnownBugs.class)
+ public void dictionaryNameProviderTestUTF8() throws Exception {
+ TypeKey oldKey = new TypeKey("old");
+ File dictionaryFile = new File(TestsProperties.getJackRootDir(),
+ "jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary-utf8.txt");
+ DictionaryNameProvider dnp =
+ new DictionaryNameProvider(dictionaryFile, new LowerCaseAlphabeticalNameProvider());
+ Assert.assertEquals("abc", dnp.getNewName(oldKey));
+ Assert.assertEquals("def", dnp.getNewName(oldKey));
+ Assert.assertEquals("ghi", dnp.getNewName(oldKey));
+ Assert.assertEquals("jkl", dnp.getNewName(oldKey));
+ Assert.assertEquals("mno", dnp.getNewName(oldKey));
+ Assert.assertEquals("pqr", dnp.getNewName(oldKey));
+ Assert.assertEquals("stu", dnp.getNewName(oldKey));
+ Assert.assertEquals("vw$", dnp.getNewName(oldKey));
+ Assert.assertEquals("xyz_", dnp.getNewName(oldKey));
Assert.assertEquals("éà ", dnp.getNewName(oldKey));
Assert.assertEquals("abc", dnp.getNewName(oldKey));
Assert.assertEquals("a", dnp.getNewName(oldKey));
diff --git a/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary-utf8.txt b/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary-utf8.txt
new file mode 100644
index 0000000..7be866d
--- /dev/null
+++ b/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary-utf8.txt
@@ -0,0 +1,14 @@
+# this is a comment
+abc# this is another comment
+def # this is again another comment after an ignored character
+ghi
+jkl
+mno pqr
+stu!vw$[
+
+/*-+&~"'
+xyz_
+
+ éÃ
+1abc
+!
\ No newline at end of file
diff --git a/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary.txt b/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary.txt
index 7be866d..b7c9f2f 100644
--- a/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary.txt
+++ b/jack/tests/com/android/jack/shrob/obfuscation/nameprovider/dictionary.txt
@@ -9,6 +9,6 @@
/*-+&~"'
xyz_
- éÃ
+ ea
1abc
!
\ No newline at end of file
diff --git a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java b/jarjar/build.gradle
similarity index 77%
copy from jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
copy to jarjar/build.gradle
index 0b9fd92..3e323b0 100644
--- a/jack-coverage/tests/com/android/jack/coverage/test002/Interface.java
+++ b/jarjar/build.gradle
@@ -14,7 +14,11 @@
* limitations under the License.
*/
-package com.android.jack.coverage.test002;
+apply plugin: 'java'
-public interface Interface {}
-
+jar {
+ from zipTree("jarjar.jar")
+ manifest {
+ attributes ("Main-Class":"com.tonicsystems.jarjar.Main", "Implementation-Version":"1.4")
+ }
+}
diff --git a/jill-api/.classpath b/jill-api/.classpath
index 6a74d2e..dcc207a 100644
--- a/jill-api/.classpath
+++ b/jill-api/.classpath
@@ -2,7 +2,7 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" path=".apt_generated">
<attributes>
<attribute name="optional" value="true"/>
diff --git a/jill-api/.settings/org.eclipse.jdt.core.prefs b/jill-api/.settings/org.eclipse.jdt.core.prefs
index f6e5ff1..7eb95e1 100644
--- a/jill-api/.settings/org.eclipse.jdt.core.prefs
+++ b/jill-api/.settings/org.eclipse.jdt.core.prefs
@@ -6,9 +6,9 @@
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.CheckForNull
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -97,7 +97,7 @@
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/jill-api/build.gradle b/jill-api/build.gradle
new file mode 100644
index 0000000..f746453
--- /dev/null
+++ b/jill-api/build.gradle
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+apply plugin: 'com.github.johnrengelman.shadow'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+apply from: "$rootDir/gradle-script/checkstyle.gradle"
+apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ }
+}
+
+dependencies {
+ compileOnly libs.jsr305
+}
+
+javadoc {
+ failOnError false
+ destinationDir = file("${rootDir}/gradle-dist/doc/jack/jack-external/jill")
+}
+
+
+apply from: "$rootDir/gradle-script/versionfile.gradle"
+
+jar {
+ classifier 'lib'
+}
+
+shadowJar {
+ dependsOn createJackVersionFile
+ classifier ''
+ from ("${project.buildDir}") {
+ include "jill-api-version.properties"
+ }
+}
+
+task dist (type: Copy, dependsOn: shadowJar) {
+ from shadowJar.archivePath
+ into file("${rootDir}/gradle-dist/")
+}
diff --git a/jill/.classpath b/jill/.classpath
index d583854..e82e9f7 100644
--- a/jill/.classpath
+++ b/jill/.classpath
@@ -8,6 +8,6 @@
<classpathentry kind="lib" path="libs/jsr305-lib.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/jill-api"/>
<classpathentry combineaccessrules="false" kind="src" path="/Scheduler"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/jill/.settings/org.eclipse.jdt.core.prefs b/jill/.settings/org.eclipse.jdt.core.prefs
index 1e8b72f..9ca25ee 100644
--- a/jill/.settings/org.eclipse.jdt.core.prefs
+++ b/jill/.settings/org.eclipse.jdt.core.prefs
@@ -7,9 +7,9 @@
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -97,7 +97,7 @@
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/jill/build.gradle b/jill/build.gradle
new file mode 100644
index 0000000..fbce8a7
--- /dev/null
+++ b/jill/build.gradle
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'java'
+apply plugin: 'com.github.johnrengelman.shadow'
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+
+apply from: "$rootDir/gradle-script/checkstyle.gradle"
+apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ resources {
+ srcDirs = ['rsc']
+ exclude "jill-version.properties"
+ }
+ }
+}
+
+configurations {
+ jarjar
+}
+
+dependencies {
+ compile project(':args4j')
+ compile libs.asm_all
+ compile project(':jill-api')
+ compileOnly libs.jsr305
+ compile libs.guava
+ compile project(':sched')
+
+ jarjar project(':jarjar').configurations.archives.artifacts.files
+
+}
+
+apply from: "$rootDir/gradle-script/versionfile.gradle"
+
+jar {
+ classifier "lib"
+ dependsOn createJackVersionFile
+ from ("${project.buildDir}") {
+ include "jill-version.properties"
+ }
+}
+
+shadowJar {
+ classifier "no-jarjar"
+ manifest {
+ from 'etc/manifest.txt'
+ }
+ dependsOn createJackVersionFile
+ from ("${project.buildDir}") {
+ include "jill-version.properties"
+ }
+}
+
+task jarjar(type:Exec, dependsOn: [':jarjar:jar', shadowJar]) {
+ inputs.files 'jarjar-rules.txt', 'shadowJar.archivePath'
+ outputs.file "${buildDir}/libs/jill.jar"
+ commandLine 'java', '-jar', configurations.jarjar.singleFile, 'process', "jarjar-rules.txt", shadowJar.archivePath, file("${buildDir}/libs/jill.jar")
+}
+
+task dist (type: Copy, dependsOn: jarjar) {
+ from file("${buildDir}/libs/jill.jar")
+ into file("${rootDir}/gradle-dist/")
+}
+
+assemble.dependsOn jarjar
+
+javadoc {
+ failOnError false
+}
diff --git a/jill/jarjar-rules.txt b/jill/jarjar-rules.txt
index ee6f403..b797a5d 100644
--- a/jill/jarjar-rules.txt
+++ b/jill/jarjar-rules.txt
@@ -1 +1,7 @@
-rule org.objectweb.** com.android.jill.@0
\ No newline at end of file
+rule org.objectweb.** com.android.jill.objectweb.@1
+rule org.kohsuke.** com.android.jill.kohsuke.@1
+rule javax.annotation.** com.android.jill.javax.annotation.@1
+rule com.google.** com.android.jill.google.@1
+rule org.uncommons.** com.android.jill.uncommons.@1
+rule freemarker.** com.android.jill.freemarker.@1
+
diff --git a/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java b/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java
index 60d56ba..1114df4 100644
--- a/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java
+++ b/jill/src/com/android/jill/frontend/java/ClassNodeWriter.java
@@ -154,7 +154,6 @@
writeAnnotationMethods(cn);
annotWriter.writeAnnotations(cn);
writer.writeOpenNodeList(); // Markers
- writeGenericSignatureMarker(cn);
writeSourceNameMarker(cn);
writer.writeCloseNodeList();
sourceInfoWriter.writeDebugEnd(cn);
diff --git a/jill/src/com/android/jill/frontend/java/JavaTransformer.java b/jill/src/com/android/jill/frontend/java/JavaTransformer.java
index 8bc85b0..5fe7cec 100644
--- a/jill/src/com/android/jill/frontend/java/JavaTransformer.java
+++ b/jill/src/com/android/jill/frontend/java/JavaTransformer.java
@@ -50,6 +50,7 @@
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
import com.android.sched.vfs.WriteZipFS;
+import com.android.sched.vfs.WrongVFSTypeException;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.tree.ClassNode;
@@ -77,13 +78,13 @@
private static final String LIB_MAJOR_VERSION = "3";
@Nonnull
- private static final String LIB_MINOR_VERSION = "4";
+ private static final String LIB_MINOR_VERSION = "5";
@Nonnull
private static final String JAYCE_MAJOR_VERSION = "4";
@Nonnull
- private static final String JAYCE_MINOR_VERSION = "3";
+ private static final String JAYCE_MINOR_VERSION = "4";
@Nonnull
private static final String KEY_LIB_MAJOR_VERSION = "lib.version.major";
@@ -200,9 +201,15 @@
Service service = mdCodec.parseString(new CodecContext(), "SHA");
try {
- return new GenericOutputVFS(new DeflateFS(new MessageDigestFS(
- new PrefixedFS(baseVFS, new VPath("jayce", '/')), new MessageDigestFactory(service))));
- } catch (NotDirectoryException | CannotCreateFileException | BadVFSFormatException e) {
+ return new GenericOutputVFS(
+ new DeflateFS(
+ new MessageDigestFS(
+ new PrefixedFS(baseVFS, new VPath("jayce", '/'), Existence.MAY_EXIST),
+ new MessageDigestFactory(service))));
+ } catch (NotDirectoryException
+ | CannotCreateFileException
+ | BadVFSFormatException
+ | WrongVFSTypeException e) {
throw new JillException(e);
}
}
@@ -212,7 +219,7 @@
@SuppressWarnings("resource")
OutputVFS goVFS = new GenericOutputVFS(baseVFS);
OutputVFile libraryPropertiesOut =
- goVFS.getRootOutputVDir().createOutputVFile(new VPath(JACK_LIBRARY_PROPERTIES, '/'));
+ goVFS.getRootDir().createOutputVFile(new VPath(JACK_LIBRARY_PROPERTIES, '/'));
try (OutputStream os = libraryPropertiesOut.getOutputStream()) {
jackLibraryProperties.store(os, "Library Properties");
} catch (IOException e) {
@@ -244,7 +251,7 @@
ClassNode cn = getClassNode(is);
VPath outputPath = getVPath(cn.name);
try {
- OutputVFile vFile = outputVFS.getRootOutputVDir().createOutputVFile(outputPath);
+ OutputVFile vFile = outputVFS.getRootDir().createOutputVFile(outputPath);
try (OutputStream os = vFile.getOutputStream()) {
transform(cn, os, vFile.getLocation());
} catch (IOException e) {
diff --git a/jill/src/com/android/jill/frontend/java/JillWriter.java b/jill/src/com/android/jill/frontend/java/JillWriter.java
index 8c9efa2..5da7fb8 100644
--- a/jill/src/com/android/jill/frontend/java/JillWriter.java
+++ b/jill/src/com/android/jill/frontend/java/JillWriter.java
@@ -51,7 +51,7 @@
protected void writeValue(Object value, @CheckForNull ClassNode classNode,
@Nonnegative int currentLine) throws IOException{
if (value == null) {
- writer.writeNull();
+ writeValue(classNode, currentLine);
} else if (value instanceof Boolean) {
writeValue(((Boolean) value).booleanValue(), classNode, currentLine);
} else if (value instanceof Integer) {
diff --git a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
index 32cb758..c4203ac 100644
--- a/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
+++ b/jill/src/com/android/jill/frontend/java/MethodBodyWriter.java
@@ -66,6 +66,7 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.CheckForNull;
@@ -95,6 +96,8 @@
private static final String LAMBDA_MTH_PREFIX = "lambda$";
@Nonnegative
public static final int LAMBDA_METHOD = 0x200000;
+ @Nonnegative
+ public static final int NAME_PRESENT = 0x400000;
@Nonnull
private final Map<String, Variable> nameToVar = new HashMap<String, Variable>();
@@ -157,14 +160,19 @@
@Nonnegative
int opcode;
@Nonnull
- Variable lhs;
+ Frame<BasicValue> lhsFrame;
+ int lhsStackIdx;
@Nonnull
- Variable rhs;
+ Frame<BasicValue> rhsFrame;
+ int rhsStackIdx;
- public CmpOperands(@Nonnegative int opcode, @Nonnull Variable lhs, @Nonnull Variable rhs) {
+ public CmpOperands(@Nonnegative int opcode, @Nonnull Frame<BasicValue> lhsFrame,
+ int lhsStackIdx, @Nonnull Frame<BasicValue> rhsFrame, int rhsStackIdx) {
this.opcode = opcode;
- this.lhs = lhs;
- this.rhs = rhs;
+ this.lhsFrame = lhsFrame;
+ this.lhsStackIdx = lhsStackIdx;
+ this.rhsFrame = rhsFrame;
+ this.rhsStackIdx = rhsStackIdx;
}
}
@@ -173,6 +181,9 @@
new HashMap<Variable, MethodBodyWriter.CmpOperands>();
@Nonnull
+ private final HashMap<Variable, Object> varWithCstValue = new HashMap<>();
+
+ @Nonnull
private final AnnotationWriter annotWriter;
@Nonnegative
@@ -251,7 +262,9 @@
}
public void write() throws IOException {
- if (AsmHelper.isAnnotation(currentClass)) {
+ if (AsmHelper.isAnnotation(currentClass)
+ && AsmHelper.isAbstract(currentMethod)
+ && (currentMethod.parameters == null || currentMethod.parameters.isEmpty())) {
writeAnnotationMethod();
} else if (AsmHelper.isConstructor(currentMethod)) {
writeConstructor();
@@ -270,7 +283,7 @@
annotWriter.writeAnnotations(currentMethod);
writeMethodBody();
writer.writeOpenNodeList(); // Markers
- writeOriginalTypeInfoMarker();
+ writeGenericSignatureMarker();
writeThrownExceptionMarker();
writer.writeCloseNodeList();
sourceInfoWriter.writeDebugEnd(currentClass, endLine);
@@ -331,7 +344,7 @@
annotWriter.writeAnnotations(currentMethod);
writeMethodBody();
writer.writeOpenNodeList(); // Markers
- writeOriginalTypeInfoMarker();
+ writeGenericSignatureMarker();
writeThrownExceptionMarker();
writer.writeCloseNodeList();
sourceInfoWriter.writeDebugEnd(currentClass, endLine);
@@ -353,20 +366,18 @@
writer.writeNull();
}
writer.writeOpenNodeList(); // Markers
- writeOriginalTypeInfoMarker();
+ writeGenericSignatureMarker();
writer.writeCloseNodeList();
sourceInfoWriter.writeDebugEnd(currentClass, endLine);
writer.writeClose();
}
- private void writeOriginalTypeInfoMarker() throws IOException {
+ private void writeGenericSignatureMarker() throws IOException {
if (AsmHelper.hasValidGenericSignature(currentMethod)) {
writer.writeKeyword(Token.GENERIC_SIGNATURE);
writer.writeOpen();
writer.writeString(currentMethod.signature);
writer.writeClose();
- } else {
- writer.writeNull();
}
}
@@ -442,7 +453,7 @@
caughtType = Type.getType(Throwable.class);
}
String id = "-e_" + (unusedVarCount++);
- declaringCatchVariable = new Variable(id, id, caughtType, null);
+ declaringCatchVariable = new Variable(id, id, caughtType);
catchBlockToCatchedVariable.put(tryCatchNode, declaringCatchVariable);
}
}
@@ -526,6 +537,7 @@
Frame<BasicValue> nextFrame = (insnIdx < frames.length - 1) ? frames[insnIdx + 1] : null;
if (insn instanceof JumpInsnNode) {
+ forceToUseCstThroughVariable();
writeInsn(currentFrame, (JumpInsnNode) insn, insnIdx);
} else if (insn instanceof LdcInsnNode) {
assert nextFrame != null;
@@ -536,6 +548,7 @@
assert nextFrame != null;
writeInsn(currentFrame, nextFrame, (VarInsnNode) insn);
} else if (insn instanceof LabelNode) {
+ forceToUseCstThroughVariable();
computeCatchList((LabelNode) insn);
writeCatchBlock((LabelNode) insn, insnIdx, frames);
writeLabelInsn(insnIdx);
@@ -594,6 +607,33 @@
writer.writeClose();
}
+
+ // Stack variable is produced before a branch instruction and was not yet consumed,
+ // generated it on this branch because another branch can produce another value and Jill
+ // do not know which value used since it depend on a runtime behavior.
+ // In the same way, if we reach a label, generate stack variable with constant because
+ // several path can produce different values.
+ private void forceToUseCstThroughVariable() throws IOException {
+ if (!varWithCstValue.isEmpty()) {
+ for (Entry<Variable, Object> entry : varWithCstValue.entrySet()) {
+ writeDebugBegin(currentClass, currentLine);
+ writer.writeCatchBlockIds(currentCatchList);
+ writer.writeKeyword(Token.EXPRESSION_STATEMENT);
+ writer.writeOpen();
+ writeDebugBegin(currentClass, currentLine);
+ writer.writeKeyword(Token.ASG_OPERATION);
+ writer.writeOpen();
+ writeLocalRef(entry.getKey());
+ writeValue(entry.getValue(), currentClass, currentLine);
+ writeDebugEnd(currentClass, currentLine);
+ writer.writeClose();
+ writeDebugEnd(currentClass, currentLine);
+ writer.writeClose();
+ }
+ varWithCstValue.clear();
+ }
+ }
+
private void writeLambda(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
@Nonnull InvokeDynamicInsnNode iDyn) throws IOException {
Handle mthImplementingLambda = (Handle) iDyn.bsmArgs[1];
@@ -606,7 +646,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.LAMBDA);
@@ -988,7 +1028,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(frames[labelIdx], TOP_OF_STACK);
+ writeStack(frames[labelIdx], TOP_OF_STACK);
writeLocalRef(declaringCatchVariable);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -1076,6 +1116,12 @@
private void writeInsn(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame,
@Nonnull IntInsnNode intInsn) throws IOException {
+ if (intInsn.getOpcode() == BIPUSH || intInsn.getOpcode() == SIPUSH) {
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK),
+ Integer.valueOf(intInsn.operand));
+ return;
+ }
+
writeDebugBegin(currentClass, currentLine);
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.EXPRESSION_STATEMENT);
@@ -1083,17 +1129,9 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
switch (intInsn.getOpcode()) {
- case BIPUSH: {
- writeValue(intInsn.operand, currentClass, currentLine);
- break;
- }
- case SIPUSH: {
- writeValue(intInsn.operand, currentClass, currentLine);
- break;
- }
case NEWARRAY: {
switch (intInsn.operand) {
@@ -1155,7 +1193,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeNewArray(frame, manaIns.desc, manaIns.dims);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -1172,7 +1210,7 @@
writer.writeId(typeDesc);
writer.writeOpenNodeList();
for (int i = (dims - 1); i >= 0; i--) {
- writeStackAccess(frame, TOP_OF_STACK - i);
+ readStack(frame, TOP_OF_STACK - i);
}
writer.writeCloseNodeList();
writer.writeOpenNodeList(); // Empty initializers list.
@@ -1245,11 +1283,11 @@
throw new JillException("Not yet supported " + Printer.OPCODES[opcode]);
}
}
- writeStackAccess(frame, startIdx);
+ readStack(frame, startIdx);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
- writeStackAccess(frame, startIdx + 1);
+ readStack(frame, startIdx + 1);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
}
@@ -1293,7 +1331,7 @@
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.SWITCH_STATEMENT);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writer.writeIds(cases);
writeDebugBegin(currentClass, currentLine);
writer.writeCatchBlockIds(currentCatchList);
@@ -1306,7 +1344,11 @@
writer.writeKeyword(Token.CASE_STATEMENT);
writer.writeOpen();
writer.writeId(c.caseId);
- writeValue(c.key, currentClass, currentLine);
+ if (c.key == null) {
+ writer.writeNull();
+ } else {
+ writeValue(c.key, currentClass, currentLine);
+ }
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
writeGoto(c.labelNode);
@@ -1328,7 +1370,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
String descriptor = Type.getObjectType(typeInsn.desc).getDescriptor();
@@ -1354,7 +1396,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.INSTANCE_OF);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writer.writeId(descriptor);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -1394,7 +1436,7 @@
writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame,
Type.BOOLEAN_TYPE.getDescriptor(), TOP_OF_STACK);
} else {
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
}
break;
}
@@ -1404,12 +1446,12 @@
writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame,
Type.BOOLEAN_TYPE.getDescriptor(), TOP_OF_STACK);
} else {
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
}
break;
}
case GETFIELD: {
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
if (Type.getType(fldInsn.desc) == Type.BOOLEAN_TYPE) {
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
@@ -1424,7 +1466,7 @@
break;
}
case GETSTATIC: {
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
if (Type.getType(fldInsn.desc) == Type.BOOLEAN_TYPE) {
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
@@ -1471,7 +1513,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
if (returnType == Type.BOOLEAN_TYPE) {
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.REINTERPRETCAST_OPERATION);
@@ -1537,7 +1579,7 @@
if ((receiverType.equals(frame.getStack(frame.getStackSize() - stackArgIndex).getType())
&& !isCallToPolymorphicMethod) || mthInsn.name.equals("<init>")) {
// It is not possible to add cast on object before call to init
- writeStackAccess(frame, -stackArgIndex);
+ readStack(frame, -stackArgIndex);
} else {
writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, receiverType.getDescriptor(),
-stackArgIndex);
@@ -1586,7 +1628,7 @@
writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, argType.getDescriptor(),
-stackArgIndex);
} else {
- writeStackAccess(frame, -stackArgIndex);
+ readStack(frame, -stackArgIndex);
}
stackArgIndex--;
}
@@ -1636,7 +1678,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
if (getLocalVariable(frame, varInsn.var).getType() == Type.BOOLEAN_TYPE) {
writeCastOperation(Token.REINTERPRETCAST_OPERATION, getLocalVariable(frame, varInsn.var),
Type.INT_TYPE.getDescriptor());
@@ -1672,7 +1714,7 @@
writeCastOperation(Token.REINTERPRETCAST_OPERATION, frame, destType.getDescriptor(),
TOP_OF_STACK);
} else {
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
}
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -1698,91 +1740,35 @@
case ICONST_4:
case ICONST_5: {
assert nextFrame != null;
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
- writeValue(insn.getOpcode() - ICONST_0, currentClass, currentLine);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK),
+ Integer.valueOf(insn.getOpcode() - ICONST_0));
break;
}
case ACONST_NULL: {
assert nextFrame != null;
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
- writeValue(currentClass, currentLine);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK), null);
break;
}
case LCONST_0:
case LCONST_1: {
assert nextFrame != null;
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
- writeValue((long) (insn.getOpcode() - LCONST_0), currentClass, currentLine);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK),
+ Long.valueOf(insn.getOpcode() - LCONST_0));
break;
}
case FCONST_0:
case FCONST_1:
case FCONST_2: {
assert nextFrame != null;
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
- writeValue((float) (insn.getOpcode() - FCONST_0), currentClass, currentLine);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK),
+ new Float(insn.getOpcode() - FCONST_0));
break;
}
case DCONST_0:
case DCONST_1: {
assert nextFrame != null;
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
- writeValue((double) (insn.getOpcode() - DCONST_0), currentClass, currentLine);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK),
+ new Double(insn.getOpcode() - DCONST_0));
break;
}
case D2L:
@@ -1865,10 +1851,9 @@
case DCMPL:
case DCMPG: {
assert nextFrame != null;
- Variable lhs = getStackVariable(frame, TOP_OF_STACK - 1);
- Variable rhs = getStackVariable(frame, TOP_OF_STACK);
Variable result = getStackVariable(nextFrame, TOP_OF_STACK);
- cmpOperands.put(result, new CmpOperands(insn.getOpcode(), lhs, rhs));
+ cmpOperands.put(result,
+ new CmpOperands(insn.getOpcode(), frame, TOP_OF_STACK - 1, frame, TOP_OF_STACK));
break;
}
case DSUB:
@@ -1915,11 +1900,11 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.PREFIX_NEG_OPERATION);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
writeDebugEnd(currentClass, currentLine);
@@ -1973,11 +1958,11 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ARRAY_LENGTH);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
writeDebugEnd(currentClass, currentLine);
@@ -2003,7 +1988,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeArrayRef(frame, TOP_OF_STACK - 1, insn.getOpcode());
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -2027,7 +2012,7 @@
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
writeArrayRef(frame, TOP_OF_STACK - 2, insn.getOpcode());
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
writeDebugEnd(currentClass, currentLine);
@@ -2039,7 +2024,7 @@
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.LOCK);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
break;
@@ -2049,7 +2034,7 @@
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.UNLOCK);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
break;
@@ -2079,7 +2064,7 @@
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
writeLocalRef(tmpVar);
- writeStackAccess(frame, TOP_OF_STACK - 1);
+ readStack(frame, TOP_OF_STACK - 1);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
writeDebugEnd(currentClass, currentLine);
@@ -2109,7 +2094,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeLocalRef(tmpVar);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -2197,6 +2182,7 @@
// Result of comparison must be pop
cmpOperands.remove(getStackVariable(frame, TOP_OF_STACK));
}
+ removeStackVariableConstant(frame, TOP_OF_STACK);
break;
}
case NOP:
@@ -2212,6 +2198,10 @@
// Result of comparison must be pop
cmpOperands.remove(getStackVariable(frame, TOP_OF_STACK - 1));
}
+ removeStackVariableConstant(frame, TOP_OF_STACK);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 1);
+ } else {
+ removeStackVariableConstant(frame, TOP_OF_STACK);
}
break;
}
@@ -2220,7 +2210,7 @@
writer.writeCatchBlockIds(currentCatchList);
writer.writeKeyword(Token.THROW_STATEMENT);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
break;
@@ -2236,21 +2226,8 @@
return cmpOperands.containsKey(stackVar);
}
- private void writeInsn(@Nonnull Frame<BasicValue> nextFrame, @Nonnull LdcInsnNode ldcInsn)
- throws IOException {
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
- writeValue(ldcInsn.cst, currentClass, currentLine);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ private void writeInsn(@Nonnull Frame<BasicValue> nextFrame, @Nonnull LdcInsnNode ldcInsn) {
+ varWithCstValue.put(getStackVariable(nextFrame, TOP_OF_STACK), ldcInsn.cst);
}
private void writeInsn(
@@ -2292,8 +2269,8 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(comparisonToken);
writer.writeOpen();
- writeLocalRef(cmpOps.lhs);
- writeLocalRef(cmpOps.rhs);
+ readStack(cmpOps.lhsFrame, cmpOps.lhsStackIdx);
+ readStack(cmpOps.rhsFrame, cmpOps.rhsStackIdx);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -2334,7 +2311,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(conditionalToken);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK);
Variable v = getStackVariable(frame, TOP_OF_STACK);
if (v.getType().equals(Type.BOOLEAN_TYPE)) {
writeValue(false, currentClass, currentLine);
@@ -2379,8 +2356,8 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(conditionalToken);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK - 1);
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK - 1);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
// Then block
@@ -2522,17 +2499,27 @@
if (stackIdx == 0) {
writer.writeNull();
} else {
- writeStackAccess(frame, stackIdx);
+ readStack(frame, stackIdx);
}
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
}
- private void writeStackAccess(@Nonnull Frame<BasicValue> frame, int stackIdx)
+ private void writeStack(@Nonnull Frame<BasicValue> frame, int stackIdx)
throws IndexOutOfBoundsException, IOException {
writeLocalRef(getStackVariable(frame, stackIdx));
}
+ private void readStack(@Nonnull Frame<BasicValue> frame, int stackIdx)
+ throws IndexOutOfBoundsException, IOException {
+ Variable stackVariable = getStackVariable(frame, stackIdx);
+ if (varWithCstValue.containsKey(stackVariable)) {
+ writeValue(varWithCstValue.remove(stackVariable), currentClass, currentLine);
+ } else {
+ writeLocalRef(stackVariable);
+ }
+ }
+
private void writeLocalAccess(@Nonnull Frame<BasicValue> frame, @Nonnegative int localIdx)
throws IndexOutOfBoundsException, IOException {
writeLocalRef(getLocalVariable(frame, localIdx));
@@ -2553,11 +2540,9 @@
writer.writeOpen();
writer.writeId(v.getId());
- if (!v.isParameter()) {
- writer.writeOpenNodeList();
- writeDebugInformation(v);
- writer.writeCloseNodeList();
- }
+ writer.writeOpenNodeList();
+ writeDebugInformation(v);
+ writer.writeCloseNodeList();
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
@@ -2579,6 +2564,16 @@
writer.writeId(lvn.desc);
writer.writeString(lvn.signature);
writer.writeClose();
+ } else if (v.isParameter()) {
+ // Even if there is no debug information, generate the marker with null information to inform
+ // Jack do not use name from JParameter since it is not a debug information but the parameter
+ // name information.
+ writer.writeKeyword(Token.DEBUG_VARIABLE_INFORMATION);
+ writer.writeOpen();
+ writer.writeString(null);
+ writer.writeId(null);
+ writer.writeString(null);
+ writer.writeClose();
}
}
@@ -2591,7 +2586,7 @@
writer.writeId(fldInsn.desc);
writer.writeId(Type.getObjectType(fldInsn.owner).getDescriptor());
writer.writeFieldRefKindEnum(FieldRefKind.INSTANCE);
- writeStackAccess(frame, offset);
+ readStack(frame, offset);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
}
@@ -2655,7 +2650,7 @@
writer.writeKeyword(Token.LOCAL);
writer.writeOpen();
writer.writeId(v.getId());
- writer.writeInt(v.isSynthetic() ? Opcodes.ACC_SYNTHETIC : NO_MODIFIER);
+ writer.writeInt(v.getModifier());
writer.writeId(v.getType().getDescriptor());
writer.writeId(v.getName());
writer.writeOpenNodeList(); // Empty annotation set, annotations on locals are not kept
@@ -2676,7 +2671,7 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeCastOperation(Token.DYNAMIC_CAST_OPERATION, frame, Type.getDescriptor(targetType),
TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
@@ -2705,7 +2700,20 @@
private void writeCastOperation(@Nonnull Token cast, @Nonnull Frame<BasicValue> frame,
@Nonnull String typeDesc, int stackIdx) throws IOException {
- writeCastOperation(cast, getStackVariable(frame, stackIdx), typeDesc);
+ assert cast == Token.DYNAMIC_CAST_OPERATION || cast == Token.REINTERPRETCAST_OPERATION;
+ writeDebugBegin(currentClass, currentLine);
+ writer.writeKeyword(cast);
+ writer.writeOpen();
+ if (cast == Token.DYNAMIC_CAST_OPERATION) {
+ ArrayList<String> types = new ArrayList<String>(1);
+ types.add(typeDesc);
+ writer.writeIds(types);
+ } else {
+ writer.writeId(typeDesc);
+ }
+ readStack(frame, stackIdx);
+ writeDebugEnd(currentClass, currentLine);
+ writer.writeClose();
}
private void writeDup(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
@@ -2725,15 +2733,26 @@
private void writeDupX1(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
throws IOException {
writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
+ removeStackVariableConstant(frame, TOP_OF_STACK);
writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 1);
writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 2);
}
+ private void removeStackVariableConstant(@Nonnull Frame<BasicValue> frame, int stackIdx) {
+ // Stack level will be erased by an assignment thus it is no longer a constant, it could become
+ // one again if the stack variable read is a constant
+ varWithCstValue.remove(getStackVariable(frame, stackIdx));
+ }
+
private void writeDupX2(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
throws IOException {
writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
+ removeStackVariableConstant(frame, TOP_OF_STACK);
writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 1);
writeAssign(frame, TOP_OF_STACK - 2, nextFrame, TOP_OF_STACK - 2);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 2);
writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 3);
}
@@ -2764,8 +2783,11 @@
private void writeDup2X1(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
throws IOException {
writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
+ removeStackVariableConstant(frame, TOP_OF_STACK);
writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 1);
writeAssign(frame, TOP_OF_STACK - 2, nextFrame, TOP_OF_STACK - 2);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 2);
writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 3);
writeAssign(nextFrame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 4);
}
@@ -2773,15 +2795,20 @@
private void writeDup2X2(@Nonnull Frame<BasicValue> frame, @Nonnull Frame<BasicValue> nextFrame)
throws IOException {
writeAssign(frame, TOP_OF_STACK, nextFrame, TOP_OF_STACK);
+ removeStackVariableConstant(frame, TOP_OF_STACK);
writeAssign(frame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 1);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 1);
writeAssign(frame, TOP_OF_STACK - 2, nextFrame, TOP_OF_STACK - 2);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 2);
writeAssign(frame, TOP_OF_STACK - 3, nextFrame, TOP_OF_STACK - 3);
+ removeStackVariableConstant(frame, TOP_OF_STACK - 3);
writeAssign(nextFrame, TOP_OF_STACK, nextFrame, TOP_OF_STACK - 4);
writeAssign(nextFrame, TOP_OF_STACK - 1, nextFrame, TOP_OF_STACK - 5);
}
/**
* writes frame2.stack[frame.stack.size() + offset2] = frame1.stack[frame.stack.size() + offset1]
+ * This method is used to simulate stack operations such swap, dup and so on.
*
* @throws IOException
*/
@@ -2790,19 +2817,27 @@
assert !isBooleanAssignIssue(
getStackVariable(frame2, offset2),
getStackVariable(frame1, offset1));
- writeDebugBegin(currentClass, currentLine);
- writer.writeCatchBlockIds(currentCatchList);
- writer.writeKeyword(Token.EXPRESSION_STATEMENT);
- writer.writeOpen();
- writeDebugBegin(currentClass, currentLine);
- writer.writeKeyword(Token.ASG_OPERATION);
- writer.writeOpen();
- writeStackAccess(frame2, offset2);
- writeStackAccess(frame1, offset1);
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
- writeDebugEnd(currentClass, currentLine);
- writer.writeClose();
+ Variable stackVariableRead = getStackVariable(frame1, offset1);
+ if (varWithCstValue.containsKey(stackVariableRead)) {
+ // The read variable is a constant, thus do not write the constant into the stack but
+ // associate this stack variable with the same constant.
+ varWithCstValue.put(getStackVariable(frame2, offset2),
+ varWithCstValue.get(stackVariableRead));
+ } else {
+ writeDebugBegin(currentClass, currentLine);
+ writer.writeCatchBlockIds(currentCatchList);
+ writer.writeKeyword(Token.EXPRESSION_STATEMENT);
+ writer.writeOpen();
+ writeDebugBegin(currentClass, currentLine);
+ writer.writeKeyword(Token.ASG_OPERATION);
+ writer.writeOpen();
+ writeStack(frame2, offset2);
+ readStack(frame1, offset1);
+ writeDebugEnd(currentClass, currentLine);
+ writer.writeClose();
+ writeDebugEnd(currentClass, currentLine);
+ writer.writeClose();
+ }
}
private void writeBinaryOperation(
@@ -2818,12 +2853,12 @@
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(Token.ASG_OPERATION);
writer.writeOpen();
- writeStackAccess(nextFrame, TOP_OF_STACK);
+ writeStack(nextFrame, TOP_OF_STACK);
writeDebugBegin(currentClass, currentLine);
writer.writeKeyword(op);
writer.writeOpen();
- writeStackAccess(frame, TOP_OF_STACK - 1);
- writeStackAccess(frame, TOP_OF_STACK);
+ readStack(frame, TOP_OF_STACK - 1);
+ readStack(frame, TOP_OF_STACK);
writeDebugEnd(currentClass, currentLine);
writer.writeClose();
writeDebugEnd(currentClass, currentLine);
@@ -2851,6 +2886,9 @@
}
}
for (int stackIdx = 0; stackIdx < frame.getStackSize(); stackIdx++) {
+ // Useless local variables can be created by Jill, indeed all stack variables are created
+ // but some of them will be never used, for instance constant will be put directly on
+ // their usage and will not used stack variable.
Variable v = getStackVariable(frame, -stackIdx - 1);
locals.add(v);
}
@@ -2872,48 +2910,72 @@
private Variable getTempVarFromTopOfStackMinus1(@Nonnull Frame<BasicValue> frame) {
Variable topOfStackBeforeInst = getStackVariable(frame, TOP_OF_STACK - 1);
String tmpVarId = "-swap_tmp_" + typeToUntypedDesc(topOfStackBeforeInst.getType());
- Variable tmpVariable = getVariable(tmpVarId, tmpVarId, topOfStackBeforeInst.getType(), null);
+ Variable tmpVariable = getVariable(tmpVarId, tmpVarId, topOfStackBeforeInst.getType());
return tmpVariable;
}
+ @CheckForNull
+ private String getParameterName(@Nonnegative int parameterIdx) {
+ if (currentMethod.parameters != null) {
+ return currentMethod.parameters.get(parameterIdx).name;
+ }
+ return null;
+ }
+
+ private int getParameterModifier(@Nonnegative int parameterIdx,
+ @CheckForNull LocalVariableNode lvn) {
+ if (currentMethod.parameters != null) {
+ return currentMethod.parameters.get(parameterIdx).access | NAME_PRESENT;
+ } else if (lvn == null) {
+ return ACC_SYNTHETIC;
+ }
+ return NO_MODIFIER;
+ }
+
private void writeParameters()
throws IOException {
writer.writeOpenNodeList();
- int parameterIdx = 0;
+ int parameterLocalIdx = 0;
int parameterAnnotationIdx = 0;
currentPc = 0;
if (!AsmHelper.isStatic(currentMethod)) {
Type parameterType = Type.getObjectType(currentClass.name);
- LocalVariableNode lvn = getLocalVariableNode(parameterIdx);
- String pid = getUnnamedParameterId(parameterIdx, parameterType);
- Variable p = getVariableWithLocalIndex(parameterIdx, pid, lvn != null ? lvn.name : pid,
- parameterType, lvn != null ? lvn.signature : null);
+ LocalVariableNode lvn = getLocalVariableNode(parameterLocalIdx);
+ String pid = getUnnamedParameterId(parameterLocalIdx, parameterType);
+ Variable p = getVariableWithLocalIndex(parameterLocalIdx, pid, lvn != null ? lvn.name : pid,
+ parameterType, lvn != null ? lvn.signature : null,
+ lvn == null ? ACC_SYNTHETIC : NO_MODIFIER);
p.setThis();
Type untypedParameter = typeToUntyped(parameterType);
- String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
- Variable local = getVariableWithLocalIndex(parameterIdx, lid, lid, untypedParameter, null);
+ String lid = getUnnamedLocalId(parameterLocalIdx, untypedParameter);
+ Variable local = getVariableWithLocalIndex(parameterLocalIdx, lid, lid, untypedParameter,
+ null, lvn == null ? ACC_SYNTHETIC : NO_MODIFIER);
parameter2Var.put(p, local);
- parameterIdx++;
+ parameterLocalIdx++;
}
+ int parameterIdx = 0;
for (Type paramType : Type.getArgumentTypes(currentMethod.desc)) {
- LocalVariableNode lvn = getLocalVariableNode(parameterIdx);
- String pid = getUnnamedParameterId(parameterIdx, paramType);
- Variable p = getVariableWithLocalIndex(parameterIdx, pid, lvn != null ? lvn.name : pid,
- paramType, lvn != null ? lvn.signature : null);
+ LocalVariableNode lvn = getLocalVariableNode(parameterLocalIdx);
+ String pid = getUnnamedParameterId(parameterLocalIdx, paramType);
+ Variable p = getVariableWithLocalIndex(parameterLocalIdx, pid,
+ getParameterName(parameterIdx), paramType, lvn != null ? lvn.signature : null,
+ getParameterModifier(parameterIdx, lvn));
p.setParameter();
- writeParameter(paramType, parameterIdx, p, parameterAnnotationIdx++);
+ writeParameter(paramType, parameterLocalIdx, p, parameterAnnotationIdx++);
Type untypedParameter = typeToUntyped(paramType);
- String lid = getUnnamedLocalId(parameterIdx, untypedParameter);
- Variable local = getVariableWithLocalIndex(parameterIdx, lid, lid, untypedParameter, null);
+ String lid = getUnnamedLocalId(parameterLocalIdx, untypedParameter);
+ Variable local = getVariableWithLocalIndex(parameterLocalIdx, lid, lid, untypedParameter,
+ null, lvn == null ? ACC_SYNTHETIC : NO_MODIFIER);
parameter2Var.put(p, local);
- parameterIdx += paramType.getSize();
+ parameterLocalIdx += paramType.getSize();
+ parameterIdx++;
}
writer.writeCloseNodeList();
@@ -2925,7 +2987,7 @@
writer.writeKeyword(Token.PARAMETER);
writer.writeOpen();
writer.writeId(param.getId());
- writer.writeInt(param.isSynthetic() ? Opcodes.ACC_SYNTHETIC : NO_MODIFIER);
+ writer.writeInt(param.getModifier());
writer.writeId(paramType.getDescriptor());
writer.writeString(param.getName());
annotWriter.writeAnnotations(currentMethod, parameterAnnotationIdx);
@@ -2991,7 +3053,7 @@
String id = getUnnamedLocalId(localIdx, bv.getType());
String localName = id;
Type localType = typeToUntyped(bv.getType());
- v = getVariableWithLocalIndex(localIdx, id, localName, localType, null);
+ v = getVariableWithLocalIndex(localIdx, id, localName, localType, null, NO_MODIFIER);
return v;
}
@@ -3017,17 +3079,16 @@
BasicValue bv = frame.getStack(stackHeight);
assert bv != BasicValue.UNINITIALIZED_VALUE;
String id = "-s_" + stackHeight + "_" + typeToUntypedDesc(bv.getType());
- Variable variable = getVariable(id, id, typeToUntyped(bv.getType()), null);
+ Variable variable = getVariable(id, id, typeToUntyped(bv.getType()));
return variable;
}
@Nonnull
- private Variable getVariable(@Nonnull String id, @Nonnull String name, @Nonnull Type type,
- @CheckForNull String signature) {
+ private Variable getVariable(@Nonnull String id, @Nonnull String name, @Nonnull Type type) {
Variable var = nameToVar.get(id);
if (var == null) {
- var = new Variable(id, name, type, signature);
+ var = new Variable(id, name, type);
nameToVar.put(id, var);
}
@@ -3036,13 +3097,11 @@
@Nonnull
private Variable getVariableWithLocalIndex(@Nonnegative int localIdx, @Nonnull String id,
- @Nonnull String name, @Nonnull Type type, @CheckForNull String signature) {
+ @CheckForNull String name, @Nonnull Type type, @CheckForNull String signature, int modifier) {
Variable var = nameToVar.get(id);
if (var == null) {
- // All variables which do no have LocalVariableNode are marked synthetic
- var =
- new Variable(id, name, type, signature, localIdx, getLocalVariableNode(localIdx) == null);
+ var = new Variable(id, name, type, signature, localIdx, modifier);
nameToVar.put(id, var);
}
diff --git a/jill/src/com/android/jill/frontend/java/Variable.java b/jill/src/com/android/jill/frontend/java/Variable.java
index 0725adc..1bad9a1 100644
--- a/jill/src/com/android/jill/frontend/java/Variable.java
+++ b/jill/src/com/android/jill/frontend/java/Variable.java
@@ -16,6 +16,7 @@
package com.android.jill.frontend.java;
+import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import javax.annotation.CheckForNull;
@@ -38,25 +39,24 @@
@CheckForNull
private final String signature;
- @Nonnull
+ @CheckForNull
private String name;
private boolean isThis;
private boolean isParameter;
- private final boolean isSynthetic;
+ private final int modifier;
/* Index of local variable, -1 means the variable does not represent a local variable. */
private final int localIdx;
- public Variable(@Nonnull String id, @Nonnull String name, @Nonnull Type type,
- @CheckForNull String signature) {
- this(id, name, type, signature, NO_LOCAL_IDX, true);
+ public Variable(@Nonnull String id, @CheckForNull String name, @Nonnull Type type) {
+ this(id, name, type, null, NO_LOCAL_IDX, Opcodes.ACC_SYNTHETIC);
}
- public Variable(@Nonnull String id, @Nonnull String name, @Nonnull Type type,
- @CheckForNull String signature, int localIdx, boolean isSynthetic) {
+ public Variable(@Nonnull String id, @CheckForNull String name, @Nonnull Type type,
+ @CheckForNull String signature, int localIdx, int modifier) {
this.id = id;
this.name = name;
this.type = type;
@@ -64,7 +64,7 @@
this.localIdx = localIdx;
isThis = false;
isParameter = false;
- this.isSynthetic = isSynthetic;
+ this.modifier = modifier;
}
public boolean hasLocalIndex() {
@@ -96,7 +96,7 @@
return signature;
}
- @Nonnull
+ @CheckForNull
public String getName() {
return name;
}
@@ -122,7 +122,7 @@
this.isParameter = true;
}
- public boolean isSynthetic() {
- return isSynthetic;
+ public int getModifier() {
+ return modifier;
}
}
diff --git a/project-settings/jackstyle.xml b/project-settings/jackstyle.xml
new file mode 100644
index 0000000..3f69799
--- /dev/null
+++ b/project-settings/jackstyle.xml
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC
+ "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
+ "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+
+<!-- This is a checkstyle configuration file. For descriptions of
+what the following rules do, please see the checkstyle configuration
+page at http://checkstyle.sourceforge.net/config.html -->
+
+<!-- Checks with numbered comments refer to recommendations made
+by Joshua Bloch in his book Effective Java -->
+
+<module name="Checker">
+ <property name="charset" value="UTF-8"/>
+ <module name="FileTabCharacter">
+ <!-- Checks that there are no tab characters in the file.
+ -->
+ </module>
+
+ <module name="RegexpSingleline">
+ <!-- Checks that FIXME is not used in comments. TODO is preferred.
+ -->
+ <property name="format" value="((//.*)|(\*.*))FIXME" />
+ <property name="message" value='TODO is preferred to FIXME. e.g. "TODO(johndoe): Refactor when v2 is released."' />
+ </module>
+
+ <module name="RegexpSingleline">
+ <!-- Checks that TODOs are properly formatted.
+
+ The (?<!TODO\(.{0,100}) makes the regex ignore any secondary TODO's on the line
+ so that things like //TODO(bob): remove this TODO on 1/1/2020 don't trigger a warning
+ because of the second TODO. (The {0,100} is because java doesn't recoginize arbitrary
+ length look backs, but we know each java line should be < 100 chars.)
+ -->
+ <property name="format" value="((//.*)|(\*.*))(?<!TODO\(.{0,100})(TODO[^(])|(TODO\([^)]*$)" />
+ <property name="message" value='All TODOs should be named. e.g. "TODO(johndoe): Refactor when v2 is released."' />
+ </module>
+
+
+ <!-- All Java AST specific tests live under TreeWalker module. -->
+ <module name="TreeWalker">
+
+ <!--
+
+ IMPORT CHECKS
+
+ -->
+
+ <module name="RedundantImport">
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="AvoidStarImport">
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="UnusedImports">
+ <!-- DPL is a notable violator of this rule. -->
+ <property name="severity" value="error"/>
+ <!-- Imports used only in Javadoc are tolerated. -->
+ <property name="processJavadoc" value="true"/>
+ <message
+ key="import.unused"
+ value="Unused import: {0}." />
+ </module>
+
+ <module name="ImportOrder">
+ <!-- Checks for out of order import statements. -->
+ <property name="severity" value="warning"/>
+ <property name="groups" value="com.google,*,java,javax"/>
+ <!-- This ensures that static imports go first. -->
+ <property name="option" value="top"/>
+ <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
+ </module>
+
+ <!--
+
+ JAVADOC CHECKS
+
+ -->
+
+ <module name="JavadocType">
+ <!-- Item 28 - Write doc comments for all exposed API elements. -->
+ <!-- Ensure all classes with visability greater than or equal to
+ protected have class level documentation. -->
+ <property name="scope" value="protected"/>
+ <property name="severity" value="error"/>
+ <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. -->
+ <property name="allowUnknownTags" value="true"/>
+ <property name="allowMissingParamTags" value="true"/>
+ <message key="javadoc.missing"
+ value="Missing a Javadoc comment."/>
+ </module>
+
+ <!--
+
+ NAMING CHECKS
+
+ -->
+
+ <!-- Item 38 - Adhere to generally accepted naming conventions -->
+
+ <module name="PackageName">
+ <!-- Validates identifiers for package names against the
+ supplied expression. -->
+ <!-- Here the default checkstyle rule restricts package name parts to
+ seven characters, this is not in line with common practice at Google.
+ -->
+ <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="TypeNameCheck">
+ <metadata name="altname" value="TypeName"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="StaticVariableNameCheck">
+ <!-- Validates static, non-final fields against the supplied
+ expression "^[a-z][a-zA-Z0-9]*?$". -->
+ <metadata name="altname" value="StaticVariableName"/>
+ <property name="applyToPublic" value="true"/>
+ <property name="applyToProtected" value="true"/>
+ <property name="applyToPackage" value="true"/>
+ <property name="applyToPrivate" value="true"/>
+ <property name="format" value="^[a-z][a-zA-Z0-9]*?$"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="MemberNameCheck">
+ <!-- Validates non-static members against the supplied expression. -->
+ <metadata name="altname" value="MemberName"/>
+ <property name="applyToPublic" value="true"/>
+ <property name="applyToProtected" value="true"/>
+ <property name="applyToPackage" value="true"/>
+ <property name="applyToPrivate" value="true"/>
+ <property name="format" value="^[a-z][a-zA-Z0-9]*?$"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="MethodNameCheck">
+ <!-- Validates identifiers for method names. -->
+ <metadata name="altname" value="MethodName"/>
+ <property name="format" value="^[a-z][a-zA-Z0-9]*([a-zA-Z0-9]+)*$"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="ParameterName">
+ <!-- Validates identifiers for method parameters against the
+ expression "^[a-z][a-zA-Z0-9]*$". -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="LocalFinalVariableName">
+ <!-- Validates identifiers for local final variables against the
+ expression "^[a-z][a-zA-Z0-9]*$". -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="LocalVariableName">
+ <!-- Validates identifiers for local variables against the
+ expression "^[a-z][a-zA-Z0-9]*$". -->
+ <property name="severity" value="warning"/>
+ </module>
+
+
+ <!--
+
+ LENGTH and CODING CHECKS
+
+ -->
+
+ <module name="LineLength">
+ <!-- Checks if a line is too long. -->
+ <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/>
+ <property name="severity" value="error"/>
+
+ <!--
+ The default ignore pattern exempts the following elements:
+ - import statements
+ - long URLs inside comments
+ -->
+
+ <property name="ignorePattern"
+ value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
+ default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)|(\s*@[\w\.\$]+::\w+(?:\([^\(]*\)|\(\)\(\))?[,;]?)|(\s+\* \{@(link|see) [^\s][^\}]*\}[\.,;]?)$"/>
+ </module>
+
+ <module name="LeftCurly">
+ <!-- Checks for placement of the left curly brace ('{'). -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="RightCurly">
+ <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
+ the same line. e.g., the following example is fine:
+ <pre>
+ if {
+ ...
+ } else
+ </pre>
+ -->
+ <!-- This next example is not fine:
+ <pre>
+ if {
+ ...
+ }
+ else
+ </pre>
+ -->
+ <property name="option" value="same"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <!-- Checks for braces around if and else blocks -->
+ <module name="NeedBraces">
+ <property name="severity" value="warning"/>
+ <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
+ </module>
+
+ <module name="UpperEll">
+ <!-- Checks that long constants are defined with an upper ell.-->
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="FallThrough">
+ <!-- Warn about falling through to the next case statement. Similar to
+ javac -Xlint:fallthrough, but the check is suppressed if there is a single-line comment
+ on the last non-blank line preceding the fallen-into case.
+ -->
+ <property name="reliefPattern"
+ value=".*"/>
+ <property name="severity" value="error"/>
+ </module>
+
+
+ <!--
+
+ MODIFIERS CHECKS
+
+ -->
+
+ <module name="ModifierOrder">
+ <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
+ 8.4.3. The prescribed order is:
+ public, protected, private, abstract, static, final, transient, volatile,
+ synchronized, native, strictfp
+ -->
+ </module>
+
+
+ <!--
+
+ WHITESPACE CHECKS
+
+ -->
+
+ <module name="WhitespaceAround">
+ <!-- Checks that various tokens are surrounded by whitespace.
+ This includes most binary operators and keywords followed
+ by regular or curly braces.
+ -->
+ <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
+ BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
+ EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
+ LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
+ LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
+ MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
+ SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="WhitespaceAfter">
+ <!-- Checks that commas, semicolons and typecasts are followed by
+ whitespace.
+ -->
+ <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
+ </module>
+
+ <module name="NoWhitespaceAfter">
+ <!-- Checks that there is no whitespace after various unary operators.
+ Linebreaks are allowed.
+ -->
+ <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
+ UNARY_PLUS"/>
+ <property name="allowLineBreaks" value="true"/>
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="NoWhitespaceBefore">
+ <!-- Checks that there is no whitespace before various unary operators.
+ Linebreaks are allowed.
+ -->
+ <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
+ <property name="allowLineBreaks" value="true"/>
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="ParenPad">
+ <!-- Checks that there is no whitespace before close parens or after
+ open parens.
+ -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <!--
+
+ MISC CHECKS
+
+ -->
+
+ </module>
+
+ <module name="SuppressionFilter">
+ <property name="file" value="jack/jackstyleSuppressions.xml"/>
+ </module>
+</module>
diff --git a/sched/.classpath b/sched/.classpath
index b7f9d32..28dfb36 100644
--- a/sched/.classpath
+++ b/sched/.classpath
@@ -3,7 +3,7 @@
<classpathentry excluding="com/android/sched/util/log/tracer/SpeedTracer.java" kind="src" path="src"/>
<classpathentry kind="src" path="tests"/>
<classpathentry kind="src" path="rsc"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="src" path=".apt_generated">
<attributes>
<attribute name="optional" value="true"/>
diff --git a/sched/.settings/org.eclipse.jdt.core.prefs b/sched/.settings/org.eclipse.jdt.core.prefs
index ffb197c..0a1d86d 100644
--- a/sched/.settings/org.eclipse.jdt.core.prefs
+++ b/sched/.settings/org.eclipse.jdt.core.prefs
@@ -7,9 +7,9 @@
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -98,7 +98,7 @@
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=enabled
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=1585
org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field.count_dependent=1585|-1|1585
diff --git a/sched/build.gradle b/sched/build.gradle
new file mode 100644
index 0000000..691558c
--- /dev/null
+++ b/sched/build.gradle
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+project(':sched') {
+
+ apply plugin: 'java'
+ apply plugin: "org.inferred.processors"
+ apply from: "$rootDir/gradle-script/checkstyle.gradle"
+ apply from: "$rootDir/gradle-script/findbugs.gradle"
+
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ resources {
+ srcDirs = ['rsc']
+ }
+ }
+
+ test {
+ java {
+ srcDirs = ['tests']
+ }
+ }
+ }
+
+ dependencies {
+ testCompile libs.junit
+ testCompileOnly libs.jsr305
+ compileOnly libs.java_allocation_intrumenter
+ compileOnly libs.jsr305
+ compile libs.guava
+ compile libs.freemarker
+ compile libs.maths
+ compile (libs.watchmaker) {
+ // Avoid duplication and use com.google.guava version instead.
+ exclude group: 'com.google.collections', module: 'google-collections'
+ exclude group: 'org.uncommons.maths', module: 'uncommons-maths'
+ }
+ processor project(':sched:sched-ap')
+ // testProcessor project(':sched:sched-ap')
+ }
+}
+
+javadoc {
+ failOnError false
+ destinationDir = file("${rootDir}/gradle-dist/doc/jack/jack-internal/sched")
+}
+
+project(':sched:schedtests') {
+
+ apply plugin: 'java'
+ apply plugin: "org.inferred.processors"
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = ['../tests']
+ }
+ }
+ }
+ dependencies {
+ compile project(':sched')
+ compile libs.junit
+ compileOnly libs.jsr305
+ compile libs.guava
+ processor project(':sched:sched-ap')
+ }
+}
+
+project(':sched:sched-ap') {
+ apply plugin: 'java'
+
+ sourceCompatibility = 1.6
+ targetCompatibility = 1.6
+
+ sourceSets {
+ main {
+ java {
+ srcDirs = ['../src']
+ include 'com/android/sched/build/*'
+ include 'com/android/sched/util/findbugs/*'
+ }
+ resources {
+ srcDir '../rsc-ap'
+ }
+ }
+ }
+
+ dependencies {
+ compileOnly libs.jsr305
+ }
+
+ jar {
+ manifest {
+ from '../etc/manifest.txt'
+ }
+ }
+
+ // Until something better is found
+ task deployToJack (type: Copy) {
+ from jar.archivePath
+ into "${rootDir}/jack/tools/"
+ }
+ task deployToSched (type: Copy) {
+ from jar.archivePath
+ into "${rootDir}/sched/tools/"
+ }
+
+ assemble.dependsOn deployToJack
+ assemble.dependsOn deployToSched
+
+}
diff --git a/sched/src/com/android/sched/build/SchedAnnotationProcessor.java b/sched/src/com/android/sched/build/SchedAnnotationProcessor.java
index dc4437a..64802a0 100644
--- a/sched/src/com/android/sched/build/SchedAnnotationProcessor.java
+++ b/sched/src/com/android/sched/build/SchedAnnotationProcessor.java
@@ -16,6 +16,8 @@
package com.android.sched.build;
+import com.android.sched.util.findbugs.SuppressFBWarnings;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -99,9 +101,10 @@
FILTER("com.android.sched.schedulable.ComponentFilter") {
@Override
@Nonnull
+ @SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE") // probably a FindBugs bug
public TypeMirror getTypeMirror() throws AbortException {
return env.getTypeUtils().getDeclaredType(getTypeElement(),
- env.getTypeUtils().getWildcardType(null, null));
+ env.getTypeUtils().getWildcardType(null, null));
}
},
PRODUCTION("com.android.sched.item.Production"),
@@ -143,8 +146,9 @@
assert env != null;
if (typeElement == null) {
- typeElement = env.getElementUtils().getTypeElement(fqName);
+ typeElement = env.getElementUtils().getTypeElement(getCanonicalName(fqName));
if (typeElement == null) {
+ assert env != null;
env.getMessager().printMessage(Kind.ERROR, "Can not get element type '" + fqName + "'");
throw new AbortException();
}
@@ -195,7 +199,7 @@
while (iter.hasNext()) {
String name = iter.next().getName();
- TypeElement te = env.getElementUtils().getTypeElement(name);
+ TypeElement te = env.getElementUtils().getTypeElement(getCanonicalName(name));
if (te == null) {
iter.remove();
}
@@ -209,6 +213,10 @@
}
}
+ private static String getCanonicalName(@Nonnull String name) {
+ return name.replace('$', '.');
+ }
+
@Override
public synchronized void init(ProcessingEnvironment env) {
this.env = env;
diff --git a/sched/src/com/android/sched/marker/LocalMarkerManager.java b/sched/src/com/android/sched/marker/LocalMarkerManager.java
index 6e1ac32..586e333 100644
--- a/sched/src/com/android/sched/marker/LocalMarkerManager.java
+++ b/sched/src/com/android/sched/marker/LocalMarkerManager.java
@@ -20,7 +20,7 @@
import java.util.Collection;
import java.util.Collections;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.HashMap;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -34,7 +34,7 @@
private static final Collection<Marker> EMPTY_MARKER = Collections.emptyList();
@CheckForNull
- private ConcurrentHashMap<Class<? extends Marker>, Marker> markers;
+ private HashMap<Class<? extends Marker>, Marker> markers;
@Nonnull
private final Object lock = new Object();
@@ -43,25 +43,29 @@
@Override
@CheckForNull
public <T extends Marker> T addMarker(@Nonnull T marker) {
- assert isValidMarker(marker) : "Marker '" + Items.getName(marker.getClass())
- + "' is not supported for class '" + this.getClass().getName() + "'";
+ synchronized (lock) {
+ assert isValidMarker(marker) : "Marker '" + Items.getName(marker.getClass())
+ + "' is not supported for class '" + this.getClass().getName() + "'";
- ensureMap();
- assert markers != null;
+ ensureMap();
+ assert markers != null;
- return (T) markers.put(marker.getClass(), marker);
+ return (T) markers.put(marker.getClass(), marker);
+ }
}
@Override
public void addAllMarkers(@Nonnull Collection<Marker> collection) {
- ensureMap();
+ synchronized (lock) {
+ ensureMap();
- for (Marker marker : collection) {
- assert isValidMarker(marker) : "Marker '" + Items.getName(marker.getClass())
- + "' is not supported for class '" + this.getClass().getName() + "'";
- assert markers != null;
+ for (Marker marker : collection) {
+ assert isValidMarker(marker) : "Marker '" + Items.getName(marker.getClass())
+ + "' is not supported for class '" + this.getClass().getName() + "'";
+ assert markers != null;
- markers.put(marker.getClass(), marker);
+ markers.put(marker.getClass(), marker);
+ }
}
}
@@ -72,14 +76,14 @@
if (markers == null) {
return EMPTY_MARKER;
}
- }
- for (Marker marker : markers.values()) {
- assert checkGetAccess(marker.getClass());
- }
+ for (Marker marker : markers.values()) {
+ assert checkGetAccess(marker.getClass());
+ }
- assert markers != null;
- return markers.values();
+ assert markers != null;
+ return markers.values();
+ }
}
@Override
@@ -90,44 +94,43 @@
if (markers == null) {
return null;
}
- }
- return (T) markers.get(cls);
+ return (T) markers.get(cls);
+ }
}
@Override
public <T extends Marker> boolean containsMarker(@Nonnull Class<T> cls) {
- assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
- + this.getClass().getName() + "'";
-
synchronized (lock) {
+ assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
+ + this.getClass().getName() + "'";
+
if (markers == null) {
return false;
}
- }
- return markers.containsKey(cls);
+ return markers.containsKey(cls);
+ }
}
@Override
@Nonnull
public <T extends Marker> T getMarkerOrDefault(@Nonnull T defaultMarker) {
- assert isValidMarker(defaultMarker) : "Marker '"
- + Items.getName(defaultMarker.getClass()) + "' is not supported for class '"
- + this.getClass().getName() + "'";
-
synchronized (lock) {
+ assert isValidMarker(defaultMarker) : "Marker '" + Items.getName(defaultMarker.getClass())
+ + "' is not supported for class '" + this.getClass().getName() + "'";
+
if (markers == null) {
return defaultMarker;
}
- }
- @SuppressWarnings("unchecked")
- T marker = (T) markers.get(defaultMarker.getClass());
- if (marker == null) {
- return defaultMarker;
- } else {
- return marker;
+ @SuppressWarnings("unchecked")
+ T marker = (T) markers.get(defaultMarker.getClass());
+ if (marker == null) {
+ return defaultMarker;
+ } else {
+ return marker;
+ }
}
}
@@ -135,13 +138,20 @@
@Override
@CheckForNull
public <T extends Marker> T addMarkerIfAbsent(@Nonnull T newMarker) {
- assert isValidMarker(newMarker) : "Marker '" + Items.getName(newMarker.getClass())
- + "' is not supported for class '" + this.getClass().getName() + "'";
+ synchronized (lock) {
+ assert isValidMarker(newMarker) : "Marker '" + Items.getName(newMarker.getClass())
+ + "' is not supported for class '" + this.getClass().getName() + "'";
- ensureMap();
- assert markers != null;
+ ensureMap();
+ assert markers != null;
- return (T) markers.putIfAbsent(newMarker.getClass(), newMarker);
+ T existingMarker = (T) markers.get(newMarker.getClass());
+ if (existingMarker != null) {
+ return existingMarker;
+ }
+
+ return (T) markers.put(newMarker.getClass(), newMarker);
+ }
}
@Override
@@ -152,16 +162,20 @@
if (markers == null) {
return null;
}
- }
- return (T) markers.remove(cls);
+ T result = (T) markers.remove(cls);
+
+ if (markers.isEmpty()) {
+ markers = null;
+ }
+
+ return result;
+ }
}
private void ensureMap() {
- synchronized (lock) {
- if (markers == null) {
- markers = new ConcurrentHashMap<Class<? extends Marker>, Marker>();
- }
+ if (markers == null) {
+ markers = new HashMap<Class<? extends Marker>, Marker>();
}
}
}
diff --git a/sched/src/com/android/sched/util/VFSClassLoader.java b/sched/src/com/android/sched/util/VFSClassLoader.java
index adcbcf7..83d4c34 100644
--- a/sched/src/com/android/sched/util/VFSClassLoader.java
+++ b/sched/src/com/android/sched/util/VFSClassLoader.java
@@ -70,7 +70,7 @@
VPath path = new VPath(name, '/');
InputVFile vFile;
try {
- vFile = vfs.getRootInputVDir().getInputVFile(path);
+ vFile = vfs.getRootDir().getInputVFile(path);
return vFile.getInputStream();
} catch (WrongPermissionException e) {
logger.log(Level.INFO, "Failed to open resource '" + name + "' from "
@@ -88,7 +88,7 @@
path.addSuffix(".class");
InputVFile vFile;
try {
- vFile = vfs.getRootInputVDir().getInputVFile(path);
+ vFile = vfs.getRootDir().getInputVFile(path);
} catch (NotFileOrDirectoryException | NoSuchFileException e) {
throw new ClassNotFoundException(name, e);
}
@@ -124,7 +124,7 @@
VPath path = new VPath(name, '/');
final InputVFile vFile;
try {
- vFile = vfs.getRootInputVDir().getInputVFile(path);
+ vFile = vfs.getRootDir().getInputVFile(path);
try {
return new URL("jack-vfs", "", -1,
vfs.getPath().replace(File.separatorChar, '/') + "/"
diff --git a/sched/src/com/android/sched/util/file/AbstractStreamFile.java b/sched/src/com/android/sched/util/file/AbstractStreamFile.java
index 580e6c9..93f9096 100644
--- a/sched/src/com/android/sched/util/file/AbstractStreamFile.java
+++ b/sched/src/com/android/sched/util/file/AbstractStreamFile.java
@@ -33,7 +33,7 @@
/**
* Abstract class representing a stream from a file path or a standard input/output.
*/
-public abstract class AbstractStreamFile extends FileOrDirectory {
+public abstract class AbstractStreamFile extends FileOrDirectory implements Statusful {
@Nonnull
private static final Logger logger = LoggerFactory.getLogger();
@CheckForNull
@@ -141,6 +141,7 @@
}
@Nonnull
+ @Override
public final synchronized StreamFileStatus getStatus() {
if (!wasUsed) {
return StreamFileStatus.NOT_USED;
diff --git a/sched/src/com/android/sched/util/file/FileUtils.java b/sched/src/com/android/sched/util/file/FileUtils.java
index aeeacbc..a6345eb 100644
--- a/sched/src/com/android/sched/util/file/FileUtils.java
+++ b/sched/src/com/android/sched/util/file/FileUtils.java
@@ -37,40 +37,6 @@
}
- /**
- * Returns the file separator.
- */
- @Nonnull
- public static String getFileSeparator() {
- String fileSeparator = System.getProperty("file.separator", "/");
- return fileSeparator;
- }
-
- /**
- * Returns the working directory as a {@code File}.
- */
- @Nonnull
- public static File getWorkingDirectory() {
- String workingDirectoryPath = System.getProperty("user.dir");
- return new File(workingDirectoryPath);
- }
-
- /**
- * Creates the given {@code directory} if it does not exist.
- *
- * @param directory the non-null directory to create if it does not exist.
- * @throws NullPointerException if {@code directory} is null.
- * @throws IOException if the {@code directory} cannot be created.
- */
- public static void createIfNotExists(@Nonnull File directory) throws IOException {
- if (!directory.exists()) {
- if (!directory.mkdirs()) {
- throw new IOException("Could not create directory \"" +
- directory.getPath() + "\"");
- }
- }
- }
-
public static void deleteDir(@Nonnull File dir) throws IOException {
if (!dir.isDirectory()) {
throw new AssertionError();
diff --git a/sched/src/com/android/sched/util/file/OutputZipFile.java b/sched/src/com/android/sched/util/file/OutputZipFile.java
index 0707e66..489c8d3 100644
--- a/sched/src/com/android/sched/util/file/OutputZipFile.java
+++ b/sched/src/com/android/sched/util/file/OutputZipFile.java
@@ -28,8 +28,6 @@
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.Deflater;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
import java.util.zip.ZipOutputStream;
import javax.annotation.CheckForNull;
@@ -121,13 +119,12 @@
}
/**
- * A {@link ZipOutputStream} that is not directly closed to avoid getting a {@link ZipException}
- * when the zip has no entry (with a JRE 6) and implements {@link QueryableStream}.
+ * A {@link ZipOutputStream} that is created with a {@link Compression} and implements
+ * {@link QueryableStream}.
*/
private static class CustomZipOutputStream extends ZipOutputStream implements QueryableStream {
- private boolean hasEntries = false;
- private boolean isClosed = false;
+ private boolean closed = false;
public CustomZipOutputStream(@Nonnull OutputStream out, @Nonnull Compression compression) {
super(out);
@@ -145,24 +142,14 @@
}
@Override
- public void putNextEntry(@Nonnull ZipEntry e) throws IOException {
- hasEntries = true;
- super.putNextEntry(e);
- }
-
- @Override
public synchronized void close() throws IOException {
- if (hasEntries) {
- super.close();
- } else {
- out.close();
- }
- isClosed = true;
+ super.close();
+ closed = true;
}
@Override
public synchronized boolean isClosed() {
- return isClosed;
+ return closed;
}
}
-}
\ No newline at end of file
+}
diff --git a/sched/tests/com/android/sched/util/file/AllTests.java b/sched/src/com/android/sched/util/file/Statusful.java
similarity index 70%
copy from sched/tests/com/android/sched/util/file/AllTests.java
copy to sched/src/com/android/sched/util/file/Statusful.java
index 1f2ce79..d782913 100644
--- a/sched/tests/com/android/sched/util/file/AllTests.java
+++ b/sched/src/com/android/sched/util/file/Statusful.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,11 +16,13 @@
package com.android.sched.util.file;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-import org.junit.runners.Suite.SuiteClasses;
+import javax.annotation.Nonnull;
-@RunWith(Suite.class)
-@SuiteClasses(value = {FileUtilsTest.class})
-public class AllTests {
-}
\ No newline at end of file
+/**
+ * An object that can return a {@link StreamFileStatus}.
+ */
+public interface Statusful {
+
+ @Nonnull
+ StreamFileStatus getStatus();
+}
diff --git a/sched/src/com/android/sched/util/location/FileLocation.java b/sched/src/com/android/sched/util/location/FileLocation.java
index 058f3f1..07c9c42 100644
--- a/sched/src/com/android/sched/util/location/FileLocation.java
+++ b/sched/src/com/android/sched/util/location/FileLocation.java
@@ -47,4 +47,9 @@
public String getDescription() {
return "file '" + getPath() + "'";
}
+
+ @Override
+ public String toString() {
+ return "_" + getDescription() + "_";
+ }
}
diff --git a/sched/src/com/android/sched/vfs/AbstractInputOutputVFS.java b/sched/src/com/android/sched/vfs/AbstractInputOutputVFS.java
index 94770d2..9c41730 100644
--- a/sched/src/com/android/sched/vfs/AbstractInputOutputVFS.java
+++ b/sched/src/com/android/sched/vfs/AbstractInputOutputVFS.java
@@ -32,23 +32,7 @@
@Override
@Nonnull
- public InputOutputVDir getRootInputOutputVDir() {
- assert root != null;
-
- return root;
- }
-
- @Override
- @Nonnull
- public InputVDir getRootInputVDir() {
- assert root != null;
-
- return root;
- }
-
- @Override
- @Nonnull
- public OutputVDir getRootOutputVDir() {
+ public InputOutputVDir getRootDir() {
assert root != null;
return root;
diff --git a/sched/src/com/android/sched/vfs/AbstractInputVFS.java b/sched/src/com/android/sched/vfs/AbstractInputVFS.java
index c484a5e..e8979ea 100644
--- a/sched/src/com/android/sched/vfs/AbstractInputVFS.java
+++ b/sched/src/com/android/sched/vfs/AbstractInputVFS.java
@@ -32,7 +32,7 @@
@Override
@Nonnull
- public InputVDir getRootInputVDir() {
+ public InputVDir getRootDir() {
assert root != null;
return root;
diff --git a/sched/src/com/android/sched/vfs/AbstractOutputVFS.java b/sched/src/com/android/sched/vfs/AbstractOutputVFS.java
index 8174282..6fc672a 100644
--- a/sched/src/com/android/sched/vfs/AbstractOutputVFS.java
+++ b/sched/src/com/android/sched/vfs/AbstractOutputVFS.java
@@ -32,7 +32,7 @@
@Override
@Nonnull
- public OutputVDir getRootOutputVDir() {
+ public OutputVDir getRootDir() {
assert root != null;
return root;
diff --git a/sched/src/com/android/sched/vfs/BadVFSFormatException.java b/sched/src/com/android/sched/vfs/BadVFSFormatException.java
index 0b9e650..bf3192c 100644
--- a/sched/src/com/android/sched/vfs/BadVFSFormatException.java
+++ b/sched/src/com/android/sched/vfs/BadVFSFormatException.java
@@ -22,7 +22,8 @@
import javax.annotation.Nonnull;
/**
- * Exception when a {@link VFS} has a bad format, i.e. it does not match the expected format.
+ * {@link Exception} when a {@link VFS} has a bad format, i.e. it does not match the expected
+ * format.
*/
public class BadVFSFormatException extends SchedIOException {
private static final long serialVersionUID = 1L;
diff --git a/sched/src/com/android/sched/vfs/CachedDirectFS.java b/sched/src/com/android/sched/vfs/CachedDirectFS.java
index 6ec09b6..8a27c35 100644
--- a/sched/src/com/android/sched/vfs/CachedDirectFS.java
+++ b/sched/src/com/android/sched/vfs/CachedDirectFS.java
@@ -26,6 +26,8 @@
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileException;
+import com.android.sched.util.file.Statusful;
+import com.android.sched.util.file.StreamFileStatus;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.DirectoryLocation;
import com.android.sched.util.location.FileLocation;
@@ -63,7 +65,8 @@
* A {@link VFS} implementation backed by a real file system, but where directories are cached in
* memory.
*/
-public class CachedDirectFS extends BaseVFS<CachedParentVDir, CachedParentVFile> implements VFS {
+public class CachedDirectFS extends BaseVFS<CachedParentVDir, CachedParentVFile>
+ implements VFS, Statusful {
static class CachedParentVDir extends InMemoryVDir {
@@ -160,6 +163,8 @@
@CheckForNull
private String infoString;
+ private boolean used = false;
+
public CachedDirectFS(@Nonnull Directory dir, int permissions) {
this.dir = dir;
@@ -253,6 +258,9 @@
@Override
public CachedParentVDir getRootDir() {
+
+ used = true;
+
return root;
}
@@ -566,6 +574,18 @@
}
@Override
+ @Nonnull
+ public StreamFileStatus getStatus() {
+ if (!used) {
+ return StreamFileStatus.NOT_USED;
+ } else if (closed) {
+ return StreamFileStatus.CLOSED;
+ } else {
+ return StreamFileStatus.OPEN;
+ }
+ }
+
+ @Override
@CheckForNull
public String getInfoString() {
return infoString;
diff --git a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
index 98aa6d4..01ff002 100644
--- a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
+++ b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
@@ -16,6 +16,8 @@
package com.android.sched.vfs;
+import com.google.common.base.Splitter;
+
import com.android.sched.util.config.HasKeyId;
import com.android.sched.util.config.MessageDigestFactory;
import com.android.sched.util.config.ThreadConfig;
@@ -30,6 +32,8 @@
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileException;
+import com.android.sched.util.file.Statusful;
+import com.android.sched.util.file.StreamFileStatus;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.ColumnAndLineLocation;
import com.android.sched.util.location.Location;
@@ -47,6 +51,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
+import java.util.Iterator;
import java.util.Set;
import javax.annotation.CheckForNull;
@@ -61,7 +66,7 @@
*/
@HasKeyId
public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensitiveVFile> implements
- VFS {
+ VFS, Statusful {
static final String INDEX_NAME = "index";
static final String DEBUG_NAME = "index.dbg";
@@ -85,6 +90,12 @@
"sched.vfs.case-insensitive.debug",
"generate an index file '" + DEBUG_NAME + "' for debugging purpose").addDefaultValue(false);
+ @Nonnull
+ private static final char INDEX_SEPARATOR = '/';
+
+ @Nonnull
+ private static final Splitter splitter = Splitter.on(INDEX_SEPARATOR);
+
@Nonnegative
private final int numGroups;
@Nonnegative
@@ -174,14 +185,12 @@
super(vfs, parent, name);
}
- void setEncodedFile(@Nonnull BaseVFile encodedFile) {
+ private void setEncodedFile(@Nonnull BaseVFile encodedFile) {
this.encodedFile = encodedFile;
}
- @Nonnull
- BaseVFile getEncodedFile() {
- assert encodedFile != null;
-
+ @CheckForNull
+ private BaseVFile getEncodedFile() {
return encodedFile;
}
@@ -190,7 +199,7 @@
vfs.delete(this);
}
- public void deleteFromCache() {
+ private void deleteFromCache() {
((InMemoryVDir) parent).internalDelete(name);
}
}
@@ -198,6 +207,8 @@
@Nonnull
private final BaseVFS<BaseVDir, BaseVFile> vfs;
+ private boolean used = false;
+
public CaseInsensitiveFS(@Nonnull VFS vfs) throws BadVFSFormatException {
this(vfs, ThreadConfig.get(NB_GROUP).intValue(), ThreadConfig.get(SZ_GROUP).intValue(),
ThreadConfig.get(ALGO), ThreadConfig.get(DEBUG).booleanValue());
@@ -257,10 +268,10 @@
char type = line.charAt(0);
switch (type) {
case 'd':
- root.createVDir(new VPath(line.substring(2), '/'));
+ loadVDir(line.substring(2));
break;
case 'f':
- root.createVFile(new VPath(line.substring(2), '/'));
+ loadVFile(line.substring(2));
break;
default:
throw new BadVFSFormatException(this, vfs.getLocation(),
@@ -268,7 +279,7 @@
reader.getLineNumber())));
}
}
- } catch (CannotCreateFileException e) {
+ } catch (NotDirectoryException | NotFileException e) {
throw new BadVFSFormatException(this, vfs.getLocation(), e);
} catch (IOException e) {
throw new BadVFSFormatException(this, vfs.getLocation(), e);
@@ -286,6 +297,33 @@
}
}
+ private void loadVDir(@Nonnull String path) throws NotDirectoryException {
+ CaseInsensitiveVDir currentDir = getRootDir();
+ Iterator<String> pathElementIterator = splitter.split(path).iterator();
+ String pathElement = null;
+ while (pathElementIterator.hasNext()) {
+ pathElement = pathElementIterator.next();
+ assert !pathElement.isEmpty();
+ currentDir = loadVDir(currentDir, pathElement);
+ }
+ }
+
+ private void loadVFile(@Nonnull String path)
+ throws NotDirectoryException, NotFileException {
+ CaseInsensitiveVDir currentDir = getRootDir();
+ Iterator<String> pathElementIterator = splitter.split(path).iterator();
+ String pathElement = null;
+ while (pathElementIterator.hasNext()) {
+ pathElement = pathElementIterator.next();
+ assert !pathElement.isEmpty();
+ if (pathElementIterator.hasNext()) {
+ // simpleName is a dir name
+ currentDir = loadVDir(currentDir, pathElement);
+ }
+ }
+ loadVFile(currentDir, pathElement);
+ }
+
@Override
@Nonnull
public Set<Capabilities> getCapabilities() {
@@ -307,6 +345,8 @@
@Override
@Nonnull
public CaseInsensitiveVDir getRootDir() {
+ used = true;
+
return root;
}
@@ -347,13 +387,13 @@
CaseInsensitiveVFile file = (CaseInsensitiveVFile) element;
printer.print("f:");
- printer.print(file.getPath().getPathAsString('/'));
+ printer.print(file.getPath().getPathAsString(INDEX_SEPARATOR));
printer.println();
}
}
} else {
printer.print("d:");
- printer.print(dir.getPath().getPathAsString('/'));
+ printer.print(dir.getPath().getPathAsString(INDEX_SEPARATOR));
printer.println();
}
}
@@ -372,7 +412,7 @@
CaseInsensitiveVFile file = (CaseInsensitiveVFile) element;
printer.print("f:");
- printer.print(file.getEncodedFile().getPath().getPathAsString(File.separatorChar));
+ printer.print(loadAndGetEncodedFile(file).getPath().getPathAsString(File.separatorChar));
printer.print(":");
printer.print(file.getPath().getPathAsString(File.separatorChar));
printer.println();
@@ -384,12 +424,27 @@
// Stream
//
+ @Nonnull
+ private BaseVFile loadAndGetEncodedFile(@Nonnull CaseInsensitiveVFile file) {
+
+ BaseVFile encodedFile = file.getEncodedFile();
+ if (encodedFile == null) {
+ try {
+ encodedFile = vfs.getRootDir().getVFile(encode(file.getPath()));
+ file.setEncodedFile(encodedFile);
+ } catch (NotDirectoryException | NotFileException | NoSuchFileException e) {
+ throw new RuntimeBadVFSFormatException(vfs, vfs.getLocation(), e);
+ }
+ }
+ return encodedFile;
+ }
+
@Override
@Nonnull
InputStream openRead(@Nonnull CaseInsensitiveVFile file) throws WrongPermissionException {
assert !isClosed();
- return file.getEncodedFile().getInputStream();
+ return loadAndGetEncodedFile(file).getInputStream();
}
@Override
@@ -404,7 +459,7 @@
throws WrongPermissionException {
assert !isClosed();
- return file.getEncodedFile().getOutputStream(append);
+ return loadAndGetEncodedFile(file).getOutputStream(append);
}
//
@@ -415,13 +470,9 @@
@Nonnull
CaseInsensitiveVDir getVDir(@Nonnull CaseInsensitiveVDir parent, @Nonnull String name)
throws NotDirectoryException, NoSuchFileException {
- BaseVElement element = parent.getFromCache(name);
- if (element != null) {
- if (element.isVDir()) {
- return (CaseInsensitiveVDir) element;
- } else {
- throw new NotDirectoryException(getVDirLocation(parent, name));
- }
+ CaseInsensitiveVDir vDir = getVDirFromCache(parent, name);
+ if (vDir != null) {
+ return vDir;
} else {
throw new NoSuchFileException(getVDirLocation(parent, name));
}
@@ -431,31 +482,48 @@
@Nonnull
CaseInsensitiveVFile getVFile(@Nonnull CaseInsensitiveVDir parent, @Nonnull String name)
throws NotFileException, NoSuchFileException {
- BaseVElement element = parent.getFromCache(name);
- if (element != null) {
- if (!element.isVDir()) {
- return (CaseInsensitiveVFile) element;
- } else {
- throw new NotFileException(getVFileLocation(parent, name));
- }
+ CaseInsensitiveVFile vFile = getVFileFromCache(parent, name);
+ if (vFile != null) {
+ return vFile;
} else {
throw new NoSuchFileException(getVFileLocation(parent, name));
}
}
+ @CheckForNull
+ CaseInsensitiveVFile getVFileFromCache(@Nonnull CaseInsensitiveVDir parent, @Nonnull String name)
+ throws NotFileException {
+ BaseVElement element = parent.getFromCache(name);
+ if (element == null) {
+ return null;
+ } else if (!element.isVDir()) {
+ return (CaseInsensitiveVFile) element;
+ } else {
+ throw new NotFileException(getVFileLocation(parent, name));
+ }
+ }
+
+ @CheckForNull
+ CaseInsensitiveVDir getVDirFromCache(@Nonnull CaseInsensitiveVDir parent, @Nonnull String name)
+ throws NotDirectoryException {
+ BaseVElement element = parent.getFromCache(name);
+ if (element == null) {
+ return null;
+ } else if (element.isVDir()) {
+ return (CaseInsensitiveVDir) element;
+ } else {
+ throw new NotDirectoryException(getVDirLocation(parent, name));
+ }
+ }
+
@Override
@Nonnull
- synchronized CaseInsensitiveVDir createVDir(@Nonnull CaseInsensitiveVDir parent,
+ CaseInsensitiveVDir createVDir(@Nonnull CaseInsensitiveVDir parent,
@Nonnull String name) throws CannotCreateFileException {
assert !isClosed();
try {
- return getVDir(parent, name);
-
- } catch (NoSuchFileException e) {
- CaseInsensitiveVDir dir = new CaseInsensitiveVDir(this, parent, name);
- parent.putInCache(name, dir);
- return dir;
+ return loadVDir(parent, name);
} catch (NotDirectoryException e) {
throw new CannotCreateFileException(getVDirLocation(parent, name));
}
@@ -463,23 +531,53 @@
@Override
@Nonnull
- synchronized CaseInsensitiveVFile createVFile(@Nonnull CaseInsensitiveVDir parent,
- @Nonnull String name) throws CannotCreateFileException {
+ synchronized CaseInsensitiveVFile createVFile(
+ @Nonnull CaseInsensitiveVDir parent, @Nonnull String name) throws CannotCreateFileException {
+ assert !isClosed();
+ try {
+ CaseInsensitiveVFile vFile = getVFileFromCache(parent, name);
+ if (vFile != null) {
+ return vFile;
+ } else {
+ CaseInsensitiveVFile original = new CaseInsensitiveVFile(this, parent, name);
+ BaseVFile encoded = vfs.getRootDir().createVFile(encode(original.getPath()));
+ original.setEncodedFile(encoded);
+ parent.putInCache(name, original);
+
+ return original;
+ }
+ } catch (NotFileException e) {
+ throw new CannotCreateFileException(getVFileLocation(parent, name));
+ }
+ }
+
+ @Nonnull
+ synchronized CaseInsensitiveVDir loadVDir(
+ @Nonnull CaseInsensitiveVDir parent, @Nonnull String name) throws NotDirectoryException {
assert !isClosed();
- try {
- return getVFile(parent, name);
+ CaseInsensitiveVDir vDir = getVDirFromCache(parent, name);
+ if (vDir != null) {
+ return vDir;
+ } else {
+ CaseInsensitiveVDir dir = new CaseInsensitiveVDir(this, parent, name);
+ parent.putInCache(name, dir);
+ return dir;
+ }
+ }
- } catch (NoSuchFileException e) {
-
+ @Nonnull
+ synchronized CaseInsensitiveVFile loadVFile(
+ @Nonnull CaseInsensitiveVDir parent, @Nonnull String name) throws NotFileException {
+ assert !isClosed();
+ CaseInsensitiveVFile vFile = getVFileFromCache(parent, name);
+ if (vFile != null) {
+ return vFile;
+ } else {
CaseInsensitiveVFile original = new CaseInsensitiveVFile(this, parent, name);
- BaseVFile encoded = vfs.getRootDir().createVFile(encode(original.getPath()));
- original.setEncodedFile(encoded);
parent.putInCache(name, original);
return original;
- } catch (NotFileException e) {
- throw new CannotCreateFileException(getVFileLocation(parent, name));
}
}
@@ -509,14 +607,14 @@
@Override
boolean isEmpty(@Nonnull CaseInsensitiveVDir dir) {
- return list(dir).isEmpty();
+ return dir.isEmpty();
}
@Override
@Nonnull
public FileTime getLastModified(@Nonnull CaseInsensitiveVFile file)
throws CannotGetModificationTimeException {
- return vfs.getLastModified(file.getEncodedFile());
+ return vfs.getLastModified(loadAndGetEncodedFile(file));
}
//
@@ -526,7 +624,7 @@
@Override
@Nonnull
Location getVFileLocation(@Nonnull CaseInsensitiveVFile file) {
- return vfs.getVFileLocation(file.getEncodedFile());
+ return vfs.getVFileLocation(loadAndGetEncodedFile(file));
}
@Override
@@ -642,6 +740,18 @@
}
@Override
+ @Nonnull
+ public StreamFileStatus getStatus() {
+ if (!used) {
+ return StreamFileStatus.NOT_USED;
+ } else if (closed) {
+ return StreamFileStatus.CLOSED;
+ } else {
+ return StreamFileStatus.OPEN;
+ }
+ }
+
+ @Override
@CheckForNull
public String getInfoString() {
return vfs.getInfoString();
diff --git a/sched/src/com/android/sched/vfs/DeflateFS.java b/sched/src/com/android/sched/vfs/DeflateFS.java
index 90edda1..a6a5825 100644
--- a/sched/src/com/android/sched/vfs/DeflateFS.java
+++ b/sched/src/com/android/sched/vfs/DeflateFS.java
@@ -37,9 +37,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Set;
-import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
-import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import javax.annotation.CheckForNull;
@@ -160,7 +158,7 @@
@Override
@Nonnull
InputStream openRead(@Nonnull DeflateVFile file) throws WrongPermissionException {
- return new InflaterInputStream(vfs.openRead(file.getWrappedFile()), new Inflater());
+ return new InflaterInputStream(vfs.openRead(file.getWrappedFile()));
}
@Override
@@ -173,7 +171,7 @@
@Nonnull
OutputStream openWrite(@Nonnull DeflateVFile file, boolean append)
throws WrongPermissionException {
- return new DeflaterOutputStream(vfs.openWrite(file.getWrappedFile(), append), new Deflater());
+ return new DeflaterOutputStream(vfs.openWrite(file.getWrappedFile(), append));
}
@Override
diff --git a/sched/src/com/android/sched/vfs/DirectFS.java b/sched/src/com/android/sched/vfs/DirectFS.java
index 41fa6f9..7abfff9 100644
--- a/sched/src/com/android/sched/vfs/DirectFS.java
+++ b/sched/src/com/android/sched/vfs/DirectFS.java
@@ -29,6 +29,8 @@
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileException;
+import com.android.sched.util.file.Statusful;
+import com.android.sched.util.file.StreamFileStatus;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.DirectoryLocation;
import com.android.sched.util.location.FileLocation;
@@ -55,7 +57,7 @@
/**
* A {@link VFS} implementation backed by a real file system.
*/
-public class DirectFS extends BaseVFS<ParentVDir, ParentVFile> implements VFS {
+public class DirectFS extends BaseVFS<ParentVDir, ParentVFile> implements VFS, Statusful {
@Nonnull
private final Directory dir;
@@ -66,6 +68,8 @@
@CheckForNull
private String infoString;
+ private boolean used = false;
+
public DirectFS(@Nonnull Directory dir, int permissions) {
this.dir = dir;
this.root = new ParentVDir(this, "");
@@ -113,6 +117,9 @@
@Override
public ParentVDir getRootDir() {
+
+ used = true;
+
return root;
}
@@ -378,6 +385,18 @@
return getPathFromDir(root, file);
}
+ @Override
+ @Nonnull
+ public StreamFileStatus getStatus() {
+ if (!used) {
+ return StreamFileStatus.NOT_USED;
+ } else if (closed) {
+ return StreamFileStatus.CLOSED;
+ } else {
+ return StreamFileStatus.OPEN;
+ }
+ }
+
public void setInfoString(@CheckForNull String infoString) {
this.infoString = infoString;
}
diff --git a/sched/src/com/android/sched/vfs/GenericInputOutputVFS.java b/sched/src/com/android/sched/vfs/GenericInputOutputVFS.java
index 6605a1b..ad996fa 100644
--- a/sched/src/com/android/sched/vfs/GenericInputOutputVFS.java
+++ b/sched/src/com/android/sched/vfs/GenericInputOutputVFS.java
@@ -35,7 +35,7 @@
@Override
@Nonnull
- public InputOutputVDir getRootInputOutputVDir() {
+ public InputOutputVDir getRootDir() {
return new GenericInputOutputVDir(vfs.getRootDir());
}
@@ -57,18 +57,6 @@
}
@Override
- @Nonnull
- public InputVDir getRootInputVDir() {
- return new GenericInputVDir(vfs.getRootDir());
- }
-
- @Override
- @Nonnull
- public OutputVDir getRootOutputVDir() {
- return new GenericOutputVDir(vfs.getRootDir());
- }
-
- @Override
public boolean needsSequentialWriting() {
return vfs.needsSequentialWriting();
}
diff --git a/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java b/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java
index 97125ab..391bffa 100644
--- a/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java
+++ b/sched/src/com/android/sched/vfs/GenericInputOutputVFile.java
@@ -89,6 +89,7 @@
file.delete();
}
+ @Override
@CheckForNull
public String getDigest() {
return file.getDigest();
diff --git a/sched/src/com/android/sched/vfs/GenericInputVFS.java b/sched/src/com/android/sched/vfs/GenericInputVFS.java
index 65e8e59..72d09ee 100644
--- a/sched/src/com/android/sched/vfs/GenericInputVFS.java
+++ b/sched/src/com/android/sched/vfs/GenericInputVFS.java
@@ -35,7 +35,7 @@
@Override
@Nonnull
- public InputVDir getRootInputVDir() {
+ public InputVDir getRootDir() {
return new GenericInputVDir(vfs.getRootDir());
}
diff --git a/sched/src/com/android/sched/vfs/GenericInputVFile.java b/sched/src/com/android/sched/vfs/GenericInputVFile.java
index 6a21c8b..d5ed89e 100644
--- a/sched/src/com/android/sched/vfs/GenericInputVFile.java
+++ b/sched/src/com/android/sched/vfs/GenericInputVFile.java
@@ -66,6 +66,7 @@
file.delete();
}
+ @Override
@CheckForNull
public String getDigest() {
return file.getDigest();
diff --git a/sched/src/com/android/sched/vfs/GenericOutputVFS.java b/sched/src/com/android/sched/vfs/GenericOutputVFS.java
index d06c523..9c2b1ac 100644
--- a/sched/src/com/android/sched/vfs/GenericOutputVFS.java
+++ b/sched/src/com/android/sched/vfs/GenericOutputVFS.java
@@ -34,7 +34,7 @@
@Override
@Nonnull
- public OutputVDir getRootOutputVDir() {
+ public OutputVDir getRootDir() {
return new GenericOutputVDir(vfs.getRootDir());
}
diff --git a/sched/src/com/android/sched/vfs/InputOutputVFS.java b/sched/src/com/android/sched/vfs/InputOutputVFS.java
index b983755..13181bd 100644
--- a/sched/src/com/android/sched/vfs/InputOutputVFS.java
+++ b/sched/src/com/android/sched/vfs/InputOutputVFS.java
@@ -23,6 +23,7 @@
* An input/output VFS.
*/
public interface InputOutputVFS extends InputVFS, OutputVFS {
+ @Override
@Nonnull
- InputOutputVDir getRootInputOutputVDir();
+ InputOutputVDir getRootDir();
}
diff --git a/sched/src/com/android/sched/vfs/InputVFS.java b/sched/src/com/android/sched/vfs/InputVFS.java
index 54d2989..de9fa74 100644
--- a/sched/src/com/android/sched/vfs/InputVFS.java
+++ b/sched/src/com/android/sched/vfs/InputVFS.java
@@ -29,7 +29,7 @@
@Nonnull
String getPath();
@Nonnull
- InputVDir getRootInputVDir();
+ InputVDir getRootDir();
@CheckForNull
String getDigest();
@Override
diff --git a/sched/src/com/android/sched/vfs/InputVFile.java b/sched/src/com/android/sched/vfs/InputVFile.java
index 1cb2144..3d824fa 100644
--- a/sched/src/com/android/sched/vfs/InputVFile.java
+++ b/sched/src/com/android/sched/vfs/InputVFile.java
@@ -21,6 +21,7 @@
import java.nio.file.attribute.FileTime;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
@@ -38,4 +39,7 @@
@Nonnull
VFile getVFile();
+
+ @CheckForNull
+ String getDigest();
}
diff --git a/sched/src/com/android/sched/vfs/MessageDigestFS.java b/sched/src/com/android/sched/vfs/MessageDigestFS.java
index 4ebe981..7de3fe4 100644
--- a/sched/src/com/android/sched/vfs/MessageDigestFS.java
+++ b/sched/src/com/android/sched/vfs/MessageDigestFS.java
@@ -172,7 +172,7 @@
@SuppressWarnings("unchecked")
public MessageDigestFS(@Nonnull VFS vfs, @Nonnull MessageDigestFactory factory)
- throws BadVFSFormatException {
+ throws BadVFSFormatException, WrongVFSTypeException {
this.vfs = (BaseVFS<BaseVDir, BaseVFile>) vfs;
this.mdFactory = factory;
@@ -184,7 +184,7 @@
init();
}
- private void init() throws BadVFSFormatException {
+ private void init() throws BadVFSFormatException, WrongVFSTypeException {
BaseVFile digestFile;
try {
@@ -193,7 +193,7 @@
throw new BadVFSFormatException(this, vfs.getLocation(), e);
} catch (NoSuchFileException e) {
if (!vfs.getRootDir().isEmpty()) {
- throw new BadVFSFormatException(this, vfs.getLocation(), e);
+ throw new WrongVFSTypeException(vfs, vfs.getLocation(), getDescription(), e);
}
return;
diff --git a/sched/src/com/android/sched/vfs/OutputVFS.java b/sched/src/com/android/sched/vfs/OutputVFS.java
index 2349aa4..6deae24 100644
--- a/sched/src/com/android/sched/vfs/OutputVFS.java
+++ b/sched/src/com/android/sched/vfs/OutputVFS.java
@@ -28,7 +28,7 @@
@Nonnull
String getPath();
@Nonnull
- OutputVDir getRootOutputVDir();
+ OutputVDir getRootDir();
boolean needsSequentialWriting();
@Override
diff --git a/sched/src/com/android/sched/vfs/PrefixedFS.java b/sched/src/com/android/sched/vfs/PrefixedFS.java
index d90cd0d..58da11d 100644
--- a/sched/src/com/android/sched/vfs/PrefixedFS.java
+++ b/sched/src/com/android/sched/vfs/PrefixedFS.java
@@ -19,6 +19,7 @@
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotDeleteFileException;
import com.android.sched.util.file.CannotGetModificationTimeException;
+import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileException;
@@ -44,16 +45,22 @@
private final BaseVDir rootDir;
@SuppressWarnings("unchecked")
- public PrefixedFS(@Nonnull VFS vfs, @Nonnull VPath prefix)
- throws CannotCreateFileException, NotDirectoryException {
+ public PrefixedFS(@Nonnull VFS vfs, @Nonnull VPath prefix, @Nonnull Existence existence)
+ throws CannotCreateFileException, NotDirectoryException, WrongVFSTypeException {
this.vfs = (BaseVFS<BaseVDir, BaseVFile>) vfs;
BaseVDir rootDir;
- // let's try to get the VDir before creating it because we not have write permissions.
try {
rootDir = this.vfs.getRootDir().getVDir(prefix);
+ if (existence == Existence.NOT_EXIST) {
+ throw new WrongVFSTypeException(vfs, vfs.getLocation(), getDescription());
+ }
} catch (NoSuchFileException e) {
- rootDir = this.vfs.getRootDir().createVDir(prefix);
+ if (existence == Existence.MUST_EXIST) {
+ throw new WrongVFSTypeException(vfs, vfs.getLocation(), getDescription(), e);
+ } else {
+ rootDir = this.vfs.getRootDir().createVDir(prefix);
+ }
}
this.rootDir = changeVFS(rootDir);
}
diff --git a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
index 5a31f9d..2ac78bc 100644
--- a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
+++ b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
@@ -33,6 +33,8 @@
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileException;
import com.android.sched.util.file.OutputZipFile;
+import com.android.sched.util.file.Statusful;
+import com.android.sched.util.file.StreamFileStatus;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.DirectoryLocation;
import com.android.sched.util.location.Location;
@@ -51,7 +53,7 @@
/**
* A {@link VFS} backed by a real filesystem directory, compressed into a zip archive when closed.
*/
-public class ReadWriteZipFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS {
+public class ReadWriteZipFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS, Statusful {
@Nonnull
private final VFSToVFSWrapper vfs;
@@ -273,4 +275,10 @@
public String toString() {
return "rwZipFS >> " + vfs.toString();
}
+
+ @Override
+ @Nonnull
+ public StreamFileStatus getStatus() {
+ return ((Statusful) vfs.getWorkVFS()).getStatus();
+ }
}
diff --git a/sched/src/com/android/sched/vfs/ReadZipFS.java b/sched/src/com/android/sched/vfs/ReadZipFS.java
index 2fdb7a0..a88230e 100644
--- a/sched/src/com/android/sched/vfs/ReadZipFS.java
+++ b/sched/src/com/android/sched/vfs/ReadZipFS.java
@@ -302,7 +302,7 @@
@Override
boolean isEmpty(@Nonnull ZipVDir dir) {
- return list(dir).isEmpty();
+ return dir.isEmpty();
}
@Override
diff --git a/sched/src/com/android/sched/vfs/RuntimeBadVFSFormatException.java b/sched/src/com/android/sched/vfs/RuntimeBadVFSFormatException.java
new file mode 100644
index 0000000..a20ba4f
--- /dev/null
+++ b/sched/src/com/android/sched/vfs/RuntimeBadVFSFormatException.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sched.vfs;
+
+import com.android.sched.util.UnrecoverableException;
+import com.android.sched.util.location.Location;
+
+import javax.annotation.Nonnull;
+
+/**
+ * {@link RuntimeException} when a {@link VFS} has a bad format, i.e. it does not match the expected
+ * format.
+ */
+public class RuntimeBadVFSFormatException extends UnrecoverableException {
+ private static final long serialVersionUID = 1L;
+
+ @Nonnull
+ private final VFS vfs;
+ @Nonnull
+ private final Location location;
+
+ public RuntimeBadVFSFormatException(@Nonnull VFS vfs, @Nonnull Location location,
+ @Nonnull Throwable cause) {
+ super(cause);
+ this.vfs = vfs;
+ this.location = location;
+ }
+
+ @Override
+ @Nonnull
+ public String getMessage() {
+ return "'" + vfs.getDescription() + "' VFS in " + location.getDescription()
+ + " has an unexpected bad format: " + getCause().getMessage();
+ }
+}
diff --git a/sched/src/com/android/sched/vfs/UnionVFS.java b/sched/src/com/android/sched/vfs/UnionVFS.java
index e3844f1..4a16e78 100644
--- a/sched/src/com/android/sched/vfs/UnionVFS.java
+++ b/sched/src/com/android/sched/vfs/UnionVFS.java
@@ -27,6 +27,8 @@
import com.android.sched.util.file.NoSuchFileException;
import com.android.sched.util.file.NotDirectoryException;
import com.android.sched.util.file.NotFileException;
+import com.android.sched.util.file.Statusful;
+import com.android.sched.util.file.StreamFileStatus;
import com.android.sched.util.file.WrongPermissionException;
import com.android.sched.util.location.Location;
import com.android.sched.vfs.UnionVFS.UnionVDir;
@@ -49,7 +51,7 @@
* A {@link VFS} that acts as an ordered agglomerate of other VFS. Writing is done in the top VFS
* only, if it is supported. The VFS are ordered according to their priority.
*/
-public class UnionVFS extends BaseVFS<UnionVDir, UnionVFile> implements VFS {
+public class UnionVFS extends BaseVFS<UnionVDir, UnionVFile> implements VFS, Statusful {
/**
* Only delete the VFile that is on top, do not delete those that are under.
@@ -217,6 +219,8 @@
private final boolean writable;
+ private boolean used = false;
+
public UnionVFS(@Nonnull List<VFS> vfsList) {
assert !vfsList.isEmpty();
this.vfsList = vfsList;
@@ -346,6 +350,8 @@
@Override
@Nonnull
public UnionVDir getRootDir() {
+ used = true;
+
return rootDir;
}
@@ -649,6 +655,18 @@
}
@Override
+ @Nonnull
+ public StreamFileStatus getStatus() {
+ if (!used) {
+ return StreamFileStatus.NOT_USED;
+ } else if (closed) {
+ return StreamFileStatus.CLOSED;
+ } else {
+ return StreamFileStatus.OPEN;
+ }
+ }
+
+ @Override
@CheckForNull
public String getInfoString() {
return vfsList.get(0).getInfoString();
diff --git a/sched/src/com/android/sched/vfs/VFSPropertyId.java b/sched/src/com/android/sched/vfs/VFSPropertyId.java
index 5dcf778..3858a30 100644
--- a/sched/src/com/android/sched/vfs/VFSPropertyId.java
+++ b/sched/src/com/android/sched/vfs/VFSPropertyId.java
@@ -23,6 +23,8 @@
import com.android.sched.util.config.category.Category;
import com.android.sched.util.config.expression.BooleanExpression;
import com.android.sched.util.config.id.PropertyId;
+import com.android.sched.util.file.Statusful;
+import com.android.sched.util.file.StreamFileStatus;
import javax.annotation.Nonnull;
@@ -90,7 +92,14 @@
new ShutdownRunnable<VFS>() {
@Override
public void run(@Nonnull VFS vfs) {
- if (!vfs.isClosed()) {
+ boolean open;
+ if (vfs instanceof Statusful) {
+ open = ((Statusful) vfs).getStatus() == StreamFileStatus.OPEN;
+ } else {
+ open = !vfs.isClosed();
+ }
+
+ if (open) {
throw new AssertionError(
"VFS '"
+ vfs.getDescription()
diff --git a/sched/src/com/android/sched/vfs/VPath.java b/sched/src/com/android/sched/vfs/VPath.java
index d93b331..a15741a 100644
--- a/sched/src/com/android/sched/vfs/VPath.java
+++ b/sched/src/com/android/sched/vfs/VPath.java
@@ -215,4 +215,9 @@
public String getLastName() {
return Iterators.getLast(split().iterator(), "");
}
+
+ @Override
+ public String toString() {
+ return "_" + getInternalPath() + "_";
+ }
}
diff --git a/sched/src/com/android/sched/vfs/WrongVFSTypeException.java b/sched/src/com/android/sched/vfs/WrongVFSTypeException.java
new file mode 100644
index 0000000..b01f7ff
--- /dev/null
+++ b/sched/src/com/android/sched/vfs/WrongVFSTypeException.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sched.vfs;
+
+import com.android.sched.util.file.SchedIOException;
+import com.android.sched.util.location.Location;
+
+import javax.annotation.Nonnull;
+
+/**
+ * {@link Exception} when a {@link VFS} does not match the expected VFS type, but may be a valid VFS
+ * of another type.
+ */
+public class WrongVFSTypeException extends SchedIOException {
+ private static final long serialVersionUID = 1L;
+
+ @Nonnull
+ private final VFS vfs;
+ @Nonnull
+ private final String expectedVfsDescription;
+
+ public WrongVFSTypeException(@Nonnull VFS vfs, @Nonnull Location location,
+ @Nonnull String expectedVfsDescription, @Nonnull Throwable cause) {
+ super(location, cause);
+ this.vfs = vfs;
+ this.expectedVfsDescription = expectedVfsDescription;
+ }
+
+ public WrongVFSTypeException(@Nonnull VFS vfs, @Nonnull Location location,
+ @Nonnull String expectedVfsDescription) {
+ super(location, null);
+ this.vfs = vfs;
+ this.expectedVfsDescription = expectedVfsDescription;
+ }
+
+ @Override
+ @Nonnull
+ protected String createMessage(@Nonnull String description) {
+ return "'"
+ + vfs.getDescription()
+ + "' VFS in "
+ + description
+ + " does not match the expected VFS type '"
+ + expectedVfsDescription
+ + "': "
+ + getCause().getMessage();
+ }
+}
diff --git a/sched/tests/com/android/sched/AllTests.java b/sched/tests/com/android/sched/AllTests.java
index 8454401..8c39864 100644
--- a/sched/tests/com/android/sched/AllTests.java
+++ b/sched/tests/com/android/sched/AllTests.java
@@ -28,7 +28,6 @@
com.android.sched.scheduler.AllTests.class,
com.android.sched.config.AllTests.class,
com.android.sched.util.AllTests.class,
- com.android.sched.util.file.AllTests.class,
com.android.sched.vfs.VFSTest.class})
public class AllTests {
}
diff --git a/sched/tests/com/android/sched/test/TestTools.java b/sched/tests/com/android/sched/test/TestTools.java
new file mode 100644
index 0000000..ff48351
--- /dev/null
+++ b/sched/tests/com/android/sched/test/TestTools.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sched.test;
+
+import com.android.sched.util.file.CannotChangePermissionException;
+import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.util.file.CannotDeleteFileException;
+import com.android.sched.util.file.FileUtils;
+import com.android.sched.util.file.Files;
+import com.android.sched.util.location.FileLocation;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Common tools for Schedlib tests.
+ */
+public class TestTools {
+
+ @Nonnull
+ private static final String TMP_PREFIX = "test-sched-";
+
+ @Nonnull
+ public static File createTempFile(@Nonnull String prefix, @Nonnull String suffix)
+ throws CannotCreateFileException, CannotChangePermissionException {
+ File tmp = Files.createTempFile(TMP_PREFIX + prefix, suffix);
+ tmp.deleteOnExit();
+ return tmp;
+ }
+
+ @Nonnull
+ public static File createTempDir() throws CannotCreateFileException,
+ CannotChangePermissionException, IOException {
+ try {
+ final File tmpDir = Files.createTempDir(TMP_PREFIX);
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ try {
+ FileUtils.deleteDir(tmpDir);
+ } catch (IOException e) {
+ throw new RuntimeException(new CannotDeleteFileException(new FileLocation(tmpDir)));
+ }
+ }
+ });
+ return tmpDir;
+ } catch (IllegalStateException e) {
+ throw new IOException(e);
+ }
+ }
+
+}
diff --git a/sched/tests/com/android/sched/util/codec/AllTests.java b/sched/tests/com/android/sched/util/codec/AllTests.java
index db3d776..4409b61 100644
--- a/sched/tests/com/android/sched/util/codec/AllTests.java
+++ b/sched/tests/com/android/sched/util/codec/AllTests.java
@@ -21,6 +21,7 @@
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
-@SuiteClasses(value = {DurationFormatterTest.class, QuantityFormatterTest.class})
-public class AllTests {
-}
+@SuiteClasses(
+ value = {DurationFormatterTest.class, QuantityFormatterTest.class, WriterFileCodecTest.class}
+)
+public class AllTests {}
diff --git a/sched/tests/com/android/sched/util/codec/WriterFileCodecTest.java b/sched/tests/com/android/sched/util/codec/WriterFileCodecTest.java
new file mode 100644
index 0000000..e5084a7
--- /dev/null
+++ b/sched/tests/com/android/sched/util/codec/WriterFileCodecTest.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sched.util.codec;
+
+import com.android.sched.util.LineSeparator;
+import com.android.sched.util.file.CannotChangePermissionException;
+import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.util.file.FileAlreadyExistsException;
+import com.android.sched.util.file.FileOrDirectory.ChangePermission;
+import com.android.sched.util.file.FileOrDirectory.Existence;
+import com.android.sched.util.file.NoSuchFileException;
+import com.android.sched.util.file.NotFileException;
+import com.android.sched.util.file.StandardOutputKind;
+import com.android.sched.util.file.WriterFile;
+import com.android.sched.util.file.WrongPermissionException;
+import com.android.sched.util.findbugs.SuppressFBWarnings;
+import com.android.sched.util.location.NoLocation;
+
+import junit.framework.Assert;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+public class WriterFileCodecTest {
+
+ @Test
+ public void testFormatValueStdout() {
+ String string =
+ new WriterFileCodec(Existence.MAY_EXIST)
+ .formatValue(new WriterFile(StandardOutputKind.STANDARD_OUTPUT));
+ Assert.assertEquals(FileCodec.STANDARD_IO_NAME, string);
+ }
+
+ @Test
+ public void testFormatValueStderr() {
+ String string =
+ new WriterFileCodec(Existence.MAY_EXIST)
+ .formatValue(new WriterFile(StandardOutputKind.STANDARD_ERROR));
+ Assert.assertEquals(FileCodec.STANDARD_ERROR_NAME, string);
+ }
+
+ @Test
+ @SuppressFBWarnings("RV_RETURN_VALUE_IGNORED_BAD_PRACTICE")
+ public void testFormatValueFile()
+ throws NotFileException, FileAlreadyExistsException, CannotCreateFileException,
+ CannotChangePermissionException, WrongPermissionException, NoSuchFileException,
+ IOException {
+ File file = File.createTempFile("sched-test", "tmp");
+ try {
+ String string =
+ new WriterFileCodec(Existence.MAY_EXIST)
+ .formatValue(new WriterFile(/* workingDirectory = */ null,
+ file.getPath(),
+ Charset.forName("UTF-8"),
+ LineSeparator.SYSTEM,
+ /* bufferSize = */ 4 * 1024,
+ /* hooks = */ null,
+ Existence.MAY_EXIST,
+ ChangePermission.NOCHANGE,
+ /* append = */ false));
+ Assert.assertEquals(file.getPath(), string);
+ } finally {
+ file.delete();
+ }
+ }
+
+ @Test
+ @Ignore // Known Schedlib bug
+ public void testFormatValueStreamOnly() {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ String string =
+ new WriterFileCodec(Existence.MAY_EXIST)
+ .formatValue(new WriterFile(out, new NoLocation()));
+ Assert.assertEquals("TBD", string);
+ }
+}
diff --git a/sched/tests/com/android/sched/util/file/FileUtilsTest.java b/sched/tests/com/android/sched/util/file/FileUtilsTest.java
deleted file mode 100644
index d336501..0000000
--- a/sched/tests/com/android/sched/util/file/FileUtilsTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.sched.util.file;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * JUnit tests for class {@link FileUtils}.
- */
-public class FileUtilsTest {
-
- /**
- * Test method for {@link com.android.sched.util.file.FileUtils#getFileSeparator()}.
- */
- public void testGetFileSeparator() {
- String fileSeparator = FileUtils.getFileSeparator();
- Assert.assertNotNull(fileSeparator);
- Assert.assertFalse(fileSeparator.isEmpty());
- }
-
- /**
- * Test method for {@link com.android.sched.util.file.FileUtils#getWorkingDirectory()}.
- */
- @Test
- public void testGetWorkingDirectory() {
- File workingDir = FileUtils.getWorkingDirectory();
- Assert.assertNotNull(workingDir);
- Assert.assertTrue(workingDir.isDirectory());
- }
-
- /**
- * Test method for {@link com.android.sched.util.file.FileUtils#createIfNotExists(java.io.File)}.
- */
- @Test
- public void testCreateIfNotExists() throws IOException {
-
- // Test creation of a directory (in tmp)
- String tmpDirPath = System.getProperty("java.io.tmpdir");
- File tempDir = new File(tmpDirPath);
- File newDir = new File(tempDir, "testDir_FileUtilTest");
- newDir.deleteOnExit();
- if (newDir.exists()) {
- if (!newDir.delete()) {
- Assert.fail("Unable to delete folder " + newDir.getAbsolutePath());
- }
- }
-
- FileUtils.createIfNotExists(newDir);
- Assert.assertTrue(newDir.exists());
- }
-
-}
diff --git a/sched/tests/com/android/sched/vfs/VFSTest.java b/sched/tests/com/android/sched/vfs/VFSTest.java
index d95d4f8..fd9b0c4 100644
--- a/sched/tests/com/android/sched/vfs/VFSTest.java
+++ b/sched/tests/com/android/sched/vfs/VFSTest.java
@@ -16,6 +16,7 @@
package com.android.sched.vfs;
+import com.android.sched.test.TestTools;
import com.android.sched.util.config.AsapConfigBuilder;
import com.android.sched.util.config.ConfigurationException;
import com.android.sched.util.config.MessageDigestFactory;
@@ -78,10 +79,9 @@
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
- VFS vfs1 = new DirectFS(new Directory(path, null, Existence.NOT_EXIST,
+ VFS vfs1 = new DirectFS(new Directory(path, null, Existence.MUST_EXIST,
Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ | Permission.WRITE);
ioVFS1 = new GenericInputOutputVFS(vfs1);
@@ -103,9 +103,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -118,11 +115,10 @@
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
VFS vfs1 = new CachedDirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE);
ioVFS1 = new GenericInputOutputVFS(vfs1);
@@ -148,9 +144,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -163,13 +156,12 @@
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
ioVFS1 =
new GenericInputOutputVFS(new DeflateFS(new DirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
| Permission.WRITE)));
testOutputVFS(ioVFS1);
@@ -207,13 +199,12 @@
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
ioVFS1 =
new GenericInputOutputVFS(new CaseInsensitiveFS(new DirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
| Permission.WRITE)));
testOutputVFS(ioVFS1);
@@ -234,9 +225,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -244,19 +232,19 @@
public void testMessageDigestFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException {
+ NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
Provider.Service sha1 = getSha1Service();
ioVFS1 = new GenericInputOutputVFS(new MessageDigestFS(new DirectFS(new Directory(path,
- null, Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
+ null, Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE), new MessageDigestFactory(getSha1Service())));
testOutputVFS(ioVFS1);
@@ -264,8 +252,8 @@
checkFileLocations(ioVFS1);
testInputVFS(ioVFS1);
InputVFile fileAAB1 =
- ioVFS1.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest = ((GenericInputVFile) fileAAB1).getDigest();
+ ioVFS1.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest = fileAAB1.getDigest();
Assert.assertNotNull(fileAAB1digest);
String vfsDigest = ioVFS1.getDigest();
Assert.assertNotNull(vfsDigest);
@@ -278,8 +266,8 @@
checkFileLocations(ioVFS2);
InputVFile fileAAB1b =
- ioVFS2.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest2 = ((GenericInputVFile) fileAAB1b).getDigest();
+ ioVFS2.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest2 = fileAAB1b.getDigest();
Assert.assertEquals(fileAAB1digest, fileAAB1digest2);
String vfsDigest2 = ioVFS2.getDigest();
Assert.assertEquals(vfsDigest, vfsDigest2);
@@ -291,9 +279,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -301,14 +286,14 @@
public void testMessageDigestFSWithCaseInsensitiveFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException {
+ NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
Provider.Service sha1 = null;
for (Provider provider : Security.getProviders()) {
@@ -321,15 +306,15 @@
Assert.assertNotNull(sha1);
ioVFS1 = new GenericInputOutputVFS(new MessageDigestFS(new CaseInsensitiveFS(
- new DirectFS(new Directory(path, null, Existence.NOT_EXIST, Permission.WRITE,
+ new DirectFS(new Directory(path, null, Existence.MUST_EXIST, Permission.WRITE,
ChangePermission.NOCHANGE), Permission.READ | Permission.WRITE)),
new MessageDigestFactory(sha1)));
testOutputVFS(ioVFS1);
testDelete(ioVFS1);
testInputVFS(ioVFS1);
InputVFile fileAAB1 =
- ioVFS1.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest = ((GenericInputVFile) fileAAB1).getDigest();
+ ioVFS1.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest = fileAAB1.getDigest();
Assert.assertNotNull(fileAAB1digest);
String vfsDigest = ioVFS1.getDigest();
Assert.assertNotNull(vfsDigest);
@@ -342,8 +327,8 @@
testInputVFS(ioVFS2);
InputVFile fileAAB1b =
- ioVFS2.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest2 = ((GenericInputVFile) fileAAB1b).getDigest();
+ ioVFS2.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest2 = fileAAB1b.getDigest();
Assert.assertEquals(fileAAB1digest, fileAAB1digest2);
String vfsDigest2 = ioVFS2.getDigest();
Assert.assertEquals(vfsDigest, vfsDigest2);
@@ -355,31 +340,29 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@Test
public void testDeflatePrefixedCaseInsensitiveDirectFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
- NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException {
+ NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
+ NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
CaseInsensitiveFS ciFS = new CaseInsensitiveFS(new DirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE));
ioVFS1 =
- new GenericInputOutputVFS(new DeflateFS(new PrefixedFS(ciFS, new VPath("stuff", '/'))));
+ new GenericInputOutputVFS(
+ new DeflateFS(new PrefixedFS(ciFS, new VPath("stuff", '/'), Existence.MAY_EXIST)));
testOutputVFS(ioVFS1);
testDelete(ioVFS1);
@@ -392,7 +375,8 @@
Permission.READ | Permission.WRITE));
ioVFS2 =
- new GenericInputOutputVFS(new DeflateFS(new PrefixedFS(ciFS2, new VPath("stuff", '/'))));
+ new GenericInputOutputVFS(
+ new DeflateFS(new PrefixedFS(ciFS2, new VPath("stuff", '/'), Existence.MUST_EXIST)));
testInputVFS(ioVFS2);
ciFS2.close();
@@ -403,9 +387,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -413,14 +394,14 @@
public void testMessageDigestFSWithCachedDirectFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException {
+ NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
Provider.Service sha1 = null;
for (Provider provider : Security.getProviders()) {
@@ -433,7 +414,7 @@
Assert.assertNotNull(sha1);
VFS vfs1 = new MessageDigestFS(new CachedDirectFS(
- new Directory(path, null, Existence.NOT_EXIST, Permission.WRITE,
+ new Directory(path, null, Existence.MUST_EXIST, Permission.WRITE,
ChangePermission.NOCHANGE), Permission.READ | Permission.WRITE),
new MessageDigestFactory(sha1));
@@ -443,8 +424,8 @@
checkFileLocations(ioVFS1);
testInputVFS(ioVFS1);
InputVFile fileAAB1 =
- ioVFS1.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest = ((GenericInputVFile) fileAAB1).getDigest();
+ ioVFS1.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest = fileAAB1.getDigest();
Assert.assertNotNull(fileAAB1digest);
String vfsDigest = ioVFS1.getDigest();
Assert.assertNotNull(vfsDigest);
@@ -458,8 +439,8 @@
checkFileLocations(ioVFS2);
InputVFile fileAAB1b =
- ioVFS2.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest2 = ((GenericInputVFile) fileAAB1b).getDigest();
+ ioVFS2.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest2 = fileAAB1b.getDigest();
Assert.assertEquals(fileAAB1digest, fileAAB1digest2);
String vfsDigest2 = ioVFS2.getDigest();
Assert.assertEquals(vfsDigest, vfsDigest2);
@@ -471,9 +452,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -481,19 +459,18 @@
public void testPrefixedFSWithDirectFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
NoSuchFileException, FileAlreadyExistsException, IOException, NotFileOrDirectoryException,
- CannotDeleteFileException, CannotCloseException {
+ CannotDeleteFileException, CannotCloseException, WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
ioVFS1 =
new GenericInputOutputVFS(new PrefixedFS(new DirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
- | Permission.WRITE), new VPath("stuff", '/')));
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
+ | Permission.WRITE), new VPath("stuff", '/'), Existence.NOT_EXIST));
testOutputVFS(ioVFS1);
testDelete(ioVFS1);
@@ -504,7 +481,7 @@
ioVFS2 =
new GenericInputOutputVFS(new PrefixedFS(new DirectFS(new Directory(path, null,
Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ
- | Permission.WRITE), new VPath("stuff", '/')));
+ | Permission.WRITE), new VPath("stuff", '/'), Existence.MUST_EXIST));
testInputVFS(ioVFS2);
checkFileLocations(ioVFS2);
@@ -515,9 +492,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -525,19 +499,21 @@
public void testPrefixedFSWithZip()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
NoSuchFileException, FileAlreadyExistsException, IOException, ZipException,
- NotFileOrDirectoryException, CannotCloseException {
+ NotFileOrDirectoryException, CannotCloseException, WrongVFSTypeException {
String prefix = "stuff";
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", ".zip");
+ file = TestTools.createTempFile("vfs", ".zip");
String path = file.getAbsolutePath();
WriteZipFS writeZipFS = new WriteZipFS(new OutputZipFile(path, null, Existence.MAY_EXIST,
ChangePermission.NOCHANGE, Compression.COMPRESSED));
- ioVFS1 = new GenericInputOutputVFS(new PrefixedFS(writeZipFS, new VPath(prefix, '/')));
+ ioVFS1 =
+ new GenericInputOutputVFS(
+ new PrefixedFS(writeZipFS, new VPath(prefix, '/'), Existence.NOT_EXIST));
testOutputVFS(ioVFS1);
ioVFS1.close();
@@ -545,7 +521,9 @@
ReadZipFS readZipFS = new ReadZipFS(new InputZipFile(path));
- ioVFS2 = new GenericInputOutputVFS(new PrefixedFS(readZipFS, new VPath(prefix, '/')));
+ ioVFS2 =
+ new GenericInputOutputVFS(
+ new PrefixedFS(readZipFS, new VPath(prefix, '/'), Existence.MUST_EXIST));
testInputVFS(ioVFS2);
checkZipLocations(ioVFS2, prefix);
@@ -558,30 +536,29 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- Assert.assertTrue(file.delete());
- }
}
}
@Test
public void testPrefixedFSWithCaseInsensitiveFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
- NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException {
+ NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
+ NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
CaseInsensitiveFS ciFS = new CaseInsensitiveFS(new DirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE));
- ioVFS1 = new GenericInputOutputVFS(new PrefixedFS(ciFS, new VPath("stuff", '/')));
+ ioVFS1 =
+ new GenericInputOutputVFS(
+ new PrefixedFS(ciFS, new VPath("stuff", '/'), Existence.NOT_EXIST));
testOutputVFS(ioVFS1);
testDelete(ioVFS1);
@@ -593,7 +570,9 @@
Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE));
- ioVFS2 = new GenericInputOutputVFS(new PrefixedFS(ciFS2, new VPath("stuff", '/')));
+ ioVFS2 =
+ new GenericInputOutputVFS(
+ new PrefixedFS(ciFS2, new VPath("stuff", '/'), Existence.MUST_EXIST));
testInputVFS(ioVFS2);
ciFS2.close();
@@ -604,24 +583,21 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@Test
public void testMessageDigestFSWithPrefixedFSAndCaseInsensitiveFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
- NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException {
+ NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
+ NotFileOrDirectoryException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputOutputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", "dir");
+ file = TestTools.createTempDir();
String path = file.getAbsolutePath();
- Assert.assertTrue(file.delete());
Provider.Service sha1 = null;
for (Provider provider : Security.getProviders()) {
@@ -635,10 +611,12 @@
CaseInsensitiveFS ciFS =
new CaseInsensitiveFS(new MessageDigestFS(new CachedDirectFS(new Directory(path, null,
- Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
+ Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE), new MessageDigestFactory(sha1)));
- ioVFS1 = new GenericInputOutputVFS(new PrefixedFS(ciFS, new VPath("stuff", '/')));
+ ioVFS1 =
+ new GenericInputOutputVFS(
+ new PrefixedFS(ciFS, new VPath("stuff", '/'), Existence.NOT_EXIST));
testOutputVFS(ioVFS1);
testDelete(ioVFS1);
@@ -651,7 +629,9 @@
Existence.MUST_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
Permission.READ | Permission.WRITE), new MessageDigestFactory(sha1)));
- ioVFS2 = new GenericInputOutputVFS(new PrefixedFS(ciFS2, new VPath("stuff", '/')));
+ ioVFS2 =
+ new GenericInputOutputVFS(
+ new PrefixedFS(ciFS2, new VPath("stuff", '/'), Existence.MUST_EXIST));
testInputVFS(ioVFS2);
ciFS2.close();
@@ -662,9 +642,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- FileUtils.deleteDir(file);
- }
}
}
@@ -677,7 +654,7 @@
InputOutputVFS ioVFS1 = null;
InputVFS iVFS2 = null;
try {
- file = File.createTempFile("vfs", ".zip");
+ file = TestTools.createTempFile("vfs", ".zip");
String path = file.getAbsolutePath();
ioVFS1 = new GenericInputOutputVFS(new WriteZipFS(new OutputZipFile(path, null,
Existence.MAY_EXIST, ChangePermission.NOCHANGE, Compression.COMPRESSED)));
@@ -693,9 +670,6 @@
if (iVFS2 != null) {
iVFS2.close();
}
- if (file != null) {
- Assert.assertTrue(file.delete());
- }
}
}
@@ -708,10 +682,9 @@
File zipFile = null;
File dir = null;
try {
- zipFile = File.createTempFile("vfs", ".zip");
- dir = File.createTempFile("vfs", "dir");
+ zipFile = TestTools.createTempFile("vfs", ".zip");
+ dir = TestTools.createTempDir();
String dirPath = dir.getPath();
- Assert.assertTrue(dir.delete());
// fill up zip
VFS writeZipVFS = new ReadWriteZipFS(
@@ -722,7 +695,7 @@
writeZipVFS.close();
// create Dir
- VFS dirVFS = new CachedDirectFS(new Directory(dirPath, null, Existence.NOT_EXIST,
+ VFS dirVFS = new CachedDirectFS(new Directory(dirPath, null, Existence.MUST_EXIST,
Permission.WRITE, ChangePermission.NOCHANGE), Permission.READ | Permission.WRITE);
// create UnionVFS with dir and read-only zip
@@ -734,24 +707,24 @@
// write new stuff to UnionVFS
InputOutputVFS outputUnionVFS = new GenericInputOutputVFS(unionVFS);
- OutputVFile fileBA2 = outputUnionVFS.getRootOutputVDir().createOutputVFile(
+ OutputVFile fileBA2 = outputUnionVFS.getRootDir().createOutputVFile(
new VPath("dirB/dirBA/fileBA2", '/'));
writeToFile(fileBA2, "dirB/dirBA/fileBA2");
InputOutputVDir dirA =
- outputUnionVFS.getRootInputOutputVDir().getInputVDir(new VPath("dirA", '/'));
+ outputUnionVFS.getRootDir().getInputVDir(new VPath("dirA", '/'));
InputOutputVDir dirAA = dirA.getInputVDir(new VPath("dirAA", '/'));
InputOutputVDir dirAAB = (InputOutputVDir) dirAA.createOutputVDir(new VPath("dirAAB", '/'));
OutputVFile fileAAB2 = dirAAB.createOutputVFile(new VPath("fileAAB2", '/'));
writeToFile(fileAAB2, "dirA/dirAA/dirAAB/fileAAB2");
InputOutputVDir dirC =
- outputUnionVFS.getRootInputOutputVDir().getInputVDir(new VPath("dirC", '/'));
+ outputUnionVFS.getRootDir().getInputVDir(new VPath("dirC", '/'));
// write on top of an already existing file
OutputVFile fileC1 = dirC.getInputVFile(new VPath("fileC1", '/'));
writeToFile(fileC1, "dirC/fileC1v2");
// try deleting some old stuff from zip (which is not yet supported)
try {
- outputUnionVFS.getRootInputOutputVDir().getInputVFile(new VPath("dirB/dirBB/fileBB1", '/'))
+ outputUnionVFS.getRootDir().getInputVFile(new VPath("dirB/dirBB/fileBB1", '/'))
.delete();
Assert.fail();
} catch (UnionVFSReadOnlyException e) {
@@ -760,12 +733,12 @@
// read new stuff
InputVFS inputUnionVFS = new GenericInputVFS(unionVFS);
- InputVFile readFileC1 = inputUnionVFS.getRootInputVDir().getInputVFile(
+ InputVFile readFileC1 = inputUnionVFS.getRootDir().getInputVFile(
new VPath("dirC/fileC1", '/'));
Assert.assertEquals("dirC/fileC1v2", readFromFile(readFileC1));
Assert.assertTrue(
readFileC1.getPathFromRoot().equals(new VPath("dirC/fileC1", '/')));
- InputVDir readDirA = inputUnionVFS.getRootInputVDir().getInputVDir(new VPath("dirA", '/'));
+ InputVDir readDirA = inputUnionVFS.getRootDir().getInputVDir(new VPath("dirA", '/'));
InputVDir readDirAA = readDirA.getInputVDir(new VPath("dirAA", '/'));
InputVDir readDirAAB = readDirAA.getInputVDir(new VPath("dirAAB", '/'));
InputVFile readFileAAB2 = readDirAAB.getInputVFile(new VPath("fileAAB2", '/'));
@@ -784,12 +757,12 @@
// try to delete a file that is in the dir and the zip, then check that the one from the zip
// remains
- inputUnionVFS.getRootInputVDir().getInputVFile(new VPath("dirC/fileC1", '/')).delete();
+ inputUnionVFS.getRootDir().getInputVFile(new VPath("dirC/fileC1", '/')).delete();
Assert.assertEquals("dirC/fileC1", readFromFile(
- inputUnionVFS.getRootInputVDir().getInputVFile(new VPath("dirC/fileC1", '/'))));
+ inputUnionVFS.getRootDir().getInputVFile(new VPath("dirC/fileC1", '/'))));
// list contents of "dirB/dirBA", which has files in the dir and in the zip
- InputVDir dirBA = inputUnionVFS.getRootInputVDir().getInputVDir(new VPath("dirB/dirBA", '/'));
+ InputVDir dirBA = inputUnionVFS.getRootDir().getInputVDir(new VPath("dirB/dirBA", '/'));
Collection<? extends InputVElement> dirBAList = dirBA.list();
Assert.assertEquals(2, dirBAList.size());
for (InputVElement subElement : dirBAList) {
@@ -817,28 +790,25 @@
if (zipFile != null) {
Assert.assertTrue(zipFile.delete());
}
- if (dir != null) {
- FileUtils.deleteDir(dir);
- }
}
}
@SuppressWarnings("resource")
@Test
- public void testIncrementalStack() throws IOException, CannotCreateFileException,
- WrongPermissionException, CannotChangePermissionException, NoSuchFileException,
- FileAlreadyExistsException, ZipException, NotFileOrDirectoryException,
- CannotDeleteFileException, CannotCloseException, BadVFSFormatException {
+ public void testIncrementalStack()
+ throws IOException, CannotCreateFileException, WrongPermissionException,
+ CannotChangePermissionException, NoSuchFileException, FileAlreadyExistsException,
+ ZipException, NotFileOrDirectoryException, CannotDeleteFileException,
+ CannotCloseException, BadVFSFormatException, WrongVFSTypeException {
final VPath prefix = new VPath("pre", '/');
File inputZipFile = null;
File outputZipFile = null;
File dir = null;
try {
- inputZipFile = File.createTempFile("input", ".zip");
- dir = File.createTempFile("vfs", "dir");
- outputZipFile = File.createTempFile("output", ".zip");
+ inputZipFile = TestTools.createTempFile("input", ".zip");
+ dir = TestTools.createTempDir();
+ outputZipFile = TestTools.createTempFile("output", ".zip");
String dirPath = dir.getPath();
- Assert.assertTrue(dir.delete());
// fill up zip that will be used as input
{
@@ -847,7 +817,8 @@
ChangePermission.NOCHANGE, Compression.COMPRESSED),
/* numGroups = */ 1, /* groupSize = */ 2, new MessageDigestFactory(getSha1Service()),
/* debug = */ false);
- InputOutputVFS ioVFS1 = new GenericInputOutputVFS(new PrefixedFS(writeZipVFS, prefix));
+ InputOutputVFS ioVFS1 =
+ new GenericInputOutputVFS(new PrefixedFS(writeZipVFS, prefix, Existence.NOT_EXIST));
testOutputVFS(ioVFS1);
ioVFS1.close();
writeZipVFS.close();
@@ -855,9 +826,9 @@
// create Dir
VFS ciVFS = new CaseInsensitiveFS(
- new CachedDirectFS(new Directory(dirPath, null, Existence.NOT_EXIST, Permission.WRITE,
+ new CachedDirectFS(new Directory(dirPath, null, Existence.MUST_EXIST, Permission.WRITE,
ChangePermission.NOCHANGE), Permission.READ | Permission.WRITE));
- VFS prefixedFS1 = new PrefixedFS(ciVFS, prefix);
+ VFS prefixedFS1 = new PrefixedFS(ciVFS, prefix, Existence.NOT_EXIST);
prefixedFS1.close();
// create R/W output zip that uses as temp dir an UnionVFS between dir and read-only zip
@@ -873,30 +844,30 @@
VFS unionVFS = new UnionVFS(vfsList);
rwzfs.setWorkVFS(unionVFS);
}
- VFS prefixedFS = new PrefixedFS(rwzfs, prefix);
+ VFS prefixedFS = new PrefixedFS(rwzfs, prefix, Existence.MUST_EXIST);
testInputVFS(new GenericInputVFS(prefixedFS));
// write new stuff to R/W output zip
InputOutputVFS ioVFS = new GenericInputOutputVFS(prefixedFS);
- OutputVFile fileBA2 = ioVFS.getRootOutputVDir().createOutputVFile(
+ OutputVFile fileBA2 = ioVFS.getRootDir().createOutputVFile(
new VPath("dirB/dirBA/fileBA2", '/'));
writeToFile(fileBA2, "dirB/dirBA/fileBA2");
InputOutputVDir dirA =
- ioVFS.getRootInputOutputVDir().getInputVDir(new VPath("dirA", '/'));
+ ioVFS.getRootDir().getInputVDir(new VPath("dirA", '/'));
InputOutputVDir dirAA = dirA.getInputVDir(new VPath("dirAA", '/'));
InputOutputVDir dirAAB = (InputOutputVDir) dirAA.createOutputVDir(new VPath("dirAAB", '/'));
OutputVFile fileAAB2 = dirAAB.createOutputVFile(new VPath("fileAAB2", '/'));
writeToFile(fileAAB2, "dirA/dirAA/dirAAB/fileAAB2");
InputOutputVDir dirC =
- ioVFS.getRootInputOutputVDir().getInputVDir(new VPath("dirC", '/'));
+ ioVFS.getRootDir().getInputVDir(new VPath("dirC", '/'));
// write on top of an already existing file
OutputVFile fileC1 = dirC.getInputVFile(new VPath("fileC1", '/'));
writeToFile(fileC1, "dirC/fileC1v2");
// try deleting some old stuff from zip (which is not yet supported)
try {
- ioVFS.getRootInputOutputVDir().getInputVFile(new VPath("dirB/dirBB/fileBB1", '/'))
+ ioVFS.getRootDir().getInputVFile(new VPath("dirB/dirBB/fileBB1", '/'))
.delete();
Assert.fail();
} catch (UnionVFSReadOnlyException e) {
@@ -905,12 +876,12 @@
// read new stuff
InputVFS inputVFS = new GenericInputVFS(prefixedFS);
- InputVFile readFileC1 = inputVFS.getRootInputVDir().getInputVFile(
+ InputVFile readFileC1 = inputVFS.getRootDir().getInputVFile(
new VPath("dirC/fileC1", '/'));
Assert.assertEquals("dirC/fileC1v2", readFromFile(readFileC1));
Assert.assertTrue(
readFileC1.getPathFromRoot().equals(new VPath("dirC/fileC1", '/')));
- InputVDir readDirA = inputVFS.getRootInputVDir().getInputVDir(new VPath("dirA", '/'));
+ InputVDir readDirA = inputVFS.getRootDir().getInputVDir(new VPath("dirA", '/'));
InputVDir readDirAA = readDirA.getInputVDir(new VPath("dirAA", '/'));
InputVDir readDirAAB = readDirAA.getInputVDir(new VPath("dirAAB", '/'));
InputVFile readFileAAB2 = readDirAAB.getInputVFile(new VPath("fileAAB2", '/'));
@@ -929,12 +900,12 @@
// try to delete a file that is in the dir and the zip, then check that the one from the zip
// remains
- inputVFS.getRootInputVDir().getInputVFile(new VPath("dirC/fileC1", '/')).delete();
+ inputVFS.getRootDir().getInputVFile(new VPath("dirC/fileC1", '/')).delete();
Assert.assertEquals("dirC/fileC1", readFromFile(
- inputVFS.getRootInputVDir().getInputVFile(new VPath("dirC/fileC1", '/'))));
+ inputVFS.getRootDir().getInputVFile(new VPath("dirC/fileC1", '/'))));
// list contents of "dirB/dirBA", which has files in the dir and in the zip
- InputVDir dirBA = inputVFS.getRootInputVDir().getInputVDir(new VPath("dirB/dirBA", '/'));
+ InputVDir dirBA = inputVFS.getRootDir().getInputVDir(new VPath("dirB/dirBA", '/'));
Collection<? extends InputVElement> dirBAList = dirBA.list();
Assert.assertEquals(2, dirBAList.size());
for (InputVElement subElement : dirBAList) {
@@ -966,9 +937,6 @@
if (outputZipFile != null) {
Assert.assertTrue(outputZipFile.delete());
}
- if (dir != null) {
- FileUtils.deleteDir(dir);
- }
}
}
@@ -976,27 +944,27 @@
CannotCreateFileException, IOException, WrongPermissionException {
// create stuff from root dir
- InputOutputVDir dirA = (InputOutputVDir) outputVFS.getRootInputOutputVDir().createOutputVDir(
+ InputOutputVDir dirA = (InputOutputVDir) outputVFS.getRootDir().createOutputVDir(
new VPath("dirA", '/'));
- outputVFS.getRootInputOutputVDir().createOutputVDir(
+ outputVFS.getRootDir().createOutputVDir(
new VPath("dirB/dirBA", '/'));
OutputVFile file1 =
- outputVFS.getRootInputOutputVDir().createOutputVFile(new VPath("file1", '/'));
+ outputVFS.getRootDir().createOutputVFile(new VPath("file1", '/'));
writeToFile(file1, "file1");
OutputVFile fileA1 =
- outputVFS.getRootInputOutputVDir().createOutputVFile(new VPath("dirA/fileA1", '/'));
+ outputVFS.getRootDir().createOutputVFile(new VPath("dirA/fileA1", '/'));
writeToFile(fileA1, "dirA/fileA1");
OutputVFile fileB1 =
- outputVFS.getRootInputOutputVDir().createOutputVFile(new VPath("dirB/fileB1", '/'));
+ outputVFS.getRootDir().createOutputVFile(new VPath("dirB/fileB1", '/'));
writeToFile(fileB1, "dirB/fileB1");
OutputVFile fileBA1 =
- outputVFS.getRootInputOutputVDir().createOutputVFile(new VPath("dirB/dirBA/fileBA1", '/'));
+ outputVFS.getRootDir().createOutputVFile(new VPath("dirB/dirBA/fileBA1", '/'));
writeToFile(fileBA1, "dirB/dirBA/fileBA1");
OutputVFile fileBB1 =
- outputVFS.getRootInputOutputVDir().createOutputVFile(new VPath("dirB/dirBB/fileBB1", '/'));
+ outputVFS.getRootDir().createOutputVFile(new VPath("dirB/dirBB/fileBB1", '/'));
writeToFile(fileBB1, "dirB/dirBB/fileBB1");
OutputVFile fileC1 =
- outputVFS.getRootInputOutputVDir().createOutputVFile(new VPath("dirC/fileC1", '/'));
+ outputVFS.getRootDir().createOutputVFile(new VPath("dirC/fileC1", '/'));
writeToFile(fileC1, "dirC/fileC1");
// create stuff from dirA
@@ -1012,11 +980,11 @@
private void testInputVFS(@Nonnull InputVFS inputVFS) throws NoSuchFileException, IOException,
NotFileOrDirectoryException, WrongPermissionException {
- InputVFile file1 = inputVFS.getRootInputVDir().getInputVFile(new VPath("file1", '/'));
+ InputVFile file1 = inputVFS.getRootDir().getInputVFile(new VPath("file1", '/'));
Assert.assertEquals("file1", readFromFile(file1));
Assert.assertTrue(file1.getPathFromRoot().equals(new VPath("file1", '/')));
- InputVDir dirA = inputVFS.getRootInputVDir().getInputVDir(new VPath("dirA", '/'));
+ InputVDir dirA = inputVFS.getRootDir().getInputVDir(new VPath("dirA", '/'));
Collection<? extends InputVElement> dirAElements = dirA.list();
Assert.assertEquals(3, dirAElements.size());
Assert.assertTrue(containsFile(dirAElements, "fileA1", "dirA/fileA1"));
@@ -1024,18 +992,18 @@
Assert.assertTrue(containsDir(dirAElements, "dirAA"));
InputVFile fileAAB1 =
- inputVFS.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ inputVFS.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
Assert.assertEquals("dirA/dirAA/dirAAB/fileAAB1", readFromFile(fileAAB1));
Assert.assertTrue(
fileAAB1.getPathFromRoot().equals(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/')));
- InputVDir dirB = inputVFS.getRootInputVDir().getInputVDir(new VPath("dirB", '/'));
+ InputVDir dirB = inputVFS.getRootDir().getInputVDir(new VPath("dirB", '/'));
InputVDir dirBA = dirB.getInputVDir(new VPath("dirBA", '/'));
InputVFile fileBA1 = dirBA.getInputVFile(new VPath("fileBA1", '/'));
Assert.assertEquals("dirB/dirBA/fileBA1", readFromFile(fileBA1));
Assert.assertTrue(fileBA1.getPathFromRoot().equals(new VPath("dirB/dirBA/fileBA1", '/')));
- InputVDir dirBB = inputVFS.getRootInputVDir().getInputVDir(new VPath("dirB/dirBB", '/'));
+ InputVDir dirBB = inputVFS.getRootDir().getInputVDir(new VPath("dirB/dirBB", '/'));
InputVFile fileBB1 = dirBB.getInputVFile(new VPath("fileBB1", '/'));
Assert.assertEquals("dirB/dirBB/fileBB1", readFromFile(fileBB1));
Assert.assertTrue(fileBB1.getPathFromRoot().equals(new VPath("dirB/dirBB/fileBB1", '/')));
@@ -1050,7 +1018,7 @@
InputOutputVFS zipVFS = null;
InputVFS inputZipVFS = null;
try {
- file = File.createTempFile("vfs", ".zip");
+ file = TestTools.createTempFile("vfs", ".zip");
String path = file.getAbsolutePath();
Provider.Service sha1 = getSha1Service();
zipVFS = new GenericInputOutputVFS(new ReadWriteZipFS(
@@ -1073,9 +1041,6 @@
if (inputZipVFS != null) {
inputZipVFS.close();
}
- if (file != null) {
- Assert.assertTrue(file.delete());
- }
}
}
@@ -1083,12 +1048,13 @@
public void testDeflateFSWithMessageDigestFS()
throws CannotCreateFileException, WrongPermissionException, CannotChangePermissionException,
NoSuchFileException, FileAlreadyExistsException, IOException, CannotDeleteFileException,
- NotFileOrDirectoryException, ZipException, CannotCloseException, BadVFSFormatException {
+ NotFileOrDirectoryException, ZipException, CannotCloseException, BadVFSFormatException,
+ WrongVFSTypeException {
File file = null;
InputOutputVFS ioVFS1 = null;
InputVFS ioVFS2 = null;
try {
- file = File.createTempFile("vfs", ".zip");
+ file = TestTools.createTempFile("vfs", ".zip");
Provider.Service sha1 = getSha1Service();
@@ -1103,8 +1069,8 @@
testDelete(ioVFS1);
testInputVFS(ioVFS1);
InputVFile fileAAB1 =
- ioVFS1.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest = ((GenericInputVFile) fileAAB1).getDigest();
+ ioVFS1.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest = fileAAB1.getDigest();
Assert.assertNotNull(fileAAB1digest);
String vfsDigest = ioVFS1.getDigest();
Assert.assertNotNull(vfsDigest);
@@ -1116,8 +1082,8 @@
testInputVFS(ioVFS2);
InputVFile fileAAB1b =
- ioVFS2.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
- String fileAAB1digest2 = ((GenericInputVFile) fileAAB1b).getDigest();
+ ioVFS2.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ String fileAAB1digest2 = fileAAB1b.getDigest();
Assert.assertEquals(fileAAB1digest, fileAAB1digest2);
String vfsDigest2 = ioVFS2.getDigest();
Assert.assertEquals(vfsDigest, vfsDigest2);
@@ -1129,9 +1095,6 @@
if (ioVFS2 != null) {
ioVFS2.close();
}
- if (file != null) {
- Assert.assertTrue(file.delete());
- }
}
}
@@ -1140,12 +1103,12 @@
CannotCreateFileException, IOException, WrongPermissionException {
// let's delete "dirA/dirAA/dirAAB/fileAAB1"
- InputOutputVDir dirA = ioVFS.getRootInputOutputVDir().getInputVDir(new VPath("dirA", '/'));
+ InputOutputVDir dirA = ioVFS.getRootDir().getInputVDir(new VPath("dirA", '/'));
{
InputOutputVFile fileAAB1 = dirA.getInputVFile(new VPath("dirAA/dirAAB/fileAAB1", '/'));
fileAAB1.delete();
try {
- ioVFS.getRootInputVDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
+ ioVFS.getRootDir().getInputVFile(new VPath("dirA/dirAA/dirAAB/fileAAB1", '/'));
Assert.fail();
} catch (NoSuchFileException e) {
// expected
@@ -1154,12 +1117,12 @@
// let's delete "dirB/dirBB/fileBB1"
InputOutputVDir dirBB =
- ioVFS.getRootInputOutputVDir().getInputVDir(new VPath("dirB/dirBB", '/'));
+ ioVFS.getRootDir().getInputVDir(new VPath("dirB/dirBB", '/'));
{
InputOutputVFile fileBB1 = dirBB.getInputVFile(new VPath("fileBB1", '/'));
fileBB1.delete();
try {
- ioVFS.getRootInputVDir().getInputVFile(new VPath("dirB/dirBB/fileBB1", '/'));
+ ioVFS.getRootDir().getInputVFile(new VPath("dirB/dirBB/fileBB1", '/'));
Assert.fail();
} catch (NoSuchFileException e) {
// expected
@@ -1168,11 +1131,11 @@
// let's delete "dirC/fileC1"
{
- InputOutputVFile fileC1 = ioVFS.getRootInputOutputVDir().getInputVFile(
+ InputOutputVFile fileC1 = ioVFS.getRootDir().getInputVFile(
new VPath("dirC/fileC1", '/'));
fileC1.delete();
try {
- ioVFS.getRootInputVDir().getInputVFile(new VPath("dirC/fileC1", '/'));
+ ioVFS.getRootDir().getInputVFile(new VPath("dirC/fileC1", '/'));
Assert.fail();
} catch (NoSuchFileException e) {
// expected
@@ -1186,7 +1149,7 @@
OutputVFile fileBB1 = dirBB.createOutputVFile(new VPath("fileBB1", '/'));
writeToFile(fileBB1, "dirB/dirBB/fileBB1");
OutputVFile fileC1 =
- ioVFS.getRootInputOutputVDir().createOutputVFile(new VPath("dirC/fileC1", '/'));
+ ioVFS.getRootDir().createOutputVFile(new VPath("dirC/fileC1", '/'));
writeToFile(fileC1, "dirC/fileC1");
}
}
@@ -1195,14 +1158,14 @@
private void checkFileLocations(@Nonnull InputVFS inputVFS) throws NotFileOrDirectoryException,
NoSuchFileException {
VPath fileAAB1Path = new VPath("dirA/dirAA/dirAAB/fileAAB1", '/');
- InputVFile fileAAB1 = inputVFS.getRootInputVDir().getInputVFile(fileAAB1Path);
+ InputVFile fileAAB1 = inputVFS.getRootDir().getInputVFile(fileAAB1Path);
FileLocation fileAAB1Location = (FileLocation) fileAAB1.getLocation();
Assert.assertTrue(fileAAB1Location.getDescription().contains("file"));
Assert.assertTrue(fileAAB1Location.getDescription().contains(
fileAAB1Path.getPathAsString(File.separatorChar)));
VPath dirBBPath = new VPath("dirB/dirBB", '/');
- InputVDir dirBB = inputVFS.getRootInputVDir().getInputVDir(dirBBPath);
+ InputVDir dirBB = inputVFS.getRootDir().getInputVDir(dirBBPath);
DirectoryLocation dirBBLocation = (DirectoryLocation) dirBB.getLocation();
Assert.assertTrue(dirBBLocation.getDescription().contains("directory"));
Assert.assertTrue(dirBBLocation.getDescription().contains(
@@ -1212,14 +1175,14 @@
private void checkZipLocations(@Nonnull InputVFS inputVFS, @CheckForNull String prefix)
throws NotFileOrDirectoryException, NoSuchFileException {
VPath fileAAB1Path = new VPath("dirA/dirAA/dirAAB/fileAAB1", '/');
- InputVFile fileAAB1 = inputVFS.getRootInputVDir().getInputVFile(fileAAB1Path);
+ InputVFile fileAAB1 = inputVFS.getRootDir().getInputVFile(fileAAB1Path);
ZipLocation fileAAB1Location = (ZipLocation) fileAAB1.getLocation();
Assert.assertTrue(fileAAB1Location.getDescription().contains(".zip"));
String fileAAB1EntryName = getEntryName(fileAAB1Path, prefix, false);
Assert.assertTrue(fileAAB1Location.getDescription().contains(fileAAB1EntryName));
VPath dirBBPath = new VPath("dirB/dirBB", '/');
- InputVDir dirBB = inputVFS.getRootInputVDir().getInputVDir(dirBBPath);
+ InputVDir dirBB = inputVFS.getRootDir().getInputVDir(dirBBPath);
ZipLocation dirBBLocation = (ZipLocation) dirBB.getLocation();
Assert.assertTrue(dirBBLocation.getDescription().contains(".zip"));
String dirBBEntryName = getEntryName(dirBBPath, prefix, true);
diff --git a/server/jack-launcher/src/com/android/jack/launcher/ServerLauncher.java b/server/jack-launcher/src/com/android/jack/launcher/ServerLauncher.java
index 4fed930..6257d3e 100644
--- a/server/jack-launcher/src/com/android/jack/launcher/ServerLauncher.java
+++ b/server/jack-launcher/src/com/android/jack/launcher/ServerLauncher.java
@@ -510,10 +510,17 @@
}
tmpInstall = null;
- File replacedServerJar = getServerJar(serverDir, currentServerInfo.id);
+ final File replacedServerJar = getServerJar(serverDir, currentServerInfo.id);
assert currentServer != null;
- finalizer.registerFinalizer(new Deleter(new File[]{replacedServerJar}),
- currentServer.getClass().getClassLoader());
+ final ClassLoader serverClassLoader = currentServer.getClass().getClassLoader();
+ taskRunner.executeTask("Register deleter of '" + replacedServerJar.getPath() + "'",
+ new Runnable() {
+ @Override
+ public void run() {
+ finalizer.registerFinalizer(new Deleter(new File[]{replacedServerJar}),
+ serverClassLoader);
+ }
+ });
currentServerInfo = new ServerInfo(newServerId, candidateVersion);
} finally {
if (out != null) {
diff --git a/server/jack-server/etc/jack-admin b/server/jack-server/etc/jack-admin
index 0209ffc..d7fb11b 100755
--- a/server/jack-server/etc/jack-admin
+++ b/server/jack-server/etc/jack-admin
@@ -606,11 +606,21 @@
echo "\$ lsof -i TCP:$SERVER_PORT_SERVICE -l" >>"$REPORT_INFO"
lsof -i TCP:$SERVER_PORT_SERVICE -l >>"$REPORT_INFO" 2>&1
+ echo "Test if Jack server service port $SERVER_PORT_SERVICE is open..."
+ echo >>"$REPORT_INFO"
+ echo "\$ if (exec 6<> /dev/tcp/127.0.0.1/$SERVER_PORT_SERVICE) 2> /dev/null ; then echo port $SERVER_PORT_SERVICE is in use; else echo port $SERVER_PORT_SERVICE is available; fi" >>"$REPORT_INFO"
+ (if (exec 6<> /dev/tcp/127.0.0.1/$SERVER_PORT_SERVICE) 2> /dev/null ; then echo port $SERVER_PORT_SERVICE is in use; else echo port $SERVER_PORT_SERVICE is available; fi) >>"$REPORT_INFO" 2>&1
+
echo "Listing process using Jack server admin port $SERVER_PORT_ADMIN..."
echo >>"$REPORT_INFO"
echo "\$ lsof -i TCP:$SERVER_PORT_ADMIN -l" >>"$REPORT_INFO"
lsof -i TCP:$SERVER_PORT_ADMIN -l >>"$REPORT_INFO" 2>&1
+ echo "Test if Jack server admin port $SERVER_PORT_ADMIN is open..."
+ echo >>"$REPORT_INFO"
+ echo "\$ if (exec 6<> /dev/tcp/127.0.0.1/$SERVER_PORT_ADMIN) 2> /dev/null ; then echo port $SERVER_PORT_ADMIN is in use; else echo port $SERVER_PORT_ADMIN is available; fi" >>"$REPORT_INFO"
+ (if (exec 6<> /dev/tcp/127.0.0.1/$SERVER_PORT_ADMIN) 2> /dev/null ; then echo port $SERVER_PORT_ADMIN is in use; else echo port $SERVER_PORT_ADMIN is available; fi) >>"$REPORT_INFO" 2>&1
+
echo "Collecting Jack client configuration..."
echo >>"$REPORT_INFO"
echo "\$ cat \"\$JACK_CLIENT_SETTING\"" >>"$REPORT_INFO"
diff --git a/server/jack-server/etc/jack-diagnose b/server/jack-server/etc/jack-diagnose
index 04adc07..45dff60 100755
--- a/server/jack-server/etc/jack-diagnose
+++ b/server/jack-server/etc/jack-diagnose
@@ -89,7 +89,7 @@
fi
- JAVA_VERSION=$("$JAVA_COMMAND" -version 2>&1 | head -1 | grep --only-matching -e \"1\\.[0-9]* | cut -c 4-)
+ JAVA_VERSION=$(unset _JAVA_OPTIONS && unset JAVA_TOOL_OPTIONS && "$JAVA_COMMAND" -version 2>&1 | head -1 | grep --only-matching -e \"1\\.[0-9]* | cut -c 4-)
if [ -z "$JAVA_VERSION" ] ; then
echo "'$JAVA_COMMAND': Failed to parse version, please ensure you're running a supported java"
return 255
@@ -127,6 +127,10 @@
checkport() {
PID_USING_PORT=$(lsof -F p -i TCP:$1 -sTCP:LISTEN | cut -c 2-)
if [ -z "$PID_USING_PORT" ] ; then
+ if (exec 6<> /dev/tcp/127.0.0.1/$1) 2> /dev/null ; then
+ echo "Port $1 is used by a process owned by another user. Unless this is expected, please ensure the port is free or change port configuration in '$JACK_CLIENT_SETTING' and '$JACK_HOME/config.properties'"
+ return 255
+ fi
# port is free nothing to check
return 0
fi
@@ -143,7 +147,7 @@
fi
if [ "$(echo $PS_OUT | awk '{print $2}')" -ne "$(id -u)" ] ; then
- echo "Port $1 is used b a Jack server from another user uid=$(echo $PS_OUT | awk '{print $2}'), please change port configuration in '$JACK_CLIENT_SETTING' and '$JACK_HOME/config.properties'"
+ echo "Port $1 is used by a Jack server from another user uid=$(echo $PS_OUT | awk '{print $2}'), please change port configuration in '$JACK_CLIENT_SETTING' and '$JACK_HOME/config.properties'"
return 255
fi
}
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..69c76c8
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+rootProject.name = 'Jack'
+
+include ':args4j'
+//include ':core-stubs-mini'
+include ':ddmlib'
+include ':dexcomparator'
+include ':dexlib'
+include ':dx-ref'
+include ':ecj'
+include ':ecj-tests-lib'
+include ':jack'
+include ':jack:jack-annotations'
+include ':jack-api'
+include ':jack-api:sample'
+include ':jack:jackunittests'
+include ':jack-jar-tools'
+include ':jack-tests'
+include ':jack-tests:test-lib'
+include ':jarjar'
+include ':jill'
+include ':jill-api'
+include ':sched'
+include ':sched:sched-ap'
+include ':sched:schedtests'