Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.osee.define/src/org')
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java70
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java38
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java54
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java33
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java43
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java40
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java181
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java31
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java31
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java70
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java26
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java670
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java695
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java207
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java41
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java126
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java49
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java17
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java37
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java30
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java91
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java53
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java189
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java62
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java82
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java100
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java40
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java23
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java136
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java174
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java244
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java249
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java145
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java71
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java164
-rw-r--r--org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java126
36 files changed, 4438 insertions, 0 deletions
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java
new file mode 100644
index 00000000000..de04318572a
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define;
+
+import org.eclipse.osee.define.navigate.DefineNavigateView;
+import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchView;
+import org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView;
+import org.eclipse.osee.framework.ui.skynet.queryLog.QueryLogView;
+import org.eclipse.osee.framework.ui.skynet.search.QuickSearchView;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+/**
+ * Perspective factory for the Define perspective. This sets up the initial layout and placeholders for views.
+ *
+ * @author Robert A. Fisher
+ */
+public class DefinePerspectiveFactory implements IPerspectiveFactory {
+
+ public void createInitialLayout(IPageLayout layout) {
+ // Get the editor area.
+ String editorArea = layout.getEditorArea();
+
+ // Add views to Window -> Show View
+ layout.addShowViewShortcut(ArtifactExplorer.VIEW_ID);
+ layout.addShowViewShortcut(BranchView.VIEW_ID);
+ layout.addShowViewShortcut(QueryLogView.VIEW_ID);
+ layout.addShowViewShortcut(QuickSearchView.VIEW_ID);
+ layout.addShowViewShortcut(DefineNavigateView.VIEW_ID);
+ layout.addShowViewShortcut("org.eclipse.pde.runtime.LogView");
+
+ // Top left: Artifact Explorer
+ IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f, editorArea);
+ topLeft.addView(ArtifactExplorer.VIEW_ID);
+ topLeft.addView(DefineNavigateView.VIEW_ID);
+
+ IFolderLayout lower = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.65f, editorArea);
+ lower.addView(BranchView.VIEW_ID);
+ lower.addPlaceholder(RevisionHistoryView.VIEW_ID);
+ lower.addPlaceholder(NewSearchUI.SEARCH_VIEW_ID);
+ lower.addPlaceholder("org.eclipse.pde.runtime.LogView");
+
+ IFolderLayout underLower = layout.createFolder("underBottom", IPageLayout.BOTTOM, .75f, "bottom");
+ underLower.addView(QuickSearchView.VIEW_ID);
+
+ // The following is some sample code that can be used for future reference for other areas and
+ // placeholders ...
+ // topLeft.addPlaceholder(IPageLayout.ID_BOOKMARKS);
+ //
+ // // Bottom left: Outline view and Property Sheet view
+ // IFolderLayout bottomLeft = layout.createFolder("bottomLeft", IPageLayout.BOTTOM, 0.50f,
+ // "topLeft");
+ // bottomLeft.addView(IPageLayout.ID_OUTLINE);
+ // bottomLeft.addView(IPageLayout.ID_PROP_SHEET);
+ //
+ // // Bottom right: Task List view
+ // layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.66f, editorArea);
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java
new file mode 100644
index 00000000000..7715bea43e7
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define;
+
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+
+public class DefinePlugin extends OseeUiActivator {
+ private static DefinePlugin pluginInstance; // The shared instance.
+ public static final String PLUGIN_ID = "org.eclipse.osee.define";
+
+ public DefinePlugin() {
+ super();
+ pluginInstance = this;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.jdk.core.util.plugin.OseePlugin#getPluginName()
+ */
+ @Override
+ protected String getPluginName() {
+ return PLUGIN_ID;
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static DefinePlugin getInstance() {
+ return pluginInstance;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java
new file mode 100644
index 00000000000..07f4e13e971
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.artifact;
+
+import java.io.CharArrayReader;
+import java.nio.CharBuffer;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+import javax.xml.transform.stream.StreamSource;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+
+public class Resolver implements URIResolver {
+ private static final OseeUiActivator plugin = DefinePlugin.getInstance();
+ private static final CharBuffer xslAuxiliary = plugin.getCharBuffer("support/xslt/auxiliary.xsl");
+ private static final CharBuffer xslProperties = plugin.getCharBuffer("support/xslt/elementProperties.xsl");
+ private static final CharBuffer xslStructure = plugin.getCharBuffer("support/xslt/elementStructure.xsl");
+ private static final CharBuffer xslPageLayout = plugin.getCharBuffer("support/xslt/pageLayout.xsl");
+ private static final CharBuffer xslProfile = plugin.getCharBuffer("support/xslt/profile.xsl");
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.xml.transform.URIResolver#resolve(java.lang.String, java.lang.String)
+ */
+ public Source resolve(String href, String base) throws TransformerException {
+ CharBuffer rightOne = null;
+ if (href.equals("auxiliary.xsl")) {
+ rightOne = xslAuxiliary;
+ }
+ if (href.equals("elementProperties.xsl")) {
+ rightOne = xslProperties;
+ }
+ if (href.equals("elementStructure.xsl")) {
+ rightOne = xslStructure;
+ }
+ if (href.equals("pageLayout.xsl")) {
+ rightOne = xslPageLayout;
+ }
+ if (href.equals("profile.xsl")) {
+ rightOne = xslProfile;
+ }
+ return new StreamSource(new CharArrayReader(rightOne.array()));
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java
new file mode 100644
index 00000000000..301ff971b99
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.artifact;
+
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Spreadsheet extends Artifact {
+
+ /**
+ * @param parentFactory
+ * @param guid
+ * @param humanReadableId
+ * @param branch
+ */
+ public Spreadsheet(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) {
+ super(parentFactory, guid, humanReadableId, branch, artifactType);
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java
new file mode 100644
index 00000000000..a53ab296513
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.artifact;
+
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class SpreadsheetArtifactFactory extends ArtifactFactory {
+ private static SpreadsheetArtifactFactory factory = null;
+
+ private SpreadsheetArtifactFactory(int factoryId) {
+ super(factoryId);
+ }
+
+ public static SpreadsheetArtifactFactory getInstance(int factoryId) {
+ if (factory == null) {
+ factory = new SpreadsheetArtifactFactory(factoryId);
+ }
+ return factory;
+ }
+
+ public static SpreadsheetArtifactFactory getInstance() {
+ return factory;
+ }
+
+ @Override
+ public Spreadsheet getArtifactInstance(String guid, String humandReadableId, String factoryKey, Branch branch, ArtifactType artifactType) throws OseeCoreException {
+ return new Spreadsheet(this, guid, humandReadableId, branch, artifactType);
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java
new file mode 100644
index 00000000000..b2223d10a17
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class AddEveryoneGroupToBranches extends AbstractBlam {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ for (Branch brnch : BranchManager.getNormalBranches()) {
+
+ if (!AccessControlManager.getInstance().getAccessControlList(brnch).isEmpty()) {
+ Artifact everyone =
+ ArtifactQuery.getArtifactFromAttribute("Name", "Everyone", BranchManager.getCommonBranch());
+ AccessControlManager.getInstance().setPermission(everyone, brnch, PermissionEnum.READ);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java
new file mode 100644
index 00000000000..d164a0876dd
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Changes the descriptor type of an artifact to the provided descriptor.
+ *
+ * @author Jeff C. Phillips
+ */
+public class ChangeArtifactType extends AbstractBlam {
+ private List<Attribute<?>> attributesToPurge;
+ private List<RelationLink> relationsToDelete;
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ processChange(variableMap.getArtifacts("artifacts"),
+ variableMap.getArtifactType("New Artifact Type"));
+ }
+
+ /**
+ * Changes the descriptor of the artifacts to the provided artifact descriptor
+ *
+ * @param artifacts
+ * @param descriptor
+ */
+ private void processChange(List<Artifact> artifacts, ArtifactType descriptor) throws Exception {
+ if (artifacts.isEmpty()) {
+ throw new IllegalArgumentException("The artifact list can not be empty");
+ }
+
+ for (Artifact artifact : artifacts) {
+ processAttributes(artifact, descriptor);
+ processRelations(artifact, descriptor);
+
+ if (doesUserAcceptArtifactChange(artifact, descriptor)) {
+ changeArtifactType(artifact, descriptor);
+ }
+ }
+
+ // Kick Local and Remote Events
+ OseeEventManager.kickArtifactsChangeTypeEvent(this, descriptor.getArtTypeId(), new LoadedArtifacts(artifacts));
+ }
+
+ /**
+ * Splits the attributes of the current artifact into two groups. The attributes that are compatable for the new type
+ * and the attributes that will need to be purged.
+ *
+ * @param artifact
+ * @param descriptor
+ */
+ private void processAttributes(Artifact artifact, ArtifactType descriptor) throws OseeCoreException {
+ attributesToPurge = new LinkedList<Attribute<?>>();
+
+ Collection<AttributeType> attributeTypes =
+ TypeValidityManager.getAttributeTypesFromArtifactType(descriptor, artifact.getBranch());
+
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ if (!attributeTypes.contains(attributeType)) {
+ attributesToPurge.addAll(artifact.getAttributes(attributeType.getName()));
+ }
+ }
+ }
+
+ /**
+ * Splits the relationLinks of the current artifact into Two groups. The links that are compatable for the new type
+ * and the links that will need to be pruged.
+ *
+ * @param artifact
+ * @param artifactType
+ */
+ private void processRelations(Artifact artifact, ArtifactType artifactType) {
+ relationsToDelete = new LinkedList<RelationLink>();
+
+ for (RelationLink link : artifact.getRelationsAll(false)) {
+ if (RelationTypeManager.getRelationSideMax(link.getRelationType(), artifactType, link.getSide(artifact)) == 0) {
+ relationsToDelete.add(link);
+ }
+ }
+ }
+
+ /**
+ * @param artifact
+ * @param descriptor
+ * @return true if the user accepts the purging of the attributes and relations that are not compatible for the new
+ * artifact type else false.
+ */
+ private boolean doesUserAcceptArtifactChange(final Artifact artifact, final ArtifactType descriptor) {
+ if (!relationsToDelete.isEmpty() || !attributesToPurge.isEmpty()) {
+ ArtifactChangeMessageRunnable messageRunnable = new ArtifactChangeMessageRunnable(artifact, descriptor);
+ Displays.ensureInDisplayThread(messageRunnable, true);
+ return messageRunnable.isAccept();
+ } else {
+ return true;
+ }
+ }
+
+ private class ArtifactChangeMessageRunnable implements Runnable {
+ private boolean accept = false;
+ private final Artifact artifact;
+ private final ArtifactType descriptor;
+
+ public ArtifactChangeMessageRunnable(Artifact artifact, ArtifactType descriptor) {
+ this.artifact = artifact;
+ this.descriptor = descriptor;
+ }
+
+ public void run() {
+ accept =
+ MessageDialog.openQuestion(
+ Display.getCurrent().getActiveShell(),
+ "Confirm Artifact Type Change ",
+ "There has been a conflict in changing " + artifact.getDescriptiveName() + " to " + descriptor.getName() + " type. \n" + "The following data will need to be purged " + (relationsToDelete.isEmpty() ? "" : Collections.toString(
+ relationsToDelete, ":", ",", null)) + (attributesToPurge.isEmpty() ? "" : Collections.toString(
+ attributesToPurge, ":", ",", null)));
+ }
+
+ /**
+ * @return Returns the accept.
+ */
+ public boolean isAccept() {
+ return accept;
+ }
+ };
+
+ /**
+ * Sets the artifact descriptor.
+ *
+ * @param artifact
+ * @param descriptor
+ * @throws OseeCoreException
+ */
+ private void changeArtifactType(Artifact artifact, ArtifactType descriptor) throws OseeCoreException {
+ for (Attribute<?> attribute : attributesToPurge) {
+ attribute.purge();
+ }
+
+ for (RelationLink relation : relationsToDelete) {
+ relation.delete(true);
+ }
+
+ artifact.changeArtifactType(descriptor);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ @Override
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XListDropViewer\" displayName=\"artifacts\" /><XWidget xwidgetType=\"XArtifactTypeListViewer\" displayName=\"New Artifact Type\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java
new file mode 100644
index 00000000000..da8397c2f9f
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class CheckValidArtifactTypes extends CheckValidType {
+ private static final String CHECK_SQL =
+ "SELECT t1.*, t3.gamma_id, t4.* FROM osee_artifact t1, osee_artifact_version t2, osee_txs t3, osee_tx_details t4 WHERE t1.art_id = t2.art_id AND t2.gamma_id = t3.gamma_id AND t3.transaction_id = t4.transaction_id AND NOT EXISTS (SELECT 'x' FROM osee_artifact_type t5, osee_txs t6, osee_tx_details t7 WHERE t5.gamma_id = t6.gamma_id AND t6.transaction_id = t7.transaction_id AND t4.branch_id = t7.branch_id AND t1.art_type_id = t5.art_type_id)";
+
+ /**
+ * @param sql
+ * @param headers
+ * @param colNames
+ * @param logger
+ */
+ public CheckValidArtifactTypes() {
+ super(CHECK_SQL, new String[] {"art_id", "gamma_id", "transaction_id", "branch_id"}, new String[] {"Art ID",
+ "Gamma ID", "Transaction ID", "Branch ID"});
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java
new file mode 100644
index 00000000000..5184173b203
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class CheckValidAttributeTypes extends CheckValidType {
+ private static final String CHECK_SQL =
+ "SELECT t2.*, t4.*, t10.guid, t10.human_readable_id, t10.art_type_id " + "FROM osee_attribute t2, " + "osee_txs t3, " + "osee_tx_details t4, " + "osee_artifact t10 " + "WHERE t2.gamma_id = t3.gamma_id " + "and t10.art_id = t2.art_id " + "AND t3.transaction_id = t4.transaction_id " + "AND NOT EXISTS " + "(SELECT 'x' " + "FROM osee_attribute_type t5, " + "osee_txs t6, " + "osee_tx_details t7 " + "WHERE t5.gamma_id = t6.gamma_id " + "AND t6.transaction_id = t7.transaction_id " + "AND t4.branch_id = t7.branch_id " + "AND t2.attr_type_id = t5.attr_type_id) order by attr_id";
+
+ /**
+ * @param sql
+ * @param headers
+ * @param colNames
+ * @param logger
+ */
+ public CheckValidAttributeTypes() {
+ super(CHECK_SQL, new String[] {"art_id", "attr_id", "attr_type_id", "gamma_id", "transaction_id", "branch_id"},
+ new String[] {"Art ID", "Attr ID", "Art Type ID", "Gamma ID", "Transaction ID", "Branch ID"});
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java
new file mode 100644
index 00000000000..e2497d8c11f
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.TimeZone;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.ConnectionHandler;
+import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement;
+import org.eclipse.osee.framework.jdk.core.util.AHTML;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations;
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class CheckValidType extends AbstractBlam {
+ private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy HH:mm");
+ private final String sql;
+ private final String[] headers;
+ private final String[] colNames;
+
+ /**
+ * @param sql
+ */
+ public CheckValidType(final String sql, final String[] colNames, final String[] headers) {
+ super();
+ this.sql = sql;
+ this.headers = headers;
+ this.colNames = colNames;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement();
+ try {
+ chStmt.runPreparedQuery(sql);
+ Calendar cal = Calendar.getInstance(TimeZone.getDefault());
+ List<String> datas = new LinkedList<String>();
+ XResultData rd = new XResultData();
+ int count = 0;
+ while (chStmt.next()) {
+ for (String colName : colNames) {
+ datas.add(chStmt.getString(colName));
+ }
+ count++;
+ }
+ rd.addRaw("Results: " + count + "<br></br>Date: " + dateFormat.format(cal.getTime()) + "<br></br><br></br>" + AHTML.createTable(
+ datas, headers, headers.length, 1, 3));
+ rd.report("The report", Manipulations.RAW_HTML);
+ } finally {
+ chStmt.close();
+ }
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java
new file mode 100644
index 00000000000..cb469de7be0
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ExperimentalBlam extends AbstractBlam {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java
new file mode 100644
index 00000000000..fafa9c56ba6
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java
@@ -0,0 +1,670 @@
+/*
+ * Created on Jun 13, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.define.blam.operation;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Gamma1 {
+
+ public static void main(String[] args) {
+ Set<Integer> gammas = new HashSet<Integer>();
+ for (int i : gammaIds1) {
+ gammas.add(i);
+ }
+ for (int i : Gamma2.gammaIds2) {
+ gammas.add(i);
+ }
+ System.out.println(gammas.size());
+ System.out.println(Arrays.deepToString(gammas.toArray()));
+ }
+
+ public static final int[] gammaIds1 =
+ new int[] {177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 1806392, 177463, 177463,
+ 177463, 177463, 177463, 177463, 852190, 1311395, 177463, 177463, 177463, 177463, 1508988, 1508988,
+ 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 852190, 852190,
+ 2078494, 1575288, 1575288, 1575288, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494, 1575288,
+ 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 2078494, 1575288, 1575288, 2078494, 2078494,
+ 2078494, 1575288, 1575288, 2078494, 2078494, 1575288, 2078494, 2078494, 2078494, 1575288, 1575288,
+ 177463, 1575288, 1575288, 2078494, 2078494, 1575288, 1575288, 1575288, 1575288, 2078494, 1575288,
+ 1575288, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 1575288, 2078494, 2078494, 1575288, 2078494, 2078494, 2078494, 2078494,
+ 1575288, 2078494, 2078494, 1575288, 1575288, 2078494, 2078494, 1575288, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 2078494, 2078494, 1575288, 2078494, 1575288, 2078494, 1575288, 2078494,
+ 2078494, 1575288, 1575288, 1575288, 2078494, 1575288, 1575288, 2078494, 2078494, 2078494, 1575288,
+ 2078494, 1575288, 2078494, 1575288, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 1575288,
+ 1575288, 2078494, 2078494, 2078494, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494,
+ 1575288, 2078494, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494, 1575288, 1575288,
+ 2078494, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288,
+ 1575288, 1575288, 1575288, 1575288, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494,
+ 1575288, 2078494, 1575288, 2078494, 2078494, 2078494, 1575288, 1575288, 1575288, 1575288, 2078494,
+ 1575288, 2078494, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 2078494, 1575288, 2078494,
+ 1575288, 2078494, 1575288, 1575288, 1575288, 177454, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 177454, 1806392, 1806392,
+ 177454, 177454, 1806392, 177454, 177454, 1806392, 1806392, 1806392, 177454, 1806392, 1806247, 1806392,
+ 177454, 177454, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1575288, 1806392, 1806392, 1806392, 1575288, 1575288, 1806392, 1806392,
+ 1806392, 1575288, 1806392, 1806392, 1575288, 1575288, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1575288, 1575288, 1806392, 1806392, 1806392, 1806392, 1806392, 852191, 1806392, 1575288, 1806392,
+ 1575288, 852191, 1575288, 1575288, 1806392, 1806392, 1806392, 1806392, 1575288, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1806392, 1806392, 1575288, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1575288, 1806392, 1806392, 1806392, 177454, 1806392, 1806392, 177454, 177454, 1806392, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1806392, 177454, 177454, 177454, 177454, 1806392, 1806392, 177454, 177454,
+ 1806392, 1806392, 177454, 177454, 177454, 177454, 177454, 177454, 1806392, 1508988, 1806392, 1806392,
+ 1806392, 177454, 177454, 177454, 1508988, 1508988, 177454, 177454, 1508988, 1806392, 1508988, 177454,
+ 1806392, 177454, 1806392, 177454, 177454, 177454, 177454, 1806392, 177454, 1806392, 177454, 1806392,
+ 177454, 177454, 1806392, 1806392, 1806392, 177454, 177454, 1806392, 1806392, 1806392, 177454, 1806392,
+ 177454, 177454, 1806392, 177454, 177454, 1806392, 177454, 1806392, 177454, 1806392, 1806392, 177454,
+ 852191, 177454, 1806392, 177454, 1806392, 1806392, 177463, 1508988, 177463, 177463, 1508988, 177463,
+ 177463, 1508988, 1508988, 1508988, 1508988, 177463, 177454, 177463, 1508988, 177463, 1508988, 177463,
+ 177463, 1508988, 1508988, 1508988, 177463, 177463, 177463, 177463, 1508988, 1508988, 1508988, 177463,
+ 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1575288, 1508988, 1508988, 1508988,
+ 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988,
+ 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 177463, 1508988,
+ 177463, 177463, 1508988, 1508988, 1508988, 1508988, 1508988, 1806454, 1508988, 1508988, 177463, 177463,
+ 1508988, 1508988, 1508988, 177463, 177463, 177463, 1508988, 177463, 177463, 177463, 1508988, 1508988,
+ 177463, 177463, 177463, 1508988, 177454, 177463, 1508988, 177463, 177463, 177463, 177463, 1508988,
+ 1508988, 177454, 1508988, 177463, 177463, 177463, 177463, 1508988, 1508988, 1508988, 177463, 1508988,
+ 177463, 177463, 1508988, 1508988, 177463, 177463, 177463, 177463, 177463, 1508988, 177463, 177463,
+ 177463, 1508988, 1508988, 1508988, 177463, 1508988, 1508988, 1508988, 177463, 177463, 177463, 177463,
+ 177463, 1508988, 177463, 177463, 1508988, 1508988, 177463, 1508988, 1508988, 1508988, 1508988, 177463,
+ 177463, 177463, 1508988, 1508988, 177463, 1508988, 177463, 1508988, 177463, 1508988, 1508988, 177463,
+ 177463, 177463, 177463, 177463, 1508988, 1508988, 1508988, 177463, 1508988, 177463, 1508988, 177463,
+ 1508988, 177463, 1508988, 1508988, 177463, 177463, 1508988, 177463, 177463, 1508988, 1508988, 1508988,
+ 1508988, 177463, 1508988, 177463, 177463, 1508988, 1508988, 177463, 177463, 177463, 177463, 1508988,
+ 177463, 177463, 1508988, 177463, 1508988, 177463, 177463, 177463, 1508988, 1508988, 1508988, 1806446,
+ 1806418, 1806418, 1806446, 1806418, 1806446, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446,
+ 1806446, 1806446, 1806446, 1806418, 1806446, 1806446, 1806418, 1806446, 1806418, 1806446, 1806446,
+ 1806446, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446, 1806418, 1806418, 1806446, 1806446,
+ 1806418, 1806418, 1806446, 1806418, 1806418, 1806446, 1806418, 1806418, 1806418, 1806418, 1806418,
+ 1806418, 1806418, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446, 1806446, 1806418, 1806418,
+ 1806446, 1806418, 1806418, 1806446, 1806418, 1806446, 1806446, 1806446, 1806446, 1806446, 1806446,
+ 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806418, 1806446, 1806418, 1806446, 1806418,
+ 1806446, 1806418, 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806446, 1806418, 1806418,
+ 1806446, 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806446, 1806446, 1806418, 1806446,
+ 1806418, 1806418, 1806418, 1806446, 1806418, 1806446, 1806446, 1806446, 1806446, 1806418, 1806418,
+ 1806446, 1806418, 1806418, 1806418, 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806418,
+ 1806446, 1806446, 1806418, 1806418, 177453, 1806418, 1806418, 177453, 1806418, 1806418, 1806418, 177453,
+ 1806418, 177453, 1806418, 177453, 177453, 1806418, 177453, 177453, 1806418, 177453, 1806418, 177453,
+ 1806422, 177453, 177453, 1806418, 177453, 1806446, 177453, 1806418, 1806418, 177453, 1806446, 1806418,
+ 1806446, 1806446, 177453, 177453, 1806418, 1806418, 1806418, 177453, 1806418, 1806418, 1806418, 177453,
+ 1806418, 1806485, 177453, 1806418, 1806418, 1806485, 1806485, 1806418, 177453, 177453, 1806485, 177453,
+ 1806485, 1806418, 1806418, 177453, 1806485, 177453, 177453, 177453, 1806485, 177453, 1806485, 1806418,
+ 1806485, 177453, 1806418, 1806485, 177453, 1806418, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 177453, 1806418, 177453, 1806418, 1806418, 1806418, 1806418, 1806418, 1806418, 1806446, 1806418,
+ 1806446, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446, 1806446, 1806446, 1806446, 177453,
+ 177453, 1806446, 177453, 177453, 177453, 177453, 1806446, 177453, 177453, 1806446, 177453, 1806446,
+ 177453, 1806446, 1806446, 1806446, 177453, 1806481, 1806446, 1806418, 1806418, 1806418, 1806418,
+ 1806418, 1806418, 1806418, 1806418, 1806418, 1508988, 1806418, 1806418, 1806418, 1806418, 1806418,
+ 1806418, 1806418, 1806418, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 264757, 264757, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 1806422, 177453, 1806422, 1806422, 1806422, 1806422, 177453, 1806422, 1806422, 1806422,
+ 1806481, 1806422, 1806481, 1806481, 1806422, 1806422, 1806481, 1806422, 1806481, 1806422, 1806422,
+ 1806422, 1806481, 1806422, 1806422, 1806481, 1806422, 1806422, 1806422, 1806481, 1806422, 1806422,
+ 1806481, 1806422, 1806422, 1806422, 1806422, 1806422, 1806481, 1806422, 1806422, 1806481, 1806422,
+ 1806422, 1806422, 1806481, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806481, 1806422,
+ 1806422, 1806481, 1806422, 1806422, 1806481, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 1806422, 1806422, 1806422, 2078494, 1806422, 1806422, 1806422, 1806422, 2078494, 1806422,
+ 1806422, 2078494, 2078494, 2078494, 2078494, 1806422, 2078494, 2078494, 2078494, 1806422, 1806422,
+ 264757, 177453, 1806481, 1806481, 1806481, 177453, 177453, 1806481, 177453, 1806481, 1806481, 1806481,
+ 177453, 177453, 1806481, 177453, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 177453, 1806481,
+ 177453, 1806481, 1806481, 1806481, 177453, 1806481, 1806481, 177453, 177453, 1806481, 1806481, 177453,
+ 177453, 177453, 1806481, 177453, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481,
+ 1806481, 1806481, 1806481, 177453, 1806481, 177453, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 1806481, 177453, 177453, 1806481, 177453, 177453, 1806481, 1806481, 177453, 1806481, 177453,
+ 1806481, 177453, 1806481, 177453, 1806481, 1806481, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 177453, 177453, 177453, 1806481, 1806481, 1806422, 1806422, 1806422, 1806481, 1806481, 1806481,
+ 1806422, 1806422, 1806422, 1806481, 1806481, 1806481, 1806422, 1806481, 2078494, 1806422, 1806481,
+ 1806422, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 177453, 1806481, 1806481,
+ 1806481, 1806422, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806422, 1806481,
+ 1806481, 1806422, 1806422, 1806481, 1806481, 1806481, 1806422, 177453, 1806481, 1806481, 1806422,
+ 1806422, 177453, 1806481, 177453, 1806481, 1806481, 177453, 1806422, 177453, 1806481, 1806481, 1806422,
+ 1806481, 1806481, 1806422, 1806481, 177453, 1806422, 1806481, 1806422, 1806481, 1806422, 1806481,
+ 1806481, 1806481, 1806481, 1806481, 177453, 1806481, 1806481, 177453, 1806422, 1806481, 177453, 1806422,
+ 177453, 1806481, 1806481, 1806481, 1806481, 177453, 1806481, 1806422, 177453, 1806422, 1806422, 1806481,
+ 1806492, 1806904, 1806441, 1806466, 1806492, 1806466, 1806466, 1806492, 1806492, 1806466, 1806492,
+ 1806466, 1806466, 1806466, 1806466, 1806492, 1806492, 1806466, 1806466, 1806466, 1806492, 1806466,
+ 1806466, 1806466, 1806466, 1806492, 1806466, 1806492, 1806492, 1806466, 1806492, 1806466, 1806466,
+ 1806492, 1806466, 1806492, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466, 1806466,
+ 1806466, 1806492, 1806466, 1806466, 1806466, 1806466, 1806466, 1806466, 1806466, 1806466, 1806492,
+ 1806466, 1806492, 1806466, 1806466, 1806448, 1806448, 1806492, 1806492, 1806492, 1806492, 1806492,
+ 1806492, 1806492, 1806492, 1806448, 1806448, 1806466, 1806448, 1806466, 1806448, 1806448, 1806466,
+ 1806448, 1806448, 1806466, 1806466, 1806466, 1806466, 1806466, 1806448, 1806448, 1806448, 1806466,
+ 1806466, 1806466, 1806448, 1806466, 1806492, 1806492, 1611799, 1806466, 1806492, 1806492, 1611799,
+ 1611799, 1806492, 1611799, 1611799, 1806466, 1806492, 1611799, 1806466, 1806492, 1806466, 1806492,
+ 1806492, 1611799, 1806492, 1611799, 1611799, 1806492, 1806492, 1806492, 1806466, 1806492, 1806485,
+ 1806466, 1806492, 1806492, 1806492, 1806492, 1806466, 1611799, 1806904, 1806492, 1806466, 1611799,
+ 1806904, 1806492, 1806492, 1806904, 1806492, 1806492, 1806492, 1611799, 1611799, 1611799, 1611799,
+ 1806492, 1611799, 1806466, 1611799, 1806904, 1806904, 1611799, 1806904, 1611799, 1806492, 1806492,
+ 1806466, 1806492, 1611799, 1806466, 1806492, 1806492, 1806492, 1806466, 1806492, 1806466, 1806466,
+ 1806492, 1806492, 1611799, 1806466, 1806492, 1806492, 1806492, 1806492, 1806466, 1806466, 1806492,
+ 1806466, 1806466, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466, 1806492, 1806492,
+ 1806466, 1806492, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466,
+ 1806492, 1806466, 1806492, 1806492, 1806492, 1806492, 1806466, 1806466, 1806466, 1806466, 1806492,
+ 1806466, 1806492, 1806492, 1806466, 1806492, 1806492, 1806492, 1806466, 1806466, 1806466, 1806466,
+ 1806466, 1806492, 1806466, 1806466, 1806466, 1806492, 1806466, 1806492, 1806492, 1806466, 1806492,
+ 1806492, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466, 1806466, 1806492, 1806466,
+ 1806904, 1806448, 1806904, 1806448, 1806904, 1611799, 1611799, 1611799, 1806904, 1806904, 1611799,
+ 1611799, 1806448, 1806904, 1806904, 1611799, 1806448, 1806904, 1611799, 1806904, 1611799, 1806904,
+ 1611799, 1806904, 1806904, 1806448, 1806904, 1806904, 1806904, 1806448, 1806448, 1806904, 1806904,
+ 1611799, 1806448, 1611799, 1611799, 1611799, 1806448, 1611799, 1806904, 1611799, 1806448, 1806904,
+ 1611799, 1611799, 1611799, 1611799, 1611799, 1611799, 1611799, 1806904, 1806904, 1806904, 1806904,
+ 1611799, 1611799, 1611799, 1806448, 1611799, 1806448, 1806448, 1806448, 1611799, 1611799, 1806448,
+ 1611799, 1806904, 1806448, 1806904, 1611799, 1611799, 1806904, 1611799, 1806492, 1806466, 1806904,
+ 1806466, 1806466, 1806492, 1611799, 1806466, 1611799, 1611799, 1806448, 1611799, 1806448, 1806904,
+ 1806904, 1806466, 1806904, 1806448, 1611799, 1611799, 1806448, 1611799, 1806466, 1806492, 1611799,
+ 1611799, 1611799, 1806492, 1611799, 1806492, 1806492, 1806904, 1806492, 1806904, 1806492, 1806492,
+ 1611799, 1611799, 1806904, 1611799, 1611799, 1806492, 1611799, 1611799, 1806492, 1611799, 1806492,
+ 1806492, 1806492, 1806904, 1806904, 1611799, 1806448, 1611799, 1806904, 1611799, 1806466, 1806466,
+ 1611799, 1611799, 1611799, 1611799, 1806448, 1806466, 1611799, 1806904, 1806448, 1806448, 1611799,
+ 1806492, 1611799, 1611799, 1806466, 1611799, 1806492, 1611799, 1806492, 1806466, 1806448, 1611799,
+ 1806492, 1806448, 1611799, 1806492, 1806904, 1806492, 1806492, 1611799, 1611799, 1806904, 1806904,
+ 1806448, 1611799, 1806492, 1611799, 1806492, 1806492, 1611799, 1806466, 1806904, 1806448, 1806904,
+ 1806448, 1806904, 1806448, 1806448, 1806448, 1806448, 1806448, 1589156, 1806448, 1589156, 1589156,
+ 1589156, 1806448, 1806448, 1806448, 1806448, 1806448, 1806904, 1806448, 1589156, 1589156, 1806448,
+ 1589156, 1589156, 1806448, 1806904, 1806904, 1589156, 1589156, 1806904, 1589156, 1806448, 1806904,
+ 1806904, 1806904, 1806448, 1589156, 1806448, 1589156, 1806448, 1806448, 1806904, 1806448, 1806904,
+ 1806904, 1806448, 1806904, 1806904, 1806448, 1806904, 1806448, 1611799, 1806448, 1806448, 1806904,
+ 1806448, 1806448, 1806904, 1806448, 1806904, 1806448, 1806904, 1806448, 1806448, 1806903, 1806448,
+ 1589156, 1806904, 1589156, 1806448, 1589156, 1589156, 1806448, 1806448, 1806904, 1806904, 1806448,
+ 1806904, 1806904, 1806904, 1806448, 1589156, 1806448, 1806904, 1589156, 1589156, 1806904, 1806448,
+ 1806904, 1806904, 1806904, 1589156, 1806904, 1806448, 1611799, 1806448, 1806448, 1589156, 1806904,
+ 1611799, 1589156, 1806448, 1806904, 1806904, 1806448, 1589156, 1589156, 1806904, 1589156, 1806448,
+ 1611799, 1806448, 1806448, 1806904, 1589156, 1806448, 1806904, 1806448, 1589156, 1806448, 1611799,
+ 1589156, 1589156, 1806904, 1806448, 1806448, 1806904, 1806904, 1806448, 1611799, 1589156, 1589156,
+ 1806904, 1589156, 1611799, 1589156, 1806904, 1806448, 1589156, 1806904, 1806904, 1589156, 1611799,
+ 1806904, 1589156, 1806904, 1806448, 1589156, 1806904, 1806448, 1589156, 1806904, 1589156, 1806904,
+ 1806904, 1589156, 1806904, 1806448, 1806448, 1611799, 1806448, 1589156, 1806904, 1611799, 1806448,
+ 1806448, 1589156, 1806448, 1611799, 1589156, 1806448, 1806904, 1806904, 1589156, 1806904, 1806904,
+ 1611799, 1806904, 1589156, 1806904, 1589156, 1589156, 1589156, 1611799, 1806904, 1806448, 1806448,
+ 1611799, 1806448, 1589156, 1806448, 1589156, 1806448, 1806904, 1611799, 1806448, 1806904, 1589156,
+ 1806904, 1589156, 1806904, 1589156, 1806448, 1806904, 1589156, 1806448, 1806448, 1611799, 1589156,
+ 1611799, 1589156, 1806904, 1589156, 1806448, 1806448, 1806904, 1589156, 1806904, 1806904, 1806448,
+ 1806904, 1589156, 1611799, 1806904, 1806485, 1806485, 1806457, 1806457, 1806457, 1806457, 1806457,
+ 1806446, 1806446, 1806457, 1806457, 1806485, 1806485, 1806457, 1806485, 1806457, 1806457, 1806457,
+ 1806457, 1806485, 1806457, 1806457, 1806457, 1806485, 1806485, 1806457, 1806457, 1806457, 1806457,
+ 1806457, 1806457, 1806485, 1806457, 1806485, 1806485, 1806457, 1806485, 1806457, 1806457, 1806457,
+ 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1806485, 1806485, 1806457,
+ 1806457, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806457, 1806457, 1806485, 1806457,
+ 1806485, 1806485, 1806446, 1806446, 1806466, 1806446, 1806457, 1806457, 1806457, 1806446, 1806446,
+ 1806446, 1806448, 1806485, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806446, 1806457,
+ 1806485, 1806457, 1806457, 1806457, 1806446, 1806485, 1806446, 1806446, 1806446, 1806457, 1806457,
+ 1806446, 1806457, 1806446, 1806485, 1806457, 1806457, 1806457, 1806446, 1806446, 1806446, 1806446,
+ 1806446, 1806446, 1806457, 1806457, 1806485, 1806446, 1806457, 1806446, 1806485, 1806446, 1806485,
+ 1806485, 1806457, 1806485, 1806457, 1806446, 1806457, 1806457, 1806485, 1806446, 1806446, 1806457,
+ 1806446, 1806457, 1806485, 1806457, 1806457, 1806446, 1806457, 1806446, 1806457, 1806446, 1806446,
+ 1806485, 1611800, 1806485, 1806485, 1611800, 1806457, 1611800, 1806485, 1806485, 1806903, 1806485,
+ 1611800, 1611800, 1806485, 1806485, 1806903, 1806485, 1611800, 1611800, 1806457, 1806485, 1806903,
+ 1806485, 1806485, 1611800, 1806485, 1611800, 1806457, 1611800, 1611800, 1806903, 1806485, 1611800,
+ 1806457, 1611800, 1806485, 1611800, 1806457, 1611800, 1611800, 1806485, 1611800, 1806485, 1611800,
+ 1806903, 1611799, 1806457, 1806485, 1806485, 1611800, 1611800, 1806903, 1806485, 1806485, 1806485,
+ 1806903, 1806485, 1806457, 1611800, 1806903, 1806485, 1806485, 1611800, 1806903, 1806457, 1806903,
+ 1806485, 1806903, 1806485, 1806457, 1611800, 1806485, 1806485, 1611800, 1806903, 1611800, 1611800,
+ 1611800, 1806485, 1806457, 1806485, 1806485, 1611800, 1611800, 1806457, 1806457, 1611800, 1611800,
+ 1806457, 1611800, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806485, 1806457, 1611800,
+ 1806485, 1806457, 1611800, 1611800, 1611800, 1611800, 1806485, 1806457, 1806485, 1806457, 1611800,
+ 1806485, 1806485, 1806485, 1611800, 1806485, 1611800, 1806485, 1806485, 1806485, 1806485, 1806485,
+ 1806457, 1806457, 1806485, 1806485, 1806485, 1806485, 1806457, 1806485, 1806485, 1806485, 1806485,
+ 1806457, 1806485, 1806457, 1806457, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806485,
+ 1806485, 1806485, 1806457, 1806457, 1806457, 1806457, 1806485, 1806485, 1806485, 1806457, 1806457,
+ 1806457, 1806485, 1806485, 1806457, 1806457, 1806457, 1806485, 1806457, 1806485, 1806485, 1806485,
+ 1806485, 1806247, 1611800, 1611800, 177449, 1611800, 1806444, 1611800, 1806247, 177449, 1611800,
+ 1806444, 1611800, 1806444, 1611800, 1806444, 1611800, 1806444, 177449, 1806444, 1806444, 1806444,
+ 1806247, 177449, 1611800, 1806444, 1806444, 177449, 1806444, 1611800, 177449, 1806444, 1806247, 1611800,
+ 1611800, 1806247, 1806444, 177449, 1611800, 177449, 1611800, 1806247, 1611800, 1806444, 177449, 1806444,
+ 1611800, 177449, 1611800, 1611800, 1806247, 1611800, 177449, 1611800, 1611800, 1611800, 177449, 1611800,
+ 1806247, 1611800, 177449, 177449, 1806247, 1611800, 1806444, 1806247, 1611800, 1611800, 1611800,
+ 1806247, 1611800, 1806444, 1806444, 1806247, 1611800, 1611800, 1806444, 1806247, 1611800, 1806247,
+ 1611800, 1806247, 177449, 1611800, 1806444, 1611800, 177449, 1611800, 1806247, 1806444, 177449, 1806444,
+ 1611800, 1806247, 1611800, 1806444, 1611800, 1611800, 1611800, 1806247, 1806247, 177449, 177449,
+ 1611800, 177449, 1806444, 1806444, 1611800, 1806444, 1611800, 1806444, 1806444, 1806444, 1611800,
+ 177449, 1611800, 1611800, 1806444, 1806444, 1806444, 1611800, 1806444, 1806444, 1806444, 177449,
+ 1806247, 1611800, 1806247, 1806247, 1611800, 1806247, 1806247, 1806444, 1806247, 1806444, 177449,
+ 1806444, 1806247, 1806247, 177449, 1806247, 1806247, 1806444, 177449, 1806444, 1806444, 1806444,
+ 1806444, 1611800, 177449, 1611800, 1806247, 1806247, 1806444, 1806247, 1611800, 1806444, 1806444,
+ 177449, 1611800, 1806444, 1806444, 1806247, 1806444, 1806444, 1806247, 1806444, 1806444, 1806247,
+ 1611800, 1806247, 1806247, 1611800, 1806444, 1806444, 1806444, 1611800, 1806444, 1806247, 1806444,
+ 1806444, 1806247, 1611800, 1806444, 1806247, 1806247, 1806444, 1611800, 1806247, 1806247, 1806444,
+ 1806444, 1611800, 1806247, 1611800, 1806247, 1806444, 1806444, 1806247, 1806247, 1806247, 1611800,
+ 1806247, 1806444, 177449, 177449, 1806444, 177449, 177449, 1806444, 1806247, 1806247, 1806247, 177449,
+ 1611800, 1806247, 1806247, 177449, 177449, 1806247, 1806444, 1806444, 1806444, 1611800, 1806247,
+ 1806444, 1806247, 177449, 1611800, 177449, 1806444, 1806247, 1806247, 177449, 1806247, 1806444, 177449,
+ 177449, 1806444, 177449, 1611800, 1806247, 177449, 177449, 1806444, 1611800, 1806247, 1806247, 1806247,
+ 177449, 177449, 1806247, 177449, 1611800, 1806247, 1806247, 177449, 1806247, 1806444, 177449, 1806444,
+ 177449, 1806444, 1806247, 1806444, 1806247, 1806444, 1806247, 1806444, 1806247, 1806247, 1806247,
+ 1806444, 177449, 177449, 1806247, 1806444, 1806247, 1806444, 1806444, 1806247, 1806444, 177449, 1806444,
+ 1806444, 1611800, 177449, 1806247, 177449, 1806247, 177449, 177449, 177449, 1806444, 1806444, 1806247,
+ 1806444, 1806247, 1806247, 1806444, 177449, 1806444, 177449, 177449, 1806247, 177449, 177449, 177449,
+ 177449, 1806247, 1806247, 177449, 1806444, 1806247, 1806444, 177449, 1806247, 1806247, 1806444, 1806247,
+ 1806247, 177449, 177449, 1806247, 177449, 1806247, 1806247, 177449, 177449, 1806247, 1806247, 1806247,
+ 177449, 177449, 177449, 1806247, 177449, 177449, 177449, 177449, 177449, 177449, 177449, 1806247,
+ 1806247, 177449, 1806247, 177449, 177449, 177449, 177449, 177449, 177449, 1806247, 2848359, 1806247,
+ 1806247, 1806247, 1589156, 1806247, 1806247, 1806247, 1806247, 1806444, 1806444, 177449, 177449, 177449,
+ 177449, 177449, 177449, 177449, 177449, 177449, 1589156, 1589156, 3249936, 1589156, 1589156, 3249936,
+ 1806392, 1806392, 3249936, 3249936, 1806392, 3249936, 1589156, 1589156, 1806392, 3249936, 1589156,
+ 3249936, 3249936, 3249936, 1589156, 1806392, 1806392, 3249936, 1806392, 1589156, 1589156, 3249936,
+ 1589156, 3249936, 3249936, 3249936, 3249936, 3249936, 3249936, 3249936, 1589156, 3249936, 1589156,
+ 3249936, 3249936, 3249936, 3249936, 1589156, 3249936, 3249936, 3249936, 3249936, 1589156, 3249936,
+ 3249936, 1589156, 1589156, 1589156, 3249936, 1589156, 1589156, 3249936, 1589156, 3249936, 1589156,
+ 3249936, 3249936, 3249936, 1589156, 1589156, 3249936, 1589156, 1589156, 3249936, 3249936, 3249936,
+ 1589156, 1589156, 1589156, 1589156, 3249936, 1589156, 3249936, 3249936, 3249936, 3249936, 1589156,
+ 3249936, 1589156, 3249936, 1589156, 1589156, 1589156, 1589156, 3249936, 3249936, 3249936, 3249936,
+ 177449, 3249936, 1589156, 1589156, 3249936, 3249936, 1589156, 3249936, 1589156, 3249936, 1589156,
+ 1589156, 1589156, 1589156, 1589156, 1589156, 3249936, 1589156, 177454, 177454, 177454, 177454, 177454,
+ 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454,
+ 1806444, 177454, 1806444, 177454, 1806444, 177454, 177454, 177454, 177454, 177454, 177454, 177454,
+ 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454,
+ 177454, 1806444, 177454, 177454, 177454, 1806444, 1806444, 177454, 177454, 177449, 177454, 177454,
+ 177454, 1806444, 177454, 177449, 1806444, 1806444, 1589156, 1611800, 177454, 1806444, 1806444, 1806444,
+ 177454, 177454, 1806247, 1806444, 1806247, 1806444, 177454, 177454, 1806444, 177454, 1806247, 1806444,
+ 177454, 1806247, 1806247, 177454, 177454, 177454, 177454, 1806247, 1806444, 177454, 177454, 177454,
+ 1806247, 1806247, 177454, 177454, 1806444, 1806444, 1806247, 177454, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 1806441,
+ 1806441, 1806441, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 852190, 1311395, 852190,
+ 1311395, 1806441, 1806441, 1806441, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 852190, 1311395,
+ 1806441, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 1806441, 1806441, 1806441, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 852190, 1311395,
+ 1806441, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 852190,
+ 1311395, 1806444, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 852190, 1311395, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 3198866, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441,
+ 1806441, 852190, 1311395, 1806441, 852190, 1311395, 852190, 1311395, 1806441, 1806441, 852190, 1311395,
+ 852190, 1311395, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 1806441, 1806441, 852190, 1311395,
+ 852190, 1311395, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 852190, 1311395, 1812929, 1806908,
+ 1812929, 1806507, 1812929, 1806908, 1812929, 1806908, 1806507, 1812929, 1812929, 1812929, 1806908,
+ 1806908, 261365, 1806908, 1806507, 1812929, 1806908, 1806908, 261365, 1812929, 1575284, 1806908,
+ 1806908, 1806908, 1812929, 1806507, 1806908, 1812929, 1812929, 1812929, 261365, 1812929, 1806908,
+ 261365, 1806507, 1806908, 1812929, 1806908, 1812929, 1806507, 1575284, 261365, 1575284, 261365, 1806908,
+ 1812929, 1806908, 1812929, 1575284, 1806908, 261365, 1812929, 261365, 1806908, 1806908, 1806908,
+ 1806908, 1812929, 1806507, 1806908, 261365, 1812929, 1806908, 261365, 1812929, 1812929, 1812929, 261365,
+ 1806650, 261365, 1812929, 1806650, 261365, 1806507, 1806908, 1806908, 1812929, 1806650, 261365, 1806908,
+ 1806650, 1806507, 1812925, 1806908, 261365, 1812929, 261365, 1806908, 1806650, 1812929, 261365, 1806507,
+ 261365, 1806507, 1806908, 1812929, 261365, 1812929, 1806650, 261365, 1812929, 1812929, 1806650, 1806650,
+ 1806908, 261365, 1806507, 1812929, 1806650, 1806650, 1806507, 1812929, 261365, 1806908, 261365, 1812929,
+ 1806908, 261365, 1806507, 1806507, 1806908, 1812929, 1806908, 1812929, 1806908, 1812929, 1806908,
+ 1806908, 1812929, 1806908, 1806507, 261365, 1806439, 1806439, 261365, 1806908, 1806507, 1806908,
+ 1806908, 1806908, 1806507, 1806908, 1806507, 261365, 1575284, 1575284, 1806507, 1806439, 1806439,
+ 1806908, 1806908, 1575284, 1806908, 1806507, 1806439, 1806507, 1812929, 1806908, 261365, 1806507,
+ 1806908, 1575284, 1806439, 1806439, 1806507, 1575284, 1806439, 1812929, 1806908, 1806908, 1812929,
+ 1806908, 1575284, 261365, 1812929, 1812929, 1806908, 1812929, 1812929, 1812929, 1806507, 261365,
+ 1812929, 1806908, 1806412, 1806908, 261365, 1806908, 1806908, 1812929, 1812929, 1806908, 261365,
+ 1806908, 1575268, 1806908, 1806908, 261365, 1806908, 1806439, 1806507, 1575284, 1806507, 261365,
+ 1806507, 261365, 1806908, 1806908, 1806908, 1806908, 1806439, 1806507, 261365, 1806507, 1806908, 261365,
+ 1575284, 1806439, 1575284, 1806439, 1806908, 1812929, 1575284, 1812929, 1806507, 261365, 1812929,
+ 1812929, 1806507, 1806439, 261365, 1575284, 1806507, 1575284, 1812929, 1806507, 261365, 1575284,
+ 1806507, 1812929, 1575284, 1806908, 1812929, 1806908, 1812929, 1812929, 1812929, 1806507, 1806908,
+ 1575284, 261365, 261365, 261365, 261365, 261365, 223175, 261365, 1806908, 1806908, 261365, 1812929,
+ 223175, 261365, 223175, 261365, 223175, 261365, 1812929, 1806908, 261365, 1806908, 261365, 1806908,
+ 1812929, 223175, 223175, 1806908, 223175, 1806908, 223175, 261365, 223175, 223175, 223175, 223175,
+ 223175, 261365, 261365, 223175, 223175, 261365, 1812929, 261365, 261365, 1812929, 223175, 223175,
+ 223175, 261365, 223175, 1812929, 223175, 261365, 261365, 1812929, 223175, 223175, 1812929, 261365,
+ 223175, 261365, 223175, 261365, 223175, 1812929, 223175, 261365, 1812929, 223175, 223175, 1812929,
+ 261365, 261365, 261365, 261365, 223175, 1812929, 223175, 1812929, 261365, 223175, 223175, 223175,
+ 223175, 223175, 261365, 223175, 1812929, 1812929, 223175, 1812929, 223175, 1812929, 223175, 1812929,
+ 1812929, 261365, 1812929, 1812929, 1812929, 1812929, 1812929, 261365, 1812929, 261365, 223175, 261365,
+ 1812929, 261365, 223175, 261365, 261365, 261365, 223175, 261365, 261365, 223175, 261365, 223175, 261365,
+ 223175, 261365, 1812929, 261365, 223175, 261365, 223175, 223175, 223175, 261365, 261365, 261365, 261365,
+ 261365, 1812929, 1812929, 261365, 1812929, 261365, 1812929, 1812929, 1812929, 1812929, 261365, 261365,
+ 261365, 1812929, 261365, 1812929, 261365, 1806513, 261365, 261365, 1812929, 261365, 1812929, 261365,
+ 1812929, 261365, 1812929, 261365, 1812929, 1812929, 1812929, 261365, 261365, 1812929, 261365, 261365,
+ 1812929, 261365, 261365, 261365, 261365, 261365, 1812929, 1812929, 1812929, 1806650, 1806650, 1806513,
+ 1806443, 1806650, 1806443, 1806443, 1806443, 1806443, 1806443, 1806513, 1806513, 1806443, 1806650,
+ 1806443, 1806443, 1806443, 1806513, 1806513, 1806443, 1806513, 1806443, 1806443, 1806443, 1806650,
+ 1806513, 1806443, 1806443, 1806443, 1806443, 1575284, 1575284, 1575284, 1806650, 1575284, 1806443,
+ 1806650, 1806650, 1806443, 1806650, 1806443, 1806650, 1806443, 1806513, 1806443, 1575284, 1806513,
+ 1575284, 1575284, 1806513, 1806443, 1806443, 1575284, 1806650, 1575284, 1806513, 1806443, 1575284,
+ 1806443, 1806650, 1806443, 1806443, 1806650, 1806513, 1806443, 1575284, 1806443, 1806513, 1806443,
+ 1806443, 1806443, 1806513, 1806443, 1806439, 1806443, 1806443, 1806443, 1806513, 1806513, 1806443,
+ 1806443, 1806443, 1806513, 1806443, 1806443, 1806443, 1812925, 1806513, 1806443, 1812925, 1812925,
+ 1806443, 1812925, 1806443, 1806443, 1812925, 1806443, 1806443, 1806650, 1806650, 1806650, 1806443,
+ 1806650, 1806513, 1806650, 1812925, 1806513, 1806443, 1806443, 1806650, 1806513, 1812925, 1806513,
+ 1806443, 1806513, 1812925, 1806443, 1806443, 1812925, 1806650, 1806513, 1806443, 1806513, 1812925,
+ 1806513, 1806443, 1806513, 1806650, 1806650, 1812925, 1806443, 1806513, 1806443, 1806513, 1812925,
+ 1806650, 1806443, 1806513, 1806513, 1806513, 1806513, 1806650, 1806650, 1806513, 1806650, 1806513,
+ 1806650, 1806650, 1806513, 1812925, 1812925, 1806513, 1806513, 1812925, 1806443, 1806443, 1806443,
+ 1806443, 1806650, 1806513, 1806650, 1806443, 1806513, 1575268, 1806650, 1806650, 1806650, 1806650,
+ 1575284, 1575284, 1575284, 1575284, 1575284, 1575284, 1806443, 1806650, 1575268, 1575284, 1806650,
+ 1806650, 1806650, 1575268, 1575268, 1806650, 1806650, 1575284, 1575284, 1575284, 1806650, 1575284,
+ 1806443, 1575284, 1575284, 1806443, 1575284, 1575268, 1806443, 1806650, 1575284, 1806650, 1575284,
+ 1806650, 1806650, 1575284, 1806650, 1575284, 1575284, 1806650, 1575284, 1806650, 1806443, 1806650,
+ 1575284, 1575284, 1575284, 1806650, 1575284, 1806443, 1806650, 1575284, 1575284, 1806443, 1806650,
+ 1806650, 1806650, 1806650, 1806443, 1575284, 1806650, 1575284, 1575284, 1806443, 1575284, 1575284,
+ 1806443, 1806650, 1806650, 1806650, 1806650, 1575284, 1806650, 1806650, 1806443, 1575284, 1806650,
+ 1575284, 1575284, 1575284, 1806650, 1806443, 1806650, 1575284, 1575284, 1806443, 1806443, 1806650,
+ 1806650, 1575284, 1806650, 1806650, 1575284, 1806443, 1575268, 1575284, 1806443, 1575284, 1806650,
+ 1806650, 1575284, 1806443, 1575268, 1806443, 1575284, 1575284, 1575284, 1575284, 1806650, 1575284,
+ 1806650, 1806650, 1575284, 1806650, 1806650, 1806443, 1575284, 1575284, 1575284, 1575284, 1806650,
+ 1575284, 1575268, 1806650, 1575284, 1806650, 1806650, 1806507, 1806650, 1806650, 1806650, 1575268,
+ 1806650, 1575284, 1575284, 1575281, 1806650, 1806443, 1575268, 1575284, 1806443, 1806443, 1575268,
+ 1575284, 1806443, 1806513, 1806650, 1575284, 1806650, 1806443, 1575268, 1806650, 1806443, 1575284,
+ 1806513, 1575284, 1575268, 1575284, 1806443, 1806513, 1806513, 1806443, 1575268, 1806650, 1806650,
+ 1575284, 1806443, 1575284, 1575284, 1806650, 1575284, 1806650, 1806443, 1575284, 1575268, 1806443,
+ 1575284, 1806650, 1806443, 1806650, 1575268, 1575284, 1575268, 1806650, 1806443, 1806443, 1806650,
+ 1575284, 1806650, 1806650, 1575284, 1806650, 1575284, 1806443, 1575284, 1575284, 1575268, 1806650,
+ 1806443, 1575284, 1575268, 1575284, 1806443, 1806650, 1806443, 1806650, 1806650, 1575284, 1806650,
+ 1806443, 1806443, 1806443, 1806650, 1806650, 1806443, 1575268, 1806650, 1575284, 1806443, 1575268,
+ 1806443, 1575268, 1806500, 1575268, 1806500, 1575268, 1575268, 1575268, 1575268, 1575268, 1812925,
+ 1575268, 1806500, 1812925, 1575268, 1575268, 1575268, 1812925, 1806500, 1575268, 1806500, 1575268,
+ 1806500, 1812925, 1575268, 1812925, 1575268, 1812925, 1575268, 177456, 1812925, 1812925, 1812925,
+ 177456, 1812925, 1575268, 1575268, 1812925, 1575268, 1812925, 1806500, 1812925, 1806500, 1575268,
+ 1812925, 1575268, 1812925, 1575268, 1575268, 1806500, 1575268, 1575268, 1812925, 1575268, 1575268,
+ 1575268, 1812925, 1806500, 1812925, 1508979, 1806500, 1812925, 1812923, 1806500, 1575268, 1812925,
+ 1812925, 1812925, 1806500, 1575268, 1575268, 1812925, 1575268, 1575268, 1575268, 1812925, 1812925,
+ 1806500, 1812925, 1575268, 1812925, 1806500, 1812925, 1806500, 1575268, 1812925, 1575268, 1812925,
+ 1575268, 1575268, 1806500, 1812925, 1806443, 1575268, 1806500, 1806500, 1575268, 1806500, 1575268,
+ 1806500, 1806443, 1806500, 1806443, 1806500, 1575268, 1806443, 1806443, 1806500, 1806443, 1575268,
+ 1806500, 1575268, 1806500, 1800592, 1806443, 1575268, 1575268, 1575268, 1575268, 1575268, 1575268,
+ 1575268, 1806393, 1575268, 1806443, 1575268, 1575268, 1575268, 1806908, 1575268, 1575268, 1575268,
+ 1575268, 1806500, 1806500, 1806500, 1575268, 1575268, 1806500, 1575268, 1806500, 1806500, 1806500,
+ 1575268, 1806500, 1575268, 1806500, 1806500, 1806500, 1575268, 1806500, 1806500, 1575268, 1575268,
+ 1806500, 1575268, 1812925, 1812925, 1812925, 1806500, 1575268, 1806500, 1575268, 1812925, 1575268,
+ 1812925, 1575268, 1806500, 1575268, 1575268, 1812925, 1575268, 1812925, 1806500, 1812925, 1806500,
+ 1575268, 1806500, 1812925, 1806500, 1806500, 1812925, 1575268, 177449, 1575268, 177449, 1812925, 177449,
+ 1812925, 1812925, 1575268, 1575268, 177449, 177449, 1575268, 1812925, 1812925, 177449, 1812925, 177449,
+ 177449, 177449, 1812925, 1812925, 1812925, 177449, 1575268, 1575268, 1812925, 177456, 1575268, 177456,
+ 1575268, 177456, 1575268, 177456, 1575268, 177456, 177449, 1806442, 177449, 1806442, 177449, 177449,
+ 1812925, 177449, 1812925, 177449, 1806442, 1806442, 177449, 1806442, 1812925, 1812925, 177449, 177449,
+ 177449, 1812925, 1812925, 1812925, 1812925, 177449, 177449, 1812925, 1806442, 1812925, 177456, 1806442,
+ 1806442, 1806442, 1812925, 1806442, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925,
+ 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925,
+ 1812925, 1812925, 1806500, 1812925, 1812925, 1806500, 1812925, 1812925, 1812925, 1806500, 1812925,
+ 1812925, 1806500, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1806500, 1812925, 1812925,
+ 1812925, 1812925, 1806500, 1812925, 1812925, 1806500, 1806500, 1812925, 1806500, 1806442, 1806442,
+ 177456, 1806507, 177456, 1812923, 1806507, 1806507, 1812923, 1806442, 1812923, 1806507, 1806507,
+ 1812923, 177456, 1812923, 1806507, 177456, 177456, 1806507, 1806507, 1806507, 1806442, 1806442, 177456,
+ 1806442, 1806507, 177456, 1806442, 177456, 177456, 1806442, 1575284, 177456, 177456, 1806442, 177456,
+ 1806442, 177456, 177456, 1806442, 1806442, 1812923, 1806442, 1812923, 177456, 1806442, 177456, 177456,
+ 1806442, 1806442, 1812923, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442,
+ 1806442, 1806442, 177456, 1806442, 1806442, 177456, 1806442, 1806442, 177456, 1806442, 1806442, 1806442,
+ 1806442, 177456, 1806442, 177456, 177456, 1806442, 177456, 1806442, 1806442, 177456, 177456, 1806442,
+ 1812923, 1806442, 1812923, 1806442, 177456, 1806442, 1806442, 1806442, 1806442, 1812923, 177456,
+ 1806442, 1812923, 1812923, 177456, 1806442, 1806442, 1806442, 1806442, 1806442, 177456, 1812923, 177456,
+ 1812923, 1812923, 1812923, 1806442, 1812923, 1806442, 177456, 1812923, 1806442, 177456, 1812923,
+ 1806442, 1812923, 177456, 1812923, 1806442, 1806442, 177456, 1806442, 1806442, 1806442, 1812923,
+ 1806442, 177456, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442, 1812923, 1812923, 1806442,
+ 1806443, 1806442, 1806442, 1806442, 1806442, 1806442, 177456, 1806442, 1806442, 1812923, 177456, 177456,
+ 1806442, 1806507, 177456, 1806507, 1806442, 1806507, 177456, 1806507, 1806908, 177456, 177456, 177456,
+ 1806507, 1806908, 1806908, 177456, 1806507, 1806507, 177456, 1806507, 1806908, 177456, 177456, 1806908,
+ 177456, 1806908, 1806507, 1806507, 1806442, 1806507, 1806507, 1806507, 177456, 1806442, 177456, 1806507,
+ 1806507, 1806442, 1806507, 1806507, 1806507, 1806507, 1806442, 1806507, 1806908, 1806908, 1806507,
+ 177456, 177456, 177456, 1806507, 177456, 177456, 177456, 177456, 1806507, 1806908, 1806507, 1806908,
+ 1806507, 177456, 1806507, 1806507, 1806442, 1806908, 1806442, 1806507, 177456, 1806507, 177456, 1806507,
+ 177456, 1806507, 1806442, 1806908, 177456, 1806507, 177456, 1806908, 177456, 1806442, 1806507, 177456,
+ 1806442, 1806908, 177456, 1806507, 177456, 1806507, 177456, 1806442, 177456, 1806507, 1806442, 1806507,
+ 1806507, 1806908, 1806442, 1806908, 1806908, 1806507, 1806507, 1806442, 1806908, 1806507, 1806908,
+ 1806442, 1806507, 1806908, 1806507, 177456, 1806908, 1806507, 1806908, 177456, 177456, 1806908, 1806442,
+ 1806507, 177456, 177456, 1806908, 177456, 177456, 1806507, 1806908, 1806507, 1806442, 1806908, 177456,
+ 177456, 1806507, 1806507, 177456, 1806507, 1806507, 1806908, 177456, 1806908, 177456, 1806908, 177456,
+ 1806507, 1806507, 1806500, 177456, 1806507, 1806507, 1806507, 177456, 1806507, 1806507, 1806507,
+ 1806442, 1806442, 177456, 1806442, 177456, 1806507, 177456, 1806442, 177456, 177456, 177456, 1806442,
+ 1806507, 1806507, 1806908, 1806507, 1806442, 1806507, 1806507, 1806908, 1806507, 1806507, 1806908,
+ 177456, 1806442, 177456, 1806908, 1806507, 1806442, 177456, 177456, 177456, 1806507, 177456, 1806507,
+ 177456, 177456, 1806908, 1806442, 177456, 1806908, 1806442, 177456, 177456, 1806908, 1806442, 177456,
+ 177456, 177456, 1806442, 1806908, 1806507, 177456, 1806442, 1806908, 177456, 1806908, 177456, 1806442,
+ 177456, 177456, 177456, 177456, 1575261, 1508979, 1508979, 1508979, 1806393, 1508979, 1806393, 1800592,
+ 1800592, 1508979, 1800592, 1806393, 1508979, 1800592, 1508979, 1508979, 1508979, 1806393, 1508979,
+ 1806393, 1800592, 1508979, 1806393, 1806393, 2080927, 1800592, 1806393, 1508979, 1806393, 1575261,
+ 1800592, 1575261, 1800592, 1806411, 1508979, 1508979, 1806411, 1806411, 1575261, 1508979, 1806411,
+ 1806411, 1806393, 1800592, 1508979, 1508979, 1800592, 1508979, 1508979, 1806411, 1508979, 1806393,
+ 1806411, 1508979, 1508979, 1806411, 1800592, 1508979, 1508979, 1806411, 1806393, 1806393, 1800592,
+ 1508979, 1806393, 1508979, 1806393, 1508979, 1806411, 1806393, 1806393, 1800592, 1806393, 1508979,
+ 1806393, 1508979, 1508979, 1800592, 1800592, 1508979, 1806411, 1508979, 1806393, 1800592, 1800592,
+ 1508979, 1806393, 1806393, 1800592, 1806393, 1800592, 1806393, 1800592, 1806393, 1508979, 1508979,
+ 1806393, 1800592, 1508979, 1800592, 1806393, 1508979, 1800592, 1806411, 1806411, 1508979, 1800592,
+ 1800592, 1806393, 1800592, 1508979, 1806411, 1806411, 1812923, 1812923, 1806411, 1508979, 1806411,
+ 1806411, 1806393, 1806411, 1806411, 1806393, 1806411, 1806393, 1806393, 1806393, 1806411, 1806393,
+ 1806393, 1806411, 1806411, 1806411, 1806393, 1806393, 1806411, 1812923, 1806413, 1806393, 1806411,
+ 1508979, 1806393, 1806411, 1812923, 1806393, 1508979, 1806393, 1812923, 1806393, 1812923, 1508979,
+ 1508979, 1812923, 1508979, 1812923, 1508979, 1812923, 1508979, 1806393, 1806393, 1806393, 1806411,
+ 1806411, 1812923, 1806393, 1508979, 1812923, 1806411, 1508979, 1812923, 1806393, 1806411, 1806411,
+ 1812923, 1508979, 1806411, 1806411, 1806393, 1806393, 1806411, 1806393, 1806393, 1806411, 1806411,
+ 1806393, 1806411, 1806411, 1806393, 1806393, 1806393, 1806411, 1806393, 1806411, 1806411, 1806411,
+ 1806411, 1806411, 1806393, 1806411, 1806411, 1508979, 1806393, 1812923, 1806393, 1508979, 1806393,
+ 1806393, 1806411, 1812923, 1508979, 1812923, 1812923, 1508979, 1812923, 1508979, 1806393, 1806411,
+ 1806393, 1508979, 1806411, 1806393, 1806411, 1806393, 1806411, 1812923, 1806411, 1806393, 1508979,
+ 1812923, 1806393, 1508979, 1812923, 1508979, 1508979, 1812923, 1806393, 1806411, 1806411, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812922, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1806411, 1806393, 1800592, 1806393, 1800592, 1806393, 1806393, 1812922,
+ 1812922, 1806411, 1800592, 1806411, 1812922, 1806393, 1806393, 1806411, 1812922, 1806393, 1806411,
+ 1812922, 1800592, 1812922, 1812922, 1800592, 1812922, 1812922, 1800592, 1812922, 1806411, 1800592,
+ 1812922, 1800592, 1575261, 1575261, 1812922, 1575261, 1575261, 1575261, 1575261, 1575261, 1575261,
+ 1575261, 1812922, 1575261, 1812922, 1806411, 1806411, 1812922, 1806411, 1812922, 1812922, 1812922,
+ 1806442, 1812922, 1575261, 1812922, 1800592, 1800592, 1575261, 1800592, 1575261, 1812922, 1812922,
+ 1800592, 1812922, 1575261, 1575261, 1575261, 1575261, 1575261, 1812922, 1812922, 1575261, 1575261,
+ 1800592, 1575261, 1508979, 1575261, 1812922, 1575261, 1575261, 1812922, 1800592, 1575261, 1812922,
+ 1800592, 1575261, 1575261, 1800592, 1800592, 1575261, 1575261, 1575261, 1812922, 1575261, 1800592,
+ 1575261, 1508979, 2848358, 1575261, 1575261, 1812922, 1508979, 1812922, 1575261, 1800592, 1575261,
+ 1508979, 1508979, 1575261, 1812922, 1508979, 1575261, 1575261, 1575261, 1575261, 1575261, 1508979,
+ 1800592, 1575261, 1575261, 1508979, 1575261, 1575261, 1575261, 1508979, 1812922, 1800592, 1812922,
+ 1575261, 1800592, 1508979, 1800592, 1812922, 1575261, 1575261, 1806411, 1800592, 1575261, 1806411,
+ 2080927, 1806393, 1575261, 1806393, 1508979, 1575261, 1800592, 1806393, 1806411, 2080927, 1806411,
+ 1800592, 1800592, 2080927, 1806393, 1806393, 1508979, 1575261, 1800592, 1508979, 2080927, 1800592,
+ 1806393, 1800592, 1575261, 1806411, 1806393, 1575261, 1806411, 1800592, 2080927, 1575261, 1806393,
+ 1575261, 1806411, 1800592, 1575261, 1806411, 1800592, 1806411, 1575261, 2080927, 1806411, 1806411,
+ 1806393, 1575261, 1806411, 1800592, 1806393, 1575261, 1806411, 1575261, 1806411, 1806393, 1806411,
+ 1800592, 1806411, 1806393, 1575261, 1800592, 1806393, 1575261, 1575261, 1508979, 1800592, 1806393,
+ 1575261, 1508979, 1806393, 1800592, 1806393, 2080927, 1800592, 1508979, 1800592, 1806411, 1806393,
+ 1800592, 1806393, 1800592, 1575261, 1806411, 2080927, 1800592, 1575261, 1806411, 1806393, 1575261,
+ 1806411, 1575261, 1806393, 1800592, 1800592, 2080927, 1800592, 1508979, 2080927, 1575261, 1575261,
+ 1800592, 1575261, 1806411, 1575261, 1806393, 1806393, 1508979, 2080927, 1806411, 1800592, 1508979,
+ 2080927, 1575261, 1575261, 1575261, 1806411, 1508979, 2080927, 1575261, 1806411, 1575261, 1508979,
+ 1806411, 1575261, 1806393, 2080927, 1508979, 1806411, 2080927, 1575261, 1508979, 2080927, 1806411,
+ 1806393, 1508979, 1806411, 1806411, 1800592, 1800592, 1806411, 1806393, 1806411, 1806411, 1575261,
+ 2080927, 1575261, 1806411, 1575261, 1806393, 2080927, 1508979, 1806411, 1800592, 1575261, 1575261,
+ 1508979, 1800592, 1575261, 1508979, 1800592, 1806411, 1806393, 1800592, 1800592, 1575261, 1800592,
+ 1800592, 1806411, 1806393, 1800592, 2080927, 1800592, 2080927, 1806411, 1806393, 1800592, 1806393,
+ 1800592, 1806393, 1800592, 2080927, 1800592, 1508979, 1800592, 1800592, 1806411, 1800592, 1575261,
+ 1575261, 1806393, 2080927, 1806411, 1800592, 1508979, 1806393, 1800592, 1508979, 1575261, 1508979,
+ 1575261, 1806411, 1508979, 2080927, 1800592, 1806411, 1800592, 2080927, 1508979, 1508979, 1806411,
+ 1806393, 1800592, 1806393, 1508979, 1508979, 1575261, 2080927, 1800592, 1575261, 1800592, 1800592,
+ 1806393, 1575261, 1508979, 1806411, 1575261, 1806411, 1508979, 2080927, 1508979, 1806411, 1800592,
+ 1806411, 1800592, 1508979, 1575261, 1806393, 1800592, 1575261, 1800592, 1508979, 2080927, 1800592,
+ 1800592, 2080927, 1800592, 1508979, 1806393, 1800592, 1508979, 1575261, 1800592, 2080927, 1806393,
+ 1806411, 1575261, 1508979, 1806393, 1800592, 1508979, 2080927, 1508979, 2080927, 1800592, 2080927,
+ 1508979, 1800592, 1575261, 1508979, 1800592, 1800592, 1806393, 1508979, 1806411, 2080927, 1806411,
+ 1575261, 1508979, 1508979, 1800592, 1575261, 1508979, 1806393, 1806411, 1508979, 1508979, 1800592,
+ 177456, 1508979, 1806411, 1806411, 1575261, 1508979, 1508979, 1508979, 1800592, 1806412, 1806516,
+ 2080927, 1806412, 2080927, 1806412, 2080927, 1806412, 1806516, 1806412, 1806516, 2080927, 1806412,
+ 1806516, 1806516, 1806516, 1806516, 2080927, 1806412, 1806516, 1806412, 1806516, 1806516, 2080927,
+ 1806516, 2080927, 1806412, 2080927, 1806412, 2080927, 1806412, 1806516, 2080927, 1806412, 2080927,
+ 1806412, 2080927, 2080927, 2080927, 1806516, 1806516, 1806516, 1806412, 2080927, 1806412, 2080927,
+ 1806412, 1806516, 1806411, 2080927, 1806516, 1806412, 2080927, 1806516, 1806412, 2080927, 1806516,
+ 1806516, 1806412, 1806516, 1806412, 1806412, 1806516, 1806516, 2080927, 1806412, 1806516, 2080927,
+ 2080927, 2080927, 2080927, 1806516, 1806412, 1806516, 1806412, 2080927, 1806516, 1806412, 2080927,
+ 2080927, 2080927, 2080927, 2080927, 1806516, 1806412, 2080927, 1806516, 2080927, 223175, 2080927,
+ 2080927, 223175, 1806412, 2080927, 1806412, 1806412, 1806516, 1806516, 2080927, 1806412, 2080927,
+ 2080927, 1806516, 1806516, 2080927, 1806412, 2080927, 1806412, 1806412, 2080927, 1806412, 2080927,
+ 1806516, 1806412, 1806516, 1806412, 2080927, 1806412, 2080927, 1806412, 1806516, 2080927, 1806516,
+ 2080927, 1806516, 1806516, 2080927, 1806412, 1806412, 1806516, 1806516, 2080927, 2080927, 1806412,
+ 1806516, 1806412, 1806412, 1806412, 1806516, 1806516, 1806516, 1806412, 1806516, 2080927, 1806412,
+ 2080927, 1806412, 1806516, 1806516, 2080927, 1806516, 1806412, 2080927, 2080927, 1806516, 2080927,
+ 1806516, 2080927, 2080927, 1806516, 1806412, 1806412, 2080927, 2080927, 2080927, 1806412, 1806412,
+ 1806516, 1806412, 1806412, 1806412, 1806516, 1806412, 1806516, 1806412, 1806516, 1806516, 1806516,
+ 1806412, 1806412, 1806412, 2080927, 2080927, 1806516, 2080927, 1806412, 2080927, 1806412, 1806412,
+ 2080927, 1806516, 1812922, 1806516, 1806516, 1812922, 1806516, 1806412, 2080927, 1812922, 2080927,
+ 1812922, 2080927, 2080927, 1812922, 1806516, 2080927, 1806516, 1806412, 1806516, 1806412, 1812922,
+ 1812922, 2080927, 2080927, 2080927, 1806516, 1812922, 1806412, 1812922, 1812922, 1806412, 1806412,
+ 2080927, 1806412, 1806412, 1806516, 1806516, 1812922, 1812922, 1806516, 1812922, 1812922, 1806516,
+ 1812922, 1806516, 1812922, 1806516, 1812922, 1812922, 1812922, 1806516, 1812922, 1806516, 1806516,
+ 1812922, 1812922, 1806516, 1812922, 1812922, 1806516, 1806516, 1812922, 1806516, 1812922, 1812922,
+ 1812922, 1812922, 1812922, 1812922, 223175, 1806516, 1812922, 1812922, 1812922, 1806516, 1812922,
+ 1806516, 1806516, 1806516, 1812922, 1812922, 1806516, 1812922, 1812922, 1806516, 1806516, 1812922,
+ 1812922, 1806516, 1806516, 1812922, 1806516, 1806516, 2080927, 1812922, 2080927, 2080927, 1812922,
+ 1812922, 1812922, 2080927, 1812922, 1812922, 2080927, 2080927, 2080927, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 2080927, 1806412, 1806412, 1812922, 1806412, 1806412, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 1806412, 1812922, 2080927, 2080927, 1812922, 1812922, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 223175, 223175, 223175, 223175, 223175, 223175,
+ 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 1575261,
+ 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 1806412,
+ 223175, 223175, 1806412, 1806412, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175,
+ 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175,
+ 223175, 2092598, 223175, 223175, 1806412, 223175, 223175, 1806412, 1806516, 223175, 1806516, 1806412,
+ 1806516, 1806516, 1806412, 1806412, 1806516, 223175, 1806516, 1806412, 1806412, 1806516, 223175,
+ 1806412, 1806516, 223175, 1806412, 1806412, 223175, 223175, 223175, 223175, 1806412, 223175, 223175,
+ 1806412, 1806650, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412,
+ 1806412, 1806412, 223175, 1806412, 1806412, 1806516, 1806516, 1806516, 1806412, 1806412, 1806516,
+ 1806516, 1806516, 1806516, 1806516, 1806412, 1806516, 1806516, 1806412, 1806412, 1806412, 1806516,
+ 1806412, 1806412, 1806516, 1806516, 1806516, 1806412, 1806412, 1806516, 1806412, 1806412, 1806412,
+ 1806516, 1806516, 1575272, 1575272, 1575272, 1575272, 852176, 1575272, 1575272, 1575272, 1575272,
+ 1806516, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 852176,
+ 1575272, 1575272, 852176, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1806414, 1806497, 1806251, 1806497, 1806497, 1806497, 1806497,
+ 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1575272, 1575272, 1575272, 1806497,
+ 1806497, 1575272, 1575272, 1575272, 1806497, 1806497, 1806497, 1575272, 1806497, 1575272, 1806497,
+ 1806497, 1575272, 1575272, 1575272, 1575272, 1806497, 1806497, 1806497, 1806497, 2092598, 1589155,
+ 1806414, 1806450, 1806450, 1806450, 1806450, 1589155, 1589155, 1508983, 1806450, 1806450, 1589155,
+ 1806450, 1806450, 1806414, 1806450, 1589155, 1806414, 1508983, 1589155, 1589155, 1508983, 1589155,
+ 1508983, 1806450, 1806414, 1806450, 1806450, 1806450, 1589155, 1508983, 1806450, 1589155, 1508983,
+ 1589155, 1806450, 1589155, 1589155, 1806414, 1589155, 1508983, 1589155, 1589155, 1806414, 1806450,
+ 1589155, 1806450, 1806414, 1508983, 1589155, 1589155, 1589155, 1806450, 1806450, 1806450, 1806414,
+ 1806450, 1806450, 1806450, 1589155, 1806450, 1806414, 1589155, 1806414, 1589155, 1806450, 1589155,
+ 1806414, 1806450, 1806414, 1589155, 1589155, 1589155, 1806450, 1806450, 1589155, 1806251, 1806450,
+ 1806251, 1806450, 1806251, 1806414, 1589155, 1806414, 1806450, 1589155, 1806450, 1806414, 1589155,
+ 1508983, 1589155, 1589155, 1589155, 1806251, 1806450, 1806450, 1806450, 1806251, 1806450, 1589155,
+ 1806450, 1806450, 1589155, 1806414, 1589155, 1806450, 1589155, 1806414, 1806251, 1589155, 1806414,
+ 1806251, 1806450, 1806251, 1806450, 1806414, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450,
+ 1806450, 1806450, 1806450, 1806450, 1806450, 1806251, 1806450, 1589155, 1806450, 1806251, 1589155,
+ 1806251, 1806414, 1589155, 1589155, 1806414, 1806251, 1806414, 1806450, 1589155, 1589155, 1806414,
+ 1806414, 1589155, 1806414, 1589155, 1589155, 1806414, 1806414, 1806251, 1806450, 1806450, 1806414,
+ 1806450, 1806414, 1589155, 1806414, 173862, 1806414, 1806450, 1806414, 1806450, 1806450, 1806414,
+ 1806251, 1806414, 1806450, 1806251, 1806450, 1589155, 1806414, 1806450, 1806450, 1806414, 1806251,
+ 1806450, 1806251, 1806450, 1806414, 1589155, 1806414, 1589155, 1806450, 1806414, 1589155, 1806414,
+ 1806450, 1589155, 1806450, 1589155, 1589155, 1806414, 1806251, 1589155, 1589155, 1806414, 1806450,
+ 1806450, 1806251, 1589155, 1806450, 1806414, 1806251, 1806414, 1806414, 1806450, 1806414, 1589155,
+ 1806414, 1806251, 1806414, 1806414, 1806450, 1806251, 1806414, 1806251, 1806414, 1806414, 1806414,
+ 1806414, 1806251, 1806251, 1806414, 1806251, 1806251, 1806414, 1806251, 1806251, 1806414, 1806414,
+ 1806414, 1806414, 1806414, 1806414, 1806414, 1806414, 1806414, 1806414, 1806450, 1806251, 1806414,
+ 1806450, 1806414, 1806251, 1806251, 1806414, 1806251, 1806450, 1806414, 1806414, 1806251, 1806414,
+ 1806450, 1806251, 1806414, 1806251, 1806450, 1806414, 1806450, 1806450, 1806251, 1806251, 1806414,
+ 1806414, 1806414, 1806414, 1806251, 1806251, 1806414, 1806414, 1806251, 1806251, 1806251, 1806414,
+ 1806414, 1806414, 1806251, 1806251, 1806450, 1806414, 1806450, 1806450, 1806251, 1806414, 1806251,
+ 1806251, 1806251, 1806414, 1806414, 1806414, 1806414, 1806414, 1806251, 1806251, 1806414, 1806414,
+ 1806251, 1806251, 1806414, 1806251, 1806414, 1806251, 1806414, 1806251, 1806414, 1806414, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 1806414, 1806251, 1806251, 1806251, 1806414, 1806251,
+ 1806251, 1806251, 1806414, 1806414, 1806251, 1806251, 1806251, 1806414, 1806414, 1806251, 1806414,
+ 1806251, 1806251, 1806414, 1806414, 1806251, 1806414, 1806414, 1806414, 1806251, 1806251, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 2848360, 1806251, 1806251, 1575272, 1806251, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251,
+ 1806251, 1508983, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806450, 1806450,
+ 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450,
+ 1806450, 2848362, 1806450, 1806450, 1806450, 1806450, 1806450, 173862, 173862, 1806450, 1806450,
+ 1806450, 1806450, 1806450, 1806450, 1806414, 1806414, 1806450, 1806414, 1806450, 1806414, 1806414,
+ 1806414, 1806450, 1806414, 1806414, 1806450, 1806450, 1806450, 1806450, 1806498, 1806498, 1575276,
+ 1806498, 1575276, 1806498, 1589155, 1575276, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498,
+ 1806498, 1806498, 1806498, 1806450, 1806498, 1806498, 1806498, 1575276, 1575276, 1575276, 1575276,
+ 1575276, 1575276, 1806498, 1575276, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498, 1806498,
+ 1806498, 1575276, 1575276, 1575276, 1806498, 1806498, 1806498, 1575276, 1575276, 1575276, 1575276,
+ 1806498, 1806498, 1575276, 1575276, 1575276, 1806498, 1806498, 1575276, 1806498, 1575276, 1806498,
+ 1806498, 1575276, 1806498, 1806498, 1806498, 1806498, 1575276, 1806498, 1575276, 1806498, 1575276,
+ 1806498, 1575276, 1806498, 1575276, 1575276, 1806498, 1575276, 1806498, 1575276, 1575276, 1575276,
+ 1806498, 1806498, 1575276, 1806498, 1575276, 1806498, 1575276, 1806498, 1575276, 1806498, 1806417,
+ 1806498, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498, 1806498, 1575276, 1575276, 1806498,
+ 1575276, 1806498, 1575276, 1575276, 1575276, 1806498, 1806498, 1575276, 1806498, 1806498, 1575276,
+ 1806498, 1575276, 1806498, 1806498, 1575276, 1575276, 1806498, 1575276, 1806498, 1806498, 1575276,
+ 1575276, 1806498, 1806498, 1806498, 1575276, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498,
+ 1575276, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983,
+ 1806500, 1806500, 1806500, 1508983, 1806500, 1806500, 1508983, 1508983, 1508983, 1508983, 1508983,
+ 1806500, 1806500, 1806500, 1508983, 1806500, 1806500, 1508983, 1575276, 1575276, 1508983, 1508983,
+ 1806500, 1508983, 1806500, 1508983, 1508983, 1508983, 1575276, 1508983, 1806500, 1806500, 1575276,
+ 1508983, 1508983, 1575276, 1508983, 1575276, 1575276, 1508983, 1806500, 1589155, 1508983, 1806500,
+ 1575276, 1508983, 1508983, 1806500, 1575276, 1806500, 1806500, 1806500, 1508983, 1806500, 1575276,
+ 1508983, 1575276, 1575276, 1806500, 1508983, 1806500, 1575276, 1806500, 1575276, 1806500, 1575276,
+ 1575276, 1806500, 1575276, 1806498, 1806500, 1508983, 1806500, 1806500, 1575276, 1806500, 1508983,
+ 1806500, 1575276, 1575276, 1806500, 1508983, 1575276, 1508983, 1806500, 1508983, 1575276, 1508983,
+ 1575276, 1508983, 1575276, 1575276, 1575276, 1806500, 1575276, 1806500, 1508983, 1806500, 1508983,
+ 1806500, 1508983, 1806500, 1508983, 1575276, 1806500, 1508983, 1575276, 1575276, 1806500, 1508983,
+ 1575276, 1508983, 1806500, 1508983, 1806500, 1575276, 1575276, 1575276, 1806500, 1806500, 1806500,
+ 1806500, 1575276, 1806500, 1806500, 1575276, 1806500, 1575276, 1575276, 1575276, 1575276, 1575276,
+ 1806500, 1575276, 1806500, 1508983, 1806500, 1806500, 1508983, 1575276, 1806500, 1508983, 1575276,
+ 1508983, 1508983, 1806500, 1508983, 1806500, 1575276, 1806500, 1806500, 1575276, 1575276, 1508983,
+ 173020, 1806500, 1575276, 1508983, 1575276, 1806500, 173020, 1508983, 1575276, 1575276, 1575276,
+ 1508983, 1589155, 1508983, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155, 1589155,
+ 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155, 1589155, 1508983, 1589155, 1589155,
+ 1589155, 1508983, 1508983, 1589155, 1589155, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155,
+ 1589155, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155, 1589155, 1589155, 1589155, 1508983,
+ 1589155, 1589155, 1589155, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1589155,
+ 1508983, 1589155, 1589155, 1508983, 1508983, 1508983, 1589155, 1589155, 1589155, 1508983, 1508983,
+ 173020, 1589155, 1508983, 1589155, 1508983, 1589155, 1508983, 1508983, 1508983, 1508983, 1589155,
+ 1508983, 1508983, 1508983, 1589155, 1508983, 1589155, 1508983, 1508983, 1508983, 1508983, 1508983,
+ 1508983, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155,
+ 173020, 173020, 1806497, 1806513, 173020, 1806513, 173020, 173020, 1806513, 1806497, 1806497, 173020,
+ 1806513, 173020, 1806513, 173020, 173020, 1806513, 1806497, 1806513, 173020, 1806513, 173020, 173020,
+ 1806513, 1806497, 173020, 1806513, 173020, 173020, 1806513, 173020, 1806497, 173020, 1806497, 173020,
+ 173020, 173020, 173020, 173020, 173020, 1806513, 1806513, 1806513, 1806497, 1806513, 173020, 1806497,
+ 173020, 173020, 1806497, 173020, 1806513, 173020, 1806513, 1806513, 1806513, 1806513, 1806513, 173020,
+ 1806513, 1806513, 1806497, 1806497, 173020, 1806513, 1806497, 1806513, 173020, 1806497, 173020, 173020,
+ 1806513, 1806497, 173020, 1806513, 173020, 173020, 173020, 173020, 173020, 173020, 1806497, 1806513,
+ 1806513, 173020, 173020, 1806497, 1806513, 1806497, 1806513, 173020, 173020, 1806513, 173020, 1806513,
+ 1806513, 1806513, 173020, 1806513, 261365, 173020, 1806513, 173020, 1806513, 1806513, 173020, 1806513,
+ 173020, 1806513, 1806513, 1806513, 173020, 173020, 173020, 173020, 1806513, 173020, 1806513, 1806513,
+ 173020, 1806513, 1806513, 1806513, 1806513, 173020, 1806513, 173020, 1806513, 173020, 1806513, 1806497,
+ 1806497, 1806497, 1806497, 1806497, 173020, 1806513, 1806513, 1806513, 1806513, 1806513, 1806513,
+ 1806513, 1806513, 1806513, 173020, 173020, 173020, 1806513, 1806513, 1806513, 1806497, 1806513, 173020,
+ 1806513, 1806497, 1806513, 1806513, 173020, 1806497, 1806513, 173020, 1806513, 1806497, 1806417,
+ 1806417, 1806417, 1806417, 1806417, 173020, 173020, 1806417, 1806417, 1575281, 173020, 1806497, 1806497,
+ 1806497, 173020, 1806497, 173020, 1806497, 1806497, 1575281, 1575281, 1806497, 173020, 1806497, 1575281,
+ 1806497, 1806497, 1806497, 1575281, 1806497, 173020, 1575281, 1806497, 1806497, 1806497, 1806417,
+ 1806417, 1806417, 1575281, 1806497, 173020, 1806497, 1575281, 1806497, 1806497, 1806497, 1575281,
+ 1575281, 1806497, 1806497, 173020, 1575281, 1575281, 173020, 1806497, 173020, 1806497, 1806497, 1575281,
+ 1575281, 173020, 1575281, 1806497, 1806497, 1806497, 1575281, 1575281, 1806497, 1806497, 173020,
+ 1806497, 1575281, 1575281, 173020, 1575281, 1575281, 1806497, 1806497, 1575281, 1575281, 1806497,
+ 1806497, 1575281, 173020, 1575281, 1806497, 1575281, 1575281, 173020, 173020, 173020, 173020, 173020,
+ 1806497, 173020, 1575281, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497,
+ 1806497, 1806497, 1575281, 1806497, 1575281, 1806497, 1806497, 1806497, 1575281, 1575281, 1806497,
+ 1806497, 1575281, 1806497, 1806497, 1806497, 1806497, 1575281, 1806497, 1806497, 1575281, 1575281,
+ 1806497, 1806497, 1806497, 1806497, 1806513, 1806513, 1806497, 1806497, 1806497, 1806417, 1575281,
+ 1575281, 1806417, 1806417, 1806417, 1575276, 1575281, 1806417, 1806417, 1806417, 1575281, 1575281,
+ 1575281, 1806417, 1806417, 1575281, 1806417, 1575281, 1575281, 1575281, 1806498, 1806417, 1806417,
+ 1575281, 1575281, 1806498, 1806498, 1806417, 1806498, 1806498, 1575281, 1575281, 1575281, 1575281,
+ 1806417, 1575281, 1806417, 1575281, 1806498, 1806498, 1806417, 1806498, 1806498, 1575281, 1806498,
+ 1806417, 1575281, 1806417, 1575281, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417,
+ 1806417, 1806417, 1806417, 1575281, 1806417, 1575281, 1575281, 1575281, 1575281, 1806417, 1806417,
+ 1806417, 1806417, 1575281, 1575281, 1806417, 1575281, 1806417, 1806417, 1806417, 1806417, 1575281,
+ 1575281, 1806417, 1575281, 1806417, 1575281, 1575281, 261365, 1575281, 1806417, 1575281, 1806498,
+ 1575281, 261365, 1806417, 1806498, 261365, 1806417, 1575281, 261365, 1806417, 1806498, 1806417, 1575281,
+ 1575281, 1806417, 1806498, 1806498, 1806417, 1575281, 1806498, 1575281, 1806498, 1806497, 1575281,
+ 1806417, 1806498, 1575281, 1575281, 1806417, 1806417, 1806498, 1575281, 1806498, 1806498, 1806417};
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java
new file mode 100644
index 00000000000..352fd261908
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java
@@ -0,0 +1,695 @@
+/*
+ * Created on Jun 13, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.define.blam.operation;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Gamma2 {
+ public static final int[] gammaIds2 =
+ new int[] {1806417, 1806498, 1806498, 1806417, 1806498, 1806417, 1806498, 1806417, 1575281, 1575281, 1575281,
+ 1806417, 1575281, 1575281, 1806498, 1575281, 261365, 1575281, 1806498, 1806417, 1806498, 1806417,
+ 1806417, 1806417, 1806417, 1806417, 1575281, 1806417, 1806417, 1806417, 1806417, 1575281, 1575281,
+ 1575281, 1806498, 1575281, 1575281, 1806498, 1575281, 1575281, 1575281, 1806417, 1806417, 1575281,
+ 1806417, 1806498, 1575281, 1806417, 1806498, 1806498, 1575281, 1806417, 1575281, 1575281, 1806417,
+ 1806498, 1575281, 1806498, 1806498, 1806417, 1575281, 1806417, 1806498, 1806417, 1575281, 1806417,
+ 1806498, 1806417, 1806417, 1575281, 1806498, 1806498, 1575281, 1806498, 1575281, 1806417, 1806417,
+ 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 261365,
+ 173020, 1806417, 1806417, 173020, 1806417, 1806417, 1806417, 261365, 173020, 1806417, 173020, 173020,
+ 1806417, 173020, 173020, 1806417, 173020, 173020, 1806417, 173020, 173020, 1806417, 173020, 1806417,
+ 173020, 173020, 173020, 1806417, 173020, 1806417, 173020, 1806417, 173020, 173020, 1806417, 173020,
+ 173020, 173020, 173020, 173020, 173020, 173020, 173020, 1806417, 173020, 173020, 173020, 1806417,
+ 173020, 1806438, 1807086, 1807086, 1806438, 1807086, 1806252, 1807086, 1806252, 1806438, 1807086,
+ 1806252, 1807086, 1806438, 1806438, 1806438, 1807086, 1807086, 1806252, 1807086, 1806438, 1807086,
+ 1806438, 1806252, 1806252, 1806252, 1806252, 1807086, 1807086, 1806252, 1806252, 1807086, 1806438,
+ 1806252, 1807086, 1806252, 1806252, 1807086, 1806252, 1806252, 1807086, 1806252, 1806438, 1807086,
+ 1807086, 1807086, 1806252, 1806438, 1806252, 1806438, 1806438, 1806252, 1575289, 1806438, 1575289,
+ 1806252, 1807086, 1806449, 1806449, 1807086, 1806438, 1806438, 1806252, 1806252, 1806449, 1806252,
+ 1806449, 1806449, 1807086, 1806449, 1806438, 1807086, 1807086, 1806438, 1806391, 1806391, 1806438,
+ 1806391, 1806252, 1806391, 1806391, 1807086, 1806391, 1806438, 1807086, 1806438, 1806252, 1807086,
+ 1806438, 1806252, 1807086, 1806438, 1806252, 1806252, 1806438, 1807086, 1807086, 1806438, 1806252,
+ 1806252, 1806438, 1806391, 1806438, 1807086, 1806252, 1806391, 1806252, 1806391, 1806391, 1807086,
+ 1806391, 1806252, 1806438, 1806391, 1806438, 1806391, 1806252, 1806391, 1806391, 1807086, 1806252,
+ 1806252, 1806391, 1807086, 1806391, 1806252, 1807086, 1806438, 1806438, 1806391, 1807086, 1806438,
+ 1806391, 1806438, 1806438, 1807086, 1806438, 1806391, 1806438, 1806438, 1806391, 1806391, 1806438,
+ 1806252, 1806391, 1807086, 1806438, 1806438, 1806391, 1806391, 1806438, 1807086, 1806391, 1806391,
+ 1807086, 1575289, 1807086, 1575289, 1806391, 1806245, 1575289, 1806391, 1575289, 1807086, 1575289,
+ 1806245, 1806252, 1806245, 1806391, 1806245, 1806252, 1806389, 1575289, 1575289, 1806391, 1806245,
+ 1575289, 1807037, 1806391, 1806245, 1575289, 1806391, 1575289, 1806391, 1575289, 1806391, 1807037,
+ 1806252, 1807037, 1575289, 1807037, 1806391, 1806391, 1807037, 1806391, 1575289, 1807037, 1806391,
+ 1806391, 1806391, 1575289, 1806252, 1575289, 1806391, 1575289, 1806391, 1806252, 1575289, 1575289,
+ 1806391, 1806252, 1806252, 1806391, 1575289, 1806245, 1806245, 1806245, 1806252, 1806245, 1575289,
+ 1575289, 1806391, 1806391, 1806391, 1806391, 1806252, 1806245, 1806245, 1575289, 1806245, 1575289,
+ 1806391, 1806252, 1806245, 1806391, 1806252, 1807037, 1806245, 1806391, 1575289, 1806252, 1575289,
+ 1806391, 1575289, 1575289, 1807037, 1806245, 1806252, 1806252, 1806391, 1807037, 1806391, 1806245,
+ 1575289, 1575289, 1806391, 1807037, 1807037, 1806391, 1806245, 1807037, 1806391, 1806252, 1806245,
+ 1806252, 1807037, 1806391, 1806252, 1807037, 1575289, 1807037, 1807037, 1575289, 1806245, 1575289,
+ 1806245, 1575289, 1806244, 1806252, 1806245, 1806252, 1575289, 1806391, 1575289, 1575289, 1806252,
+ 1807037, 1575289, 1806252, 1806252, 1806252, 1575289, 1806245, 1806245, 1806391, 1806245, 1806252,
+ 1806391, 1806245, 1806391, 1806252, 1575289, 1806252, 1575289, 1806245, 1806391, 1806252, 1806391,
+ 1806252, 1806391, 1806245, 1806252, 1575289, 1806252, 1806391, 1806391, 1806252, 1806252, 1575289,
+ 1806252, 1807037, 1575289, 1806252, 1806391, 1806252, 1575289, 1806391, 1807037, 1806391, 1807037,
+ 1575289, 1806391, 1806252, 1806391, 1806252, 1807037, 1575289, 1806391, 1807037, 1575289, 1806391,
+ 1807037, 1575289, 1806252, 1807037, 1575289, 1807037, 1807037, 1807037, 1807037, 1806391, 1806391,
+ 1807037, 1806391, 1806252, 1807037, 1806252, 1807037, 1806391, 1806252, 1806252, 1806252, 1807037,
+ 1806391, 1807037, 1807037, 1806391, 1806252, 1807037, 1806391, 1806252, 1575289, 1807037, 1806252,
+ 1806391, 1806252, 1575289, 1806391, 1806252, 1807037, 1806252, 1806391, 1806252, 1806391, 1807037,
+ 1806391, 1575289, 1806252, 1807037, 1575289, 1806391, 1575289, 1806252, 1806252, 1806391, 1575289,
+ 1806391, 1807037, 1575289, 1806252, 1807037, 1575289, 1575289, 1807037, 1806252, 1807037, 1806252,
+ 1575289, 1806252, 1807037, 1575289, 1806252, 1575289, 1806252, 1806252, 1807037, 1807037, 1164028,
+ 1807037, 1806252, 1575289, 1575289, 1807037, 1806252, 1807037, 1575289, 264571, 1807037, 1807037,
+ 1575289, 1806391, 1806252, 1575289, 1807037, 1806252, 1806252, 1575289, 1806252, 1575289, 1806252,
+ 1807037, 1807037, 1807037, 1575289, 1806391, 1575289, 1807037, 1807037, 1806391, 1806252, 1806252,
+ 1806391, 1806252, 1807037, 1575289, 1807037, 1575289, 1806252, 1806449, 1806244, 1806244, 1806449,
+ 1806389, 1806449, 1806389, 1806449, 1806244, 1806449, 1806389, 1806449, 1806244, 1806449, 1806244,
+ 1806244, 1806244, 1806449, 1806449, 1806244, 1806389, 1806244, 1806244, 1806244, 1806244, 1806244,
+ 1806449, 1806449, 1806449, 1806449, 1806449, 1806449, 1806244, 1806244, 1806389, 1806449, 1807089,
+ 1806244, 1806389, 1806449, 1806449, 1806244, 1806244, 1806244, 1806244, 1806244, 1806449, 1806244,
+ 1806449, 1806449, 1806244, 1806244, 1806389, 1806244, 1806244, 1806389, 1806244, 1806449, 1806244,
+ 1806449, 1806389, 1806244, 1806389, 1806449, 1806449, 1806244, 1806449, 1806244, 1806389, 1806244,
+ 1806389, 1806449, 1806244, 1806244, 1806449, 1806244, 1806449, 1806389, 1806244, 1806244, 1806389,
+ 1806244, 1806389, 1806244, 1806389, 1806244, 1806449, 1806449, 1806244, 1806244, 1806244, 1806449,
+ 1806244, 1806244, 1806449, 1806389, 1806449, 1806449, 1806449, 1806449, 1806244, 1806449, 1806244,
+ 1806244, 1806449, 1806449, 1806244, 1806389, 1806243, 1806389, 1806244, 1806244, 1806389, 1806389,
+ 1806449, 1806449, 1806244, 1806449, 1806389, 1806449, 1806449, 1806244, 1806449, 1806244, 1806244,
+ 1806449, 1806244, 1806449, 1806244, 1806449, 1806244, 1806449, 1806244, 1806449, 1806449, 1806244,
+ 1806244, 1806244, 1806449, 1806244, 1806244, 1806449, 1806449, 1806244, 1806244, 1806449, 1806449,
+ 1806449, 1806449, 1806244, 1806449, 1806449, 1806389, 1806244, 1806244, 1806449, 1806244, 1806389,
+ 1806449, 1806449, 1806244, 1806449, 1806389, 1806449, 1806389, 1806449, 1806449, 1806244, 1806244,
+ 1806244, 1806389, 1806449, 1806244, 1806244, 1806389, 1806244, 1806389, 1806244, 1806449, 1806244,
+ 1806244, 1807086, 1806244, 1806449, 1806449, 1806252, 1806252, 1806252, 1806449, 1806244, 1806449,
+ 1806244, 1806449, 1806449, 1806244, 1806449, 1806449, 1806449, 1806449, 1806449, 1806449, 1806449,
+ 1806449, 1806449, 1806449, 1806244, 1806449, 1806244, 1806244, 1806449, 1806449, 1806244, 1806449,
+ 1806449, 1806449, 1806244, 1806244, 1806449, 1806449, 1806449, 1806244, 1806244, 1806449, 1806449,
+ 1806244, 1806244, 1806244, 1806449, 1806449, 1806449, 1806244, 1806244, 1806449, 1806244, 1806244,
+ 1806449, 1806244, 1806449, 1806244, 1806449, 1806449, 1806244, 1806449, 1806449, 1806244, 1806449,
+ 1806449, 1806244, 1806244, 1806449, 1806449, 1806244, 1806438, 1806244, 264571, 1806436, 264571,
+ 1806436, 264571, 264571, 1806436, 264571, 264571, 264571, 264571, 1806436, 1806436, 1806436, 264571,
+ 1806436, 264571, 264571, 264571, 264571, 264571, 1806436, 264571, 1806436, 1806436, 264571, 264571,
+ 264571, 264571, 264571, 264571, 1806436, 264571, 264571, 264571, 1806436, 264571, 1806436, 264571,
+ 264571, 264571, 1806436, 264571, 264571, 264571, 1806436, 264571, 264571, 264571, 1806436, 264571,
+ 264571, 1806436, 264571, 264571, 264571, 1806436, 264571, 1806389, 1806436, 1806436, 1807089, 1806389,
+ 1806389, 1807089, 1806389, 1807089, 264571, 1806436, 1806436, 264571, 1806389, 1806436, 1806389, 264571,
+ 1807089, 1807089, 264571, 1807089, 1806436, 1807089, 1806436, 1806436, 1806436, 1806389, 1806436,
+ 1806389, 264571, 1806436, 264571, 1806436, 1807089, 1806436, 1806436, 1806389, 264571, 1806436, 1806436,
+ 1806436, 1806389, 264571, 1806243, 1806436, 1807089, 264571, 1806436, 1806243, 264571, 1806243, 1807089,
+ 264571, 264571, 1807089, 264571, 1807089, 264571, 264571, 264571, 1806243, 1806243, 264571, 1806243,
+ 264571, 1807089, 1806436, 1806436, 264571, 1806436, 264571, 264571, 1806436, 1806436, 1806436, 1806436,
+ 1806436, 264571, 264571, 1806436, 1806436, 1806436, 264571, 264571, 1806436, 264571, 264571, 1806244,
+ 1806389, 1806244, 1806249, 1806244, 1806389, 1806244, 1806389, 1806244, 1806389, 1806389, 1806389,
+ 1806389, 1806389, 1806389, 1806244, 1806389, 1806244, 1806389, 1806389, 1806389, 1806389, 1806389,
+ 1806389, 1806389, 1806389, 1806244, 1806244, 1806244, 1806389, 1806389, 1543816, 1806389, 1806389,
+ 1806389, 1806389, 1806389, 1806252, 1806389, 1806389, 1806389, 1806389, 1806389, 1164028, 1806389,
+ 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806436, 264571, 1806436,
+ 1806389, 1806436, 264571, 264571, 264571, 264571, 1806389, 264571, 1806436, 1806389, 1806389, 264571,
+ 1806389, 1806436, 1806389, 1806436, 264571, 1806389, 264571, 1806436, 264571, 1806389, 1806389, 1806389,
+ 1806389, 1806436, 264571, 1806389, 1806389, 1806389, 264571, 1806389, 264571, 1806389, 1806436, 1806389,
+ 264571, 264571, 1806389, 264571, 1806389, 264571, 1806389, 1806389, 1806389, 264571, 1806389, 264571,
+ 1806389, 264571, 264571, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 264571,
+ 1806389, 1806389, 264571, 1806389, 264571, 264571, 1806389, 1806389, 264571, 1806389, 264571, 1806389,
+ 1807084, 1807084, 1806249, 1807089, 1807084, 1806249, 1807089, 1806243, 1807084, 1806243, 1807089,
+ 1807084, 1807089, 1806243, 1807084, 1807089, 1807089, 1807084, 1807089, 1807084, 1806243, 1806249,
+ 1806243, 1806243, 1807084, 1807089, 1806243, 1807084, 1806249, 1807089, 1806243, 1806243, 1807089,
+ 1807084, 1806243, 1807089, 1807089, 1806243, 1807084, 1806243, 1807089, 1806243, 1807089, 1807089,
+ 1806243, 1807084, 1807089, 1806243, 1807089, 1807084, 1806243, 1806243, 1806243, 1806243, 1807089,
+ 1807084, 1807089, 1807084, 1806243, 1806243, 1807089, 1807084, 1807089, 1807084, 1806249, 1807089,
+ 1806249, 1807084, 1807084, 1806243, 1806249, 1807089, 1806249, 1806249, 1807084, 1806249, 1806243,
+ 1807084, 1806243, 1807084, 1806243, 1806249, 1807089, 1807084, 1807089, 1807084, 1806243, 1807084,
+ 1806243, 1807089, 1807084, 1806249, 1806243, 1807089, 1807089, 1806249, 1806249, 1806249, 1807089,
+ 1806243, 1806249, 1807089, 1807084, 1806249, 1807089, 1807089, 1806249, 1807089, 1807084, 1806243,
+ 1807089, 1807089, 1806249, 1806249, 1806243, 1806243, 1806249, 1807089, 1806243, 1806243, 1806243,
+ 1807084, 1807089, 1806249, 1807084, 1806249, 1806438, 1806438, 1806438, 1806243, 1806438, 1807084,
+ 1807089, 1806249, 1806243, 1806243, 1806249, 1806243, 1806249, 1806438, 1806243, 1806438, 1806243,
+ 1807084, 1806243, 1806249, 1806243, 1806243, 1806243, 1806243, 1807084, 1807086, 1807084, 1806243,
+ 1807086, 1807086, 1806243, 1807084, 1807084, 1806243, 1807084, 1807089, 1806243, 1806249, 1807089,
+ 1806243, 1807084, 1807084, 1807089, 1807089, 1807084, 1807089, 1807084, 1807084, 1807084, 1807084,
+ 1806249, 1807089, 1806243, 1807089, 1807089, 1806249, 1807084, 1807089, 1807084, 1807084, 1806243,
+ 1806243, 1806249, 1807084, 1807089, 1806243, 1806243, 1806243, 1806243, 1806243, 1806243, 1807084,
+ 1806249, 1806249, 1807084, 1807084, 1807084, 1807084, 1806243, 1806243, 1807084, 1806243, 1806249,
+ 1807084, 1806249, 1807084, 1807084, 1807084, 1807084, 1806249, 1807084, 1806249, 1806243, 1806249,
+ 1806243, 1807084, 1806249, 1807084, 1807084, 1807084, 1806243, 1807084, 1806249, 1807084, 1807084,
+ 1806243, 1806243, 1807084, 1806243, 1806249, 1806243, 264571, 264571, 1806249, 1807084, 1807089,
+ 1806438, 1807086, 1806438, 264571, 1807089, 1806438, 1807086, 1806438, 1807086, 1806243, 1807089,
+ 1806243, 1806438, 264571, 1807086, 1806243, 1807089, 1807086, 264571, 1807086, 1806438, 1807089,
+ 1806438, 1806438, 1806438, 1807086, 1807086, 264571, 1806438, 1807086, 1806243, 1807089, 1807086,
+ 1806438, 1807086, 1806243, 1807089, 1807086, 1806438, 1807086, 264571, 1807086, 1806438, 1806438,
+ 1807089, 1806438, 1807086, 1806438, 1807086, 1806438, 1807089, 1807086, 1806438, 1807086, 1806438,
+ 1807086, 264571, 1806243, 1807086, 1807086, 1807089, 1806438, 1806438, 1806438, 1806243, 1806438,
+ 1807089, 1806438, 1807086, 1806243, 264571, 264571, 1806438, 1806438, 1806438, 1806243, 264571, 1806438,
+ 264571, 1806438, 1807086, 1806243, 1806243, 1807089, 1807089, 264571, 1807089, 264571, 1807086, 1807089,
+ 1806249, 1806438, 1807089, 1807086, 1806438, 1806243, 1806243, 1807086, 1806438, 1164028, 264571,
+ 1807086, 1806249, 264571, 1806249, 1807089, 1807086, 1806438, 1806249, 1806438, 1806438, 1806243,
+ 1806438, 1806243, 264571, 1807086, 1806438, 1806249, 1807086, 1806249, 1807086, 1806438, 1806249,
+ 264571, 1806243, 264571, 1806243, 1807086, 1807086, 1807084, 1807089, 1807086, 1807089, 1807089,
+ 1807086, 1807086, 1806243, 1807086, 1807089, 1807086, 1807089, 1807089, 1806243, 1807089, 1806438,
+ 1807086, 1807086, 1807084, 1806438, 1807089, 1806243, 1806438, 1807086, 1807089, 1807084, 1807086,
+ 1807084, 1807089, 1807084, 1806438, 1807084, 1807089, 1806243, 1806438, 1807089, 1807086, 1806438,
+ 1807086, 1806438, 1807089, 1807086, 1807089, 1806438, 1807089, 1807086, 1806438, 1807086, 1807089,
+ 1806438, 1807089, 1807089, 1807086, 1807089, 1806438, 1807086, 1807089, 1807086, 1806438, 1806243,
+ 1806243, 1807086, 1807089, 1807086, 264571, 1807089, 1807086, 1806243, 1807086, 1806438, 1806438,
+ 1807089, 1806243, 1807086, 1806243, 1806243, 264571, 1806438, 1807089, 264571, 1807089, 1807086,
+ 1806438, 1806438, 1806243, 1807086, 1806243, 1806438, 264571, 1807086, 1806438, 264571, 1807086,
+ 1806438, 1806243, 1807089, 1806438, 1806243, 264571, 1807089, 1807086, 1806438, 1806243, 1807089,
+ 1806243, 264571, 1807089, 1806438, 1807089, 1807086, 1806438, 1807086, 1806243, 1807086, 1806438,
+ 1806243, 1807086, 1806438, 1807086, 1806438, 1806243, 1807089, 1806438, 1807089, 1807086, 1806438,
+ 1807089, 1807086, 1806438, 1806438, 1806243, 1807089, 1806243, 1807089, 1807086, 1807086, 1807089,
+ 1806436, 1807089, 1807086, 1807089, 1807086, 1806243, 1807089, 1807086, 1806438, 1806243, 1806243,
+ 1806400, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 177459, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806445, 1806437, 1806445, 1806249,
+ 1806437, 1806437, 1806445, 1806445, 1806445, 1806249, 1806445, 1806249, 1806445, 1806249, 1806249,
+ 1806445, 1806437, 1806445, 1806249, 1806437, 1806437, 1806437, 1806445, 1806249, 1806249, 1806249,
+ 1806445, 1806445, 1806249, 1806437, 1806445, 1806445, 1806445, 1806445, 1806445, 1806437, 1806445,
+ 1806445, 1806445, 1806445, 1806437, 1807088, 1806445, 1807088, 1807088, 1807088, 1806249, 1806249,
+ 1806445, 1806445, 1806249, 1806445, 1806437, 1806445, 1806437, 1806437, 1806445, 1806249, 1806249,
+ 1806445, 1806445, 1806249, 1806249, 1806249, 1806249, 1806445, 1806249, 1806437, 1806249, 1806437,
+ 1806445, 1806249, 1806249, 1807088, 1806445, 1806249, 1807088, 1806249, 1806437, 1807088, 1806249,
+ 1806437, 1807088, 1807088, 1806445, 1806445, 1806445, 1806445, 1806445, 1806249, 1807088, 1806249,
+ 1806445, 1806445, 1807088, 1806249, 1806249, 1807088, 1806445, 1806249, 1806445, 1806246, 1806445,
+ 1806249, 1806249, 1806249, 1806249, 1806249, 1806249, 1806249, 1807088, 1806249, 1806249, 1806249,
+ 1807088, 1807088, 1806249, 1806445, 1807088, 1807088, 1807088, 1806249, 1806249, 1807088, 1807088,
+ 1807088, 1807088, 1806249, 1806445, 1807088, 1807088, 1806445, 1807088, 1806249, 1806445, 1806249,
+ 1806445, 1807088, 1806249, 1806445, 1806249, 1806249, 1806249, 1806249, 1806249, 1807088, 1807088,
+ 1807088, 1806249, 1807088, 1807088, 1806249, 1806249, 1806249, 1807088, 1806249, 1807088, 1806249,
+ 1807088, 1807088, 1807088, 1807088, 1806249, 1807088, 1807088, 1807088, 1807088, 1806249, 1807088,
+ 1806249, 1806249, 1807088, 1807088, 1806249, 1807088, 1806249, 1806249, 1806249, 1806249, 1807088,
+ 1807088, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806400, 1806246, 1806246, 177459,
+ 1806246, 1806246, 1806400, 1806246, 1806400, 1806400, 1806400, 1806246, 177459, 177459, 177459, 1806246,
+ 1806246, 177459, 177459, 1806246, 1806246, 177459, 1806400, 177459, 1806246, 1806400, 177459, 1806246,
+ 1806400, 1806246, 1806400, 1806400, 1806400, 177459, 1806246, 1806246, 1806400, 1806400, 1806246,
+ 1806436, 1806436, 1806436, 1806436, 1806246, 1806246, 1806246, 1806436, 1806436, 1806246, 1806436,
+ 1806246, 1806246, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806246, 1806246, 1806436,
+ 1806246, 1806436, 1806436, 1806436, 1806246, 1806436, 1806436, 1806246, 1806246, 1806246, 1806436,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 177459, 1806436, 177459, 1806436, 1806436, 1806437,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806400, 1806400,
+ 1806400, 1806400, 1806391, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 177460, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 177460, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806400, 1806400, 1953629, 1807085, 1806400, 1806246, 1806246, 1806400,
+ 177460, 177460, 1806400, 1806400, 1806246, 1806400, 177460, 1806246, 1806246, 1806246, 1806400, 177460,
+ 1806246, 1806400, 177460, 177460, 1806246, 177460, 1806246, 1806400, 1806246, 1806400, 1806400, 177460,
+ 177460, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 177460, 1806246, 1806400,
+ 1806400, 1806400, 1806246, 1806246, 1806246, 1806400, 1806400, 1806246, 1806246, 1806400, 1806246,
+ 1806400, 1806400, 1806246, 1806246, 1806246, 1806246, 1806400, 1806246, 1806400, 1806400, 1806246,
+ 1806400, 1806400, 1806246, 1806246, 1806400, 1806246, 1806246, 1806246, 1806400, 1806400, 1806246,
+ 1806246, 1806400, 1806400, 1806400, 1806246, 1806400, 1806246, 1806400, 1806246, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806246, 1806400, 1806400, 1806246, 1806400, 1806246, 1806400, 1806400,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806400, 1806400, 1806400, 1806246, 1806400, 1806246,
+ 1806400, 1806400, 1806246, 1806246, 1806400, 1806246, 1806400, 1806246, 1806246, 1806246, 1806245,
+ 1806245, 1806245, 177460, 177460, 1806245, 177460, 1806245, 1806245, 177460, 1806245, 1806245, 1806245,
+ 1806245, 1806245, 177460, 177460, 177460, 177460, 1806245, 1806252, 1806245, 1806252, 1806245, 1806252,
+ 1806245, 177460, 1806245, 177460, 1806245, 1806252, 1806252, 1806245, 177460, 177460, 177460, 1806245,
+ 1806245, 177460, 1806245, 177460, 177460, 177460, 1806245, 177460, 1806245, 177460, 177460, 1953629,
+ 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 177460, 1806391,
+ 1806245, 177460, 177460, 1806245, 1806245, 1806245, 177460, 1806245, 177460, 177460, 1806391, 1806245,
+ 1806245, 177460, 1806245, 1806391, 177460, 1806391, 1806391, 177460, 1806245, 1806391, 1806245, 177460,
+ 1806391, 1806245, 177460, 1806245, 1806245, 177460, 1806391, 177460, 1806245, 177460, 1806391, 1806245,
+ 177460, 1806391, 177460, 1806449, 177460, 1806245, 177460, 1806245, 1806391, 1806391, 177460, 1806391,
+ 177460, 1806245, 1806245, 177460, 1806391, 1806245, 1806391, 1806245, 1806245, 1806245, 1806245,
+ 1806391, 1806245, 1806391, 177460, 1806245, 1806245, 1806245, 177460, 1806245, 1806245, 1806245,
+ 1806391, 1806391, 177460, 177460, 1806391, 1806245, 1806245, 1806391, 1806245, 1806245, 177460, 177460,
+ 1806391, 177460, 1806391, 177460, 1806245, 177460, 177460, 177460, 177460, 1806245, 177460, 177460,
+ 1806245, 1806245, 1806245, 177460, 177460, 177460, 177460, 177460, 177460, 1806245, 1806245, 177460,
+ 177460, 1806245, 1806245, 177460, 1806245, 1806245, 1806245, 1806437, 1806437, 1806245, 1806245, 177460,
+ 1806245, 1806437, 177460, 177460, 1806437, 1806245, 1806437, 1806437, 177460, 1806437, 177460, 1806437,
+ 177460, 1806437, 177460, 177460, 177460, 177460, 1806437, 177460, 177460, 177460, 177460, 177460,
+ 1806437, 177460, 177460, 1806437, 1806437, 177460, 177460, 177460, 177460, 1806437, 177460, 1806437,
+ 177460, 1806437, 177460, 1806437, 1806437, 1806437, 177460, 1806437, 1806437, 177460, 1806437, 1806437,
+ 1806437, 177460, 177460, 177460, 1806437, 177460, 177460, 1806437, 177460, 177460, 177460, 1806437,
+ 177460, 1806437, 1806437, 1806245, 1806245, 177460, 177460, 1806437, 1806437, 1806245, 177460, 1806437,
+ 177460, 1806437, 1806245, 1806437, 177460, 1806245, 177460, 177460, 177460, 1806437, 1806437, 1806245,
+ 1806437, 1806245, 1806437, 177460, 1806437, 1806437, 1806447, 1806468, 1806447, 1806468, 1807085,
+ 1806447, 177455, 177455, 1806468, 1807085, 1806447, 1806468, 1807085, 1806447, 1806468, 1807085, 177455,
+ 1806447, 1806468, 1806447, 1806447, 177455, 177455, 177455, 177455, 1806447, 1806440, 177455, 1806447,
+ 1806447, 177455, 1806447, 177455, 1806447, 177455, 1807085, 177455, 177455, 177455, 1807085, 1806447,
+ 1806447, 1807085, 1806447, 177455, 1807085, 1807085, 177455, 1807085, 1806447, 177455, 1807085, 1807085,
+ 1806447, 1806468, 177455, 1806447, 1806468, 1806447, 1807085, 1806468, 1806468, 1806447, 1807085,
+ 1806447, 1806447, 1806447, 1806447, 1807085, 177455, 1807085, 1806447, 1807085, 1806447, 1807085,
+ 177455, 2848363, 1806447, 1807085, 177455, 1806447, 1806447, 177455, 177455, 1806447, 1807085, 177455,
+ 1806447, 1806447, 177455, 1806447, 1807085, 1806447, 177455, 1807085, 177455, 1806447, 177455, 1807085,
+ 177455, 1806447, 1806447, 1806447, 1806447, 1807085, 1806447, 1806447, 1806447, 1807085, 177458,
+ 1806447, 1806447, 1807085, 1806447, 1806447, 1807085, 1807085, 1806447, 1807085, 1806447, 1806447,
+ 1806447, 1806447, 1807085, 1806447, 1807085, 1806447, 1806447, 1807085, 1806447, 1806447, 1806447,
+ 1807085, 1807085, 1806447, 1807085, 1806447, 1806447, 1806447, 1806447, 1806447, 1807085, 1807085,
+ 1806447, 1806447, 1806447, 1806447, 1806447, 1807085, 1806447, 1806447, 1806447, 1806447, 1806447,
+ 1806447, 1806447, 1806447, 1807085, 1807085, 1807085, 177455, 1807085, 177455, 177455, 177455, 177455,
+ 1807085, 177455, 177455, 1807085, 1807085, 1807085, 1807085, 177455, 1807085, 1807085, 177455, 177455,
+ 1807085, 177455, 177455, 1807085, 1807085, 177455, 177455, 1807085, 1807085, 1807085, 177455, 1807085,
+ 177455, 1807085, 1807085, 1807085, 1807085, 1807085, 177455, 1807085, 177455, 177455, 1807085, 177455,
+ 177455, 1806863, 1807085, 1807085, 1807085, 1807085, 1807085, 1807085, 177455, 177458, 177455, 177455,
+ 1807085, 177455, 177455, 1807085, 177455, 1807085, 177455, 1807085, 177455, 1807085, 1807085, 1807085,
+ 1807085, 1806447, 177455, 177455, 1806447, 1807085, 177455, 1806447, 1806447, 177455, 1806447, 177455,
+ 1807085, 177455, 1806447, 177458, 177455, 1807085, 177458, 1807085, 177455, 1806447, 177455, 1807085,
+ 1806447, 177455, 1807085, 1806447, 177455, 1807085, 1806447, 177455, 1807085, 1807085, 177455, 177455,
+ 1807085, 177455, 1807085, 177455, 177455, 177455, 1807085, 1807085, 1807085, 1807085, 1807085, 177455,
+ 1807085, 177455, 177455, 177455, 177455, 177455, 1807085, 177455, 1807085, 1807085, 1807085, 1807085,
+ 177455, 1807085, 1807085, 1807085, 1807085, 1807085, 1807085, 177455, 1807085, 177455, 177455, 1807085,
+ 177455, 177455, 177455, 177455, 177455, 1807085, 1807085, 177455, 1807085, 177455, 177455, 177455,
+ 177458, 177458, 177458, 1806863, 1806863, 177458, 1806863, 177458, 177458, 1806863, 1806863, 177458,
+ 177458, 1806863, 177458, 177458, 1806863, 177458, 177458, 1806863, 177458, 1806863, 1806863, 1806863,
+ 1806863, 1806863, 1806440, 1806440, 177458, 1806440, 1806863, 1806863, 1806863, 177458, 1806863,
+ 1806440, 1806440, 1806863, 1806863, 1806440, 177458, 1806863, 177458, 1806863, 1806440, 1806863,
+ 1806863, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 1806863, 177458, 1806863,
+ 1806863, 177458, 1806863, 177458, 1806863, 177458, 1806863, 177460, 1806863, 177458, 1806863, 177458,
+ 1806863, 1806863, 1806863, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 1806863,
+ 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 177458, 1806863, 1806863,
+ 1806863, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 1806863, 1806863, 1806440,
+ 177458, 177458, 177458, 177458, 1806440, 177458, 177458, 177458, 177458, 1807085, 177458, 1807085,
+ 177458, 1806440, 1806440, 177458, 177458, 1806440, 177458, 1806440, 177458, 177458, 177458, 177458,
+ 177458, 177458, 177458, 177458, 177458, 1953629, 1806440, 1806440, 1806440, 1806440, 1806440, 177458,
+ 1806440, 177458, 177458, 1806440, 177458, 177458, 1806440, 1806440, 177458, 1806440, 177458, 1806440,
+ 177458, 1806440, 1806440, 1806440, 177458, 1806440, 1806440, 177458, 1806440, 1806440, 177458, 1806440,
+ 1806863, 177458, 1806863, 1806863, 177458, 1806863, 177458, 1806440, 1806440, 177458, 177458, 177458,
+ 177458, 1806863, 1806863, 177458, 1806440, 177458, 1806863, 177458, 177458, 1806440, 1806863, 177458,
+ 177458, 177458, 177458, 1806440, 1495752, 177458, 1806863, 177458, 177458, 1806863, 1806440, 1806863,
+ 1806440, 177458, 177458, 177458, 177458, 177458, 1806440, 177458, 1806863, 177458, 1806440, 177458,
+ 177458, 177458, 177458, 1806440, 177458, 1806863, 1806863, 177458, 177458, 1806863, 1806440, 177458,
+ 177458, 177458, 1806440, 177458, 177458, 177458, 1806440, 177458, 1806863, 177458, 1806440, 1806863,
+ 177458, 1806440, 177458, 177458, 177458, 177458, 1806863, 1806440, 1806863, 1806440, 1806863, 1806440,
+ 1806440, 1806440, 177459, 1806464, 1806464, 177459, 1806440, 1806464, 177455, 1806440, 177459, 1806440,
+ 177459, 1806464, 1806440, 1806464, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459,
+ 177459, 177459, 177459, 177459, 1806440, 1806464, 177459, 177459, 1806464, 177459, 1806440, 1806464,
+ 1806464, 1806440, 1806464, 1806440, 174666, 1806440, 1806464, 1806464, 1806464, 1806464, 177459,
+ 1806440, 1806440, 1806464, 1806440, 1806440, 1806440, 1806464, 1806464, 1806440, 1806440, 177459,
+ 174666, 177459, 1807088, 1806440, 177459, 177459, 1806464, 1806464, 177459, 1806440, 1806440, 1806440,
+ 1806464, 177459, 1806464, 1806464, 1806464, 177459, 1806464, 1806440, 1806464, 1806440, 1806464, 177459,
+ 1806440, 177459, 177459, 1806440, 1806440, 1806440, 177459, 177459, 1806440, 1806440, 177459, 1806440,
+ 1806440, 177459, 1806440, 1806440, 1806440, 1806440, 1806440, 177459, 1806440, 177459, 1806445, 1806440,
+ 177459, 1806440, 177459, 1806440, 1806440, 1806440, 177459, 1806440, 1806440, 1806440, 177459, 177459,
+ 1806440, 1806440, 177459, 1806440, 1806440, 1806440, 1806440, 1806440, 1806440, 1806440, 1806440,
+ 1806440, 1806440, 177459, 1806440, 177459, 1806440, 177459, 1806440, 1806440, 177459, 1806440, 1806440,
+ 1806440, 1806440, 177459, 1806440, 177459, 177459, 177459, 1806863, 1806863, 177459, 1806863, 177459,
+ 1806863, 1806863, 177459, 1806863, 1806863, 177459, 177459, 1806863, 177459, 1806863, 1806364, 1806364,
+ 1806863, 1806863, 1806364, 1806364, 1806364, 1806364, 1806364, 1575265, 177459, 1806863, 1806863,
+ 177459, 1806863, 1806364, 1806863, 1806863, 1806863, 177459, 177459, 177459, 1806863, 177459, 1806863,
+ 1806863, 1806863, 1806863, 177459, 177459, 1806364, 177459, 1806863, 174666, 1806863, 1806364, 1806863,
+ 177459, 1806863, 177459, 1806863, 1806364, 1806863, 1806364, 177459, 1806364, 1806863, 1806863, 177459,
+ 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 1498880, 177459, 177459, 177459, 177459,
+ 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459,
+ 177459, 177459, 177459, 177459, 177459, 177459, 177459, 1806863, 177459, 1806863, 177459, 177459,
+ 177459, 177459, 177459, 177459, 1806364, 1806364, 1806364, 1806468, 177455, 177455, 177455, 1806445,
+ 1806364, 1806364, 177455, 1806364, 1806468, 177455, 1806364, 1806445, 1806364, 177455, 1806364, 1806468,
+ 1806445, 1806364, 1806364, 1806445, 1806445, 1806468, 1806364, 1806364, 1806468, 1806364, 1806364,
+ 1806445, 1806364, 1806364, 1806364, 1806468, 1806364, 1806364, 1806364, 1806364, 1806364, 1806364,
+ 1806364, 1806364, 839426, 177455, 1806364, 1806364, 1806364, 1806364, 1806364, 1806468, 1806364,
+ 1806468, 1806364, 1806445, 1806364, 1806468, 1806364, 1806468, 1806364, 1806445, 1806468, 839426,
+ 1806445, 1806364, 1806364, 1806445, 1806364, 1806445, 1806364, 1806468, 1806468, 1806445, 1806445,
+ 177455, 1806364, 1806364, 1806468, 177455, 1806468, 1806468, 1807088, 1807088, 839426, 1806364, 177455,
+ 1806364, 1807088, 177455, 1807088, 177455, 1806364, 1806468, 1807088, 1806364, 1807088, 1806364,
+ 1807088, 177455, 1807088, 177455, 1806364, 1806468, 1807085, 1806364, 1807085, 177455, 1807085, 1806468,
+ 1807085, 1806468, 1807085, 177455, 1806364, 1806468, 177455, 1807088, 1806468, 1807088, 1806364,
+ 1806364, 177455, 1807088, 1806468, 1807088, 177455, 1806468, 177455, 1807088, 1806468, 1806468, 1806364,
+ 177455, 1806364, 1806468, 1806468, 1807088, 1806364, 1806468, 177455, 1806468, 1806364, 1807088,
+ 1806445, 1807088, 1806468, 1806364, 1806445, 1806364, 1807088, 1806445, 1806468, 1806445, 1806364,
+ 1807088, 1806468, 1806468, 1806364, 177455, 1806364, 1806445, 1806445, 1806445, 1806445, 1806468,
+ 1806364, 1806468, 177455, 1806445, 1806468, 1806468, 1806364, 1806468, 1806445, 1806364, 1807088,
+ 1806364, 1806468, 1806468, 1806468, 1807088, 1806445, 1806468, 1806445, 1806364, 1806445, 1806445,
+ 1806445, 1806468, 1806468, 1806468, 1806468, 1807088, 1806468, 1806445, 1806445, 1807088, 1806445,
+ 1806445, 1806445, 1806468, 1807088, 1806445, 1806468, 1806445, 1806468, 1806445, 1806445, 1806468,
+ 1806468, 1806445, 1806468, 1806445, 1807088, 1807088, 1806468, 1806445, 1806468, 1806445, 1806445,
+ 1806468, 1806445, 1806445, 1807088, 1806468, 1806468, 1806445, 1807088, 1806468, 1807088, 1806445,
+ 1807088, 1807088, 1806445, 1806468, 1806468, 1806445, 1806468, 1807088, 1806468, 1806445, 1806445,
+ 1806468, 1806468, 1806445, 1807088, 1806445, 1806445, 1806468, 1806468, 1806468, 1806468, 1807088,
+ 1806364, 1806468, 1575265, 1807088, 1806364, 1806445, 1806468, 1807088, 1806468, 1806364, 1806445,
+ 1806468, 1806468, 1807088, 1806468, 1807088, 1806364, 1806364, 1806468, 1807088, 1806364, 1806468,
+ 1806364, 1807088, 1806364, 1806445, 1806364, 1807088, 1807088, 1806364, 1807088, 1806364, 1575265,
+ 1807088, 1575265, 1806445, 1806468, 1807088, 1806445, 1807088, 1806445, 1807088, 1806364, 1806468,
+ 1806364, 1807088, 1806364, 1807088, 1806364, 1806364, 1807088, 1806468, 1807088, 1806468, 1806364,
+ 1806468, 1807088, 1807088, 1806364, 1806364, 1806364, 1806468, 1806468, 1806468, 1807088, 1806364,
+ 1807088, 1807088, 1807088, 1807088, 1806468, 1806445, 1806468, 1806364, 1806364, 1575265, 1806445,
+ 1575265, 1806468, 1806468, 1498880, 1806468, 1807088, 1806364, 1806364, 1806364, 1575265, 1806468,
+ 1806364, 1806364, 1807088, 1806468, 1806364, 1806445, 1806468, 1812924, 1575265, 1806445, 1806468,
+ 1575265, 1807088, 1806468, 1806364, 1575265, 1806468, 1806364, 1806364, 1806364, 1806445, 1806468,
+ 1807088, 1806364, 1806445, 1806364, 1807088, 1806468, 1575265, 1806468, 1806445, 1807088, 1807088,
+ 1806364, 1807088, 1806468, 1806468, 1806364, 1807088, 1806445, 1807088, 1806468, 1806445, 1807088,
+ 1807088, 1806468, 1806468, 1575265, 1806445, 1806468, 1806468, 1806364, 1575265, 1807088, 1806413,
+ 1807084, 1806439, 1806413, 1807084, 1543816, 1575265, 1575265, 1807084, 1575265, 1806439, 1575265,
+ 1806439, 1575265, 1806456, 1806413, 1806456, 1807084, 1806413, 1575265, 1806456, 1575265, 1806439,
+ 1575265, 1806456, 1806439, 1806456, 1575265, 1806413, 1806439, 1806456, 1806456, 1806413, 1807084,
+ 1806413, 1806456, 1575265, 1807084, 1806439, 1575265, 1806456, 1806413, 1806456, 1806439, 1575265,
+ 1575265, 1575265, 1575265, 1575265, 1807084, 1575265, 1575265, 1806439, 1807084, 1575265, 1806413,
+ 1575265, 1806439, 1575265, 1575265, 1575265, 1575265, 1806439, 1807084, 1575265, 1806439, 1806413,
+ 1806439, 1807084, 1807084, 1575265, 1807084, 1575265, 1575265, 1575265, 1807084, 1575265, 1575265,
+ 1575265, 1807084, 1575265, 1575265, 1807084, 1575265, 1806413, 1575265, 1806413, 1807084, 1806413,
+ 1806439, 1806413, 1806439, 1575265, 1575265, 1806439, 1806413, 1806413, 1806439, 1575265, 1575265,
+ 1807084, 1575265, 1806456, 1575265, 1806439, 1806456, 177457, 177457, 1806464, 1806439, 177457, 1806439,
+ 1806456, 1806439, 1806456, 1575265, 1806439, 1806439, 1806456, 1806439, 1575265, 1807084, 1807084,
+ 1806456, 1575265, 1806413, 1806456, 1806413, 1806456, 1575265, 177457, 1806439, 1806456, 1806439,
+ 1575265, 1806456, 1806456, 1806439, 1806456, 1806439, 1575265, 1806456, 1807084, 1806439, 1575265,
+ 1806439, 1575265, 1807084, 1806456, 1806456, 177457, 1575265, 1807084, 177457, 1575265, 1806439,
+ 1807084, 1575265, 1807084, 177457, 1806439, 1575265, 177457, 1807084, 1806439, 1806456, 1806456,
+ 1807084, 1806439, 1806456, 177457, 1575265, 1807084, 1806439, 1806456, 177457, 1806456, 1575265,
+ 1807084, 1806456, 1807084, 1806439, 177457, 1575265, 1806439, 1807084, 1806456, 1575265, 1807084,
+ 1806439, 1806439, 1806439, 1807084, 1807084, 1575265, 1575265, 1806456, 1806439, 1806456, 1807084,
+ 1575265, 1806439, 1806439, 1806439, 1806439, 1807084, 1806439, 1806456, 1806456, 1806456, 1806456,
+ 1575265, 1807084, 1807084, 1575265, 1806439, 1806439, 1575265, 1806456, 1806456, 1806456, 1807084,
+ 1806439, 1806456, 1575265, 1806456, 1806456, 1806456, 1807084, 1806439, 1806456, 1807084, 1806439,
+ 1806439, 1806456, 1806439, 1806456, 1806439, 1807084, 1806439, 1806439, 1806413, 1806439, 1806439,
+ 1806439, 1806413, 1806413, 1806439, 1498880, 1806413, 1806439, 1806439, 1806413, 1806413, 1806439,
+ 1806439, 1806413, 1806439, 1806413, 1806413, 1806413, 1806439, 1806413, 1806439, 1806413, 1806439,
+ 1806413, 1806439, 1806439, 1806439, 1806439, 1806413, 1806439, 1806439, 1806413, 1806413, 1806439,
+ 1806413, 1806439, 1806439, 1806439, 1806413, 1806413, 1806413, 1806413, 1806439, 1806439, 1806413,
+ 1806413, 1806439, 1806439, 1806413, 1806413, 1806413, 1806413, 1806413, 1575265, 1806439, 1575265,
+ 1806439, 1806413, 1806413, 1806439, 1806413, 1806413, 1806439, 1806439, 1806413, 1806413, 1806413,
+ 1806413, 1806413, 1806413, 1806413, 1806439, 1806439, 1806439, 1806413, 1806439, 1806439, 1806439,
+ 1806439, 1806439, 1806439, 1806439, 1806413, 1806413, 1806439, 1806413, 1806439, 1806413, 1806413,
+ 1806413, 1575265, 1806413, 1806413, 1575265, 1806413, 1575265, 1806413, 1806413, 1575265, 1806413,
+ 1806413, 1806413, 1575265, 1575265, 1575265, 1806439, 1806439, 1575265, 1806439, 1806439, 1575265,
+ 1575265, 1806439, 1575265, 1575265, 1575265, 1812929, 1812929, 1806413, 1812929, 1575265, 1575265,
+ 1806413, 1575265, 1575265, 1806413, 1806413, 1812929, 1575265, 1575265, 1575265, 1575265, 1575265,
+ 1575265, 1575265, 1806413, 1806413, 1812929, 1812929, 1812929, 1806413, 1575265, 1575265, 1806413,
+ 1575265, 1812929, 1575265, 1575265, 1575265, 1812929, 1806413, 1806464, 177457, 177457, 177457, 177457,
+ 177457, 1806464, 177457, 177457, 177457, 1806464, 1806464, 177457, 1543816, 1806464, 1806413, 1806413,
+ 1806464, 1806464, 1806413, 1806413, 1806413, 177457, 177457, 1806464, 1806464, 177457, 1806464, 177457,
+ 177457, 1806464, 177457, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 1806413, 177457, 1806413,
+ 177457, 1806413, 177457, 177457, 177457, 177457, 1806413, 1806413, 1806413, 1806413, 1806413, 1806413,
+ 1806413, 1806413, 177457, 1806413, 1806413, 177457, 1806413, 1806413, 1806413, 177457, 1806413, 1806413,
+ 1806413, 177457, 1806464, 1806413, 1806464, 1806413, 1806413, 1806413, 1806464, 1806413, 1806464,
+ 1806413, 177457, 1806413, 1806413, 1806413, 1806464, 1806413, 177457, 1806413, 1806413, 1806464,
+ 1806464, 1806464, 1806464, 177457, 177457, 1806464, 1806464, 1806464, 1806464, 1806464, 177457, 1806464,
+ 177457, 177457, 177457, 177457, 1806364, 177457, 177457, 1806464, 177457, 177457, 177457, 1806464,
+ 1806464, 1806464, 1806464, 1806464, 177457, 177457, 1806464, 1806464, 177457, 1806464, 177457, 1806464,
+ 177457, 1806464, 177457, 177457, 1806464, 177457, 1806464, 1806464, 177457, 177457, 177457, 177457,
+ 177457, 1806464, 177457, 1806464, 1806464, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 177457,
+ 1806464, 1806464, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 177457, 1806464, 1806464, 177457,
+ 1806464, 1806464, 177457, 1806468, 177457, 1806464, 177457, 1806464, 177457, 177457, 1806464, 177457,
+ 1806464, 1806464, 177457, 1806464, 177457, 177457, 177457, 177457, 177457, 1806464, 177457, 177457,
+ 177457, 177457, 1812929, 1807084, 177457, 177457, 1806464, 177457, 177457, 177457, 1806464, 177457,
+ 1806464, 177457, 1806464, 177457, 1806464, 177457, 177457, 1806464, 177457, 1806464, 1806464, 177457,
+ 177457, 177457, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 1806464, 177457, 1806464, 177457,
+ 177457, 1806464, 177457, 1806464, 1806464, 177457, 177457, 177457, 177457, 1806464, 1806464, 1806464,
+ 1806464, 1806464, 177457, 177457, 177457, 177457, 1806464, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 177458, 177458, 177458, 1575289, 1806463,
+ 177458, 1806463, 1806463, 177458, 177458, 1806463, 1806463, 1806463, 1806463, 177458, 1806463, 1806463,
+ 1806463, 177458, 1806463, 1806463, 1806463, 177458, 177458, 1806463, 1806463, 1806463, 1806447, 1806456,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1807037, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 177457, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 177457, 177457, 177457, 1806456, 1806456,
+ 1806456, 1806456, 1806456, 852199, 1806456, 1806456, 1806456, 1806456, 1806456, 1806456, 1806456,
+ 1806456, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 852199,
+ 1806447, 1806456, 1806456, 1806456, 852199, 1806456, 1806456, 1807037, 1806456, 1806456, 1575289,
+ 1806456, 1807037, 1806447, 1575289, 1807037, 1807037, 1806456, 1806447, 1806456, 1807037, 1807037,
+ 1575289, 1575289, 1806456, 1575289, 1806447, 1806456, 1806456, 1806447, 1806456, 1806456, 1807037,
+ 1806456, 1575289, 1807037, 1806447, 1575289, 1806456, 1806456, 1575289, 1806456, 1575289, 1806456,
+ 1575289, 1807037, 1806456, 1575289, 1806456, 1806456, 1807037, 1575289, 1806456, 1807037, 1806456,
+ 1806456, 1575289, 1807037, 1575289, 1807037, 1575289, 1806456, 1575289, 1575289, 1806456, 1807037,
+ 1575289, 1806456, 1806456, 1806456, 1806447, 1806456, 1806447, 1807037, 1806447, 1575289, 1575289,
+ 1806447, 1575289, 1806456, 1575289, 1806447, 1806456, 1806456, 1806456, 1806447, 1575289, 1806447,
+ 1806456, 1807037, 1806456, 1575289, 1807037, 1806456, 1807037, 1575289, 1806456, 1806447, 1807037,
+ 1806447, 1575289, 1806447, 1806456, 1807037, 1807037, 1806456, 1806456, 1575289, 1806447, 1807037,
+ 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1806447, 1807037, 1806456, 1807037, 1806456,
+ 1806456, 1806447, 1807037, 1806447, 1807037, 1806456, 1806447, 1807037, 1575289, 1807037, 1807037,
+ 1806456, 1807037, 1807037, 1807037, 1806447, 1575289, 1806456, 1575289, 1807037, 1807037, 1575289,
+ 1806456, 1807037, 1806447, 1806447, 1575289, 1806456, 1807037, 1806456, 1575289, 1806447, 1806447,
+ 1575289, 1806456, 1806447, 1807037, 1806456, 1806447, 1806447, 1807037, 1806456, 1807037, 1807037,
+ 1575289, 1806447, 1806456, 1807037, 1807037, 1807037, 1806463, 261366, 1806463, 1806463, 261366,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 467177, 1806463, 1806463, 1806463,
+ 1806463, 852192, 1806463, 1806463, 1806463, 1806463, 261366, 261366, 1806501, 261366, 261366, 261366,
+ 261366, 261366, 261366, 261366, 261366, 261366, 261366, 261366, 1806501, 1806501, 1806501, 261366,
+ 1806501, 1806501, 1806501, 261366, 1806501, 1806501, 261366, 1806501, 261366, 261366, 261366, 1806501,
+ 261366, 261366, 1806501, 261366, 261366, 261366, 1806460, 261366, 1806501, 1806460, 261366, 1806460,
+ 1806460, 1806501, 1806460, 1806501, 261366, 1806501, 261366, 261366, 261366, 1806501, 261366, 1806501,
+ 1806501, 1806501, 1806501, 261366, 261366, 1806501, 1806501, 261366, 261366, 261366, 1806501, 1806501,
+ 1806501, 261366, 1806501, 1806501, 1806501, 1806460, 1806501, 1806460, 1806501, 1806501, 1806460,
+ 1806460, 261366, 1806460, 261366, 261366, 261366, 1806522, 1806522, 1806522, 261366, 1806522, 261366,
+ 1806522, 177461, 261366, 1806522, 1806522, 1806522, 261366, 1806522, 1806522, 261366, 261366, 261366,
+ 261366, 261366, 1806522, 261366, 1806522, 1806522, 1806522, 261366, 1806522, 261366, 1806522, 1806522,
+ 1806522, 1806522, 1806522, 1806522, 1806522, 261366, 261366, 1806522, 1806501, 1806501, 1806522,
+ 1806501, 1806522, 1806501, 261366, 261366, 1806501, 261366, 1806501, 1806501, 1806501, 261366, 1806460,
+ 261366, 1806460, 1806460, 1806460, 1806460, 261366, 1806460, 1806460, 1806460, 261366, 261366, 1806460,
+ 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 261366, 1806460, 261366, 261366, 467177, 1806460,
+ 1806460, 1806460, 1806460, 261366, 1806460, 1806460, 261366, 1806460, 1806460, 1806460, 1806460,
+ 1806460, 261366, 261366, 1806460, 1806460, 177461, 1806460, 261366, 261366, 1806460, 1806460, 1806460,
+ 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 1806460, 1806460, 1806460, 177461, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 261366, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 1806463, 1806460, 1806522, 1806460, 1806460, 1806522, 1806460, 1806460, 1806460, 1806460, 1806522,
+ 1806522, 1806522, 1806460, 1806460, 1806522, 1806522, 1806522, 1806522, 1806522, 1806460, 1806460,
+ 1806460, 1806522, 1806522, 1806460, 1806522, 1806522, 1806522, 1806460, 1806522, 1806522, 1806501,
+ 1806501, 1806501, 1806460, 1806460, 1806501, 1806460, 1806460, 1806501, 1806460, 1806501, 1806460,
+ 1806501, 1806460, 1806501, 1806460, 1806460, 1806501, 1806460, 1806460, 1806522, 1806460, 1806522,
+ 1806501, 1806522, 1806460, 1806460, 1806501, 1806501, 1806522, 1806501, 1806501, 1806460, 1806522,
+ 1806501, 1806460, 1806501, 1806522, 1806460, 1806522, 1806460, 1806522, 1806522, 1806501, 1806522,
+ 1806522, 1806501, 1806522, 1806501, 1806522, 1806501, 1806522, 1806522, 1806522, 1806522, 1806501,
+ 1806501, 1806522, 1806522, 1806522, 1806501, 1806501, 1806522, 1806522, 1806501, 1806501, 1806522,
+ 1806501, 1806501, 1806522, 1806522, 1806522, 261366, 261366, 261366, 261366, 1806522, 1806522, 261366,
+ 1806522, 261366, 261366, 1806522, 261366, 1806501, 261366, 1806522, 261366, 1806501, 1806522, 1806501,
+ 1806522, 1806501, 1806501, 1806522, 1806522, 1806522, 1806522, 1806501, 1806501, 1806522, 1806501,
+ 1806522, 1806501, 1806501, 1806522, 1806522, 1806522, 1806522, 261366, 1806501, 1806522, 261366, 261366,
+ 1806522, 261366, 1806501, 261366, 1806522, 261366, 1806501, 261366, 1806522, 1806501, 261366, 261366,
+ 1806522, 261366, 1806501, 261366, 1806501, 1806501, 1806501, 261366, 261366, 1806522, 1806501, 261366,
+ 1806501, 1806501, 1806501, 261366, 261366, 1806522, 1806501, 1806501, 1806501, 1806501, 1806522,
+ 1806501, 1806501, 1806501, 1806522, 1806501, 1806522, 1806522, 261366, 1806522, 261366, 1806522,
+ 1806522, 261366, 1806522, 1806501, 261366, 1806501, 261366, 1806522, 1806501, 1806522, 1806501, 261366,
+ 1806522, 1806522, 1806501, 261366, 261366, 1806522, 261366, 1806501, 261366, 1806501, 1806522, 1806501,
+ 261366, 1806501, 261366, 1806501, 1806522, 1806501, 1806501, 1806522, 1806501, 1806501, 261366, 1806522,
+ 261366, 261366, 1806501, 1806501, 261366, 1806522, 1806501, 261366, 1806522, 1806501, 1806522, 1806522,
+ 1806522, 1806522, 261366, 1806501, 261366, 1806522, 1806522, 261366, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806501, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806522, 852192, 852192, 1806461, 1806461, 1806461, 1806461, 467177, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806460, 1806461, 1806461, 1806461, 1806461, 1589154, 1806461, 1806461,
+ 1589154, 1806461, 1806461, 1806461, 1589154, 1806461, 1589154, 1589154, 1589154, 1806461, 1806461,
+ 1806461, 1589154, 1589154, 1589154, 1806461, 1812924, 1806461, 1589154, 1812924, 1812924, 1589154,
+ 1589154, 1806461, 1812924, 1589154, 1589154, 1589154, 1812924, 1589154, 1812924, 1806461, 1812924,
+ 1812924, 1589154, 1589154, 1589154, 1812924, 1589154, 1812924, 1589154, 1589154, 1806461, 1589154,
+ 1589154, 1589154, 1589154, 1589154, 1589154, 1589154, 1812924, 1589154, 1589154, 1589154, 1812924,
+ 1806461, 1137539, 1812924, 1812924, 1806461, 1812924, 1812924, 1812924, 1812924, 1806461, 1812924,
+ 1589154, 1589154, 1812924, 1589154, 1806461, 1812924, 1806461, 1812924, 1812924, 1589154, 1589154,
+ 1812924, 1806461, 1812924, 1806461, 1806461, 1589154, 1812924, 1812924, 1812924, 1589154, 1812924,
+ 1812924, 1812924, 1812924, 1589154, 1812924, 1589154, 1812924, 1812924, 1812924, 1812924, 1589154,
+ 1812924, 1589154, 1589154, 1812924, 1812924, 1812924, 1589154, 1812924, 1589154, 1589154, 1812924,
+ 1589154, 1589154, 1812924, 1812924, 1812924, 1812924, 1812924, 1812924, 1806914, 2078493, 1812924,
+ 2078493, 2078493, 2078493, 2078493, 2078493, 2078493, 1812924, 2078493, 2078493, 1812924, 2078493,
+ 2078493, 2078493, 1812924, 2078493, 1812924, 2078493, 2078493, 2078493, 1812924, 2078493, 2078493,
+ 2078493, 2078493, 2078493, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 1806453, 1806453,
+ 2078493, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 1806453,
+ 2078493, 1806453, 2078493, 1812924, 2078493, 1812924, 1806453, 1812924, 2078493, 2078493, 2078493,
+ 2078493, 1812924, 2078493, 1812924, 2078493, 1812924, 1806453, 1806453, 1806453, 1806453, 1806453,
+ 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1137539, 1806453, 1806453,
+ 2078493, 2078493, 2078493, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 2078493, 1806453,
+ 1806453, 1806453, 1806453, 2078493, 1806453, 2078493, 1806453, 1806453, 1806453, 1806453, 1806453,
+ 1806453, 1806453, 1806453, 2078493, 1806453, 1806453, 1806453, 1806453, 2078493, 2078493, 1806453,
+ 1806453, 2078493, 1806461, 2078493, 2078493, 1806453, 2078493, 2078493, 1812924, 1812924, 1812924,
+ 1806453, 1812924, 2078493, 1806453, 1806453, 2078493, 1806453, 1806453, 1812924, 1812924, 1806453,
+ 1589154, 1589154, 1812924, 1806453, 2078493, 1806453, 1806453, 1812924, 1812924, 1812924, 1589154,
+ 2078493, 1812924, 1589154, 1589154, 1589154, 1589154, 2078493, 1589154, 1812924, 2078493, 1589154,
+ 1806453, 2078493, 1812924, 1812924, 1812924, 1812924, 1812924, 1806453, 2078493, 1806453, 1589154,
+ 1812924, 1589154, 1589154, 1589154, 2078493, 1812924, 1812924, 1806453, 1812924, 1806453, 1812924,
+ 1589154, 1806453, 2078493, 1806453, 1589154, 1806453, 1812924, 1806453, 1806453, 1812924, 1806453,
+ 1812924, 2078493, 1806453, 2078493, 1812924, 1812924, 1812924, 1589154, 1806453, 1589154, 1806453,
+ 2078493, 1806453, 1806453, 2078493, 1806453, 1812924, 1806453, 1812924, 1589154, 1812924, 1806453,
+ 1806453, 1812924, 1812924, 1806453, 2078493, 1589154, 2078493, 1806453, 1589154, 1806453, 1589154,
+ 1806453, 1806453, 1812924, 1812924, 2078493, 1806453, 1812924, 1806453, 1812924, 1589154, 1806453,
+ 1812924, 1812924, 1589154, 1589154, 1806453, 1806453, 1589154, 2078493, 2078493, 1589154, 2078493,
+ 2078493, 1589154, 1812924, 2078493, 1589154, 2078493, 1806453, 1812924, 2078493, 1812924, 2078493,
+ 1589154, 2078493, 1806453, 1806453, 1589154, 1589154, 1812924, 1589154, 1589154, 1812924, 1589154,
+ 1806453, 2078493, 1806453, 1812924, 1812924, 1806453, 1589154, 2078493, 1589154, 1589154, 1589154,
+ 1589154, 2078493, 2078493, 1589154, 2078493, 2078493, 1806453, 2078493, 1806453, 2078493, 2078493,
+ 1812924, 2078493, 1806453, 1806453, 2078493, 1589154, 1812924, 1812924, 2078493, 1589154, 1589154,
+ 2078493, 2078493, 1806453, 1806453, 2078493, 1812924, 2078493, 1589154, 2078493, 2078493, 1589154,
+ 2078493, 2078493, 2078493, 1812924, 1806453, 1589154, 1589154, 1589154, 1812924, 1589154, 1589154,
+ 1806453, 1589154, 1589154, 1589154, 1589154, 1812924, 1589154, 1806453, 1806453, 1589154, 1812924,
+ 1812924, 1812924, 1589154, 1806453, 1589154, 1589154, 2078493, 1589154, 2078493, 1806453, 1806453,
+ 1806453, 1806453, 1806453, 1495752, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453,
+ 177461, 1806453, 1806453, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461,
+ 2078493, 2078493, 177461, 177461, 2078493, 2078493, 177461, 2078493, 2078493, 2078493, 177461, 2078493,
+ 177461, 2078493, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461,
+ 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461,
+ 177461, 177461, 177461, 177461, 177461, 177461, 177461, 1806914, 177461, 177461, 1806914, 1806914,
+ 177461, 177461, 1806914, 1806914, 1806914, 177461, 177461, 1806914, 177461, 177461, 177461, 1806914,
+ 177461, 1806914, 1806914, 177461, 1806914, 177461, 1806914, 1806914, 177461, 1806914, 1806914, 177461,
+ 177461, 177461, 177461, 1806914, 177461, 1806914, 1806914, 177461, 1806914, 177461, 177461, 177461,
+ 177461, 1806914, 1806914, 177461, 1806914, 177461, 177461, 177461, 177461, 1806914, 177461, 1806914,
+ 1806914, 1806914, 177461, 1806914, 1806914, 1806914, 177461, 1806914, 177461, 1806459, 1806459, 1806914,
+ 1806459, 1806459, 1806459, 1806914, 177461, 1806914, 177461, 1806914, 177461, 1806459, 1806914, 1806459,
+ 1806914, 177461, 1806459, 1806914, 177461, 177461, 1806459, 1137539, 177461, 1806459, 1806914, 1806459,
+ 1806914, 177461, 1806914, 1806459, 177461, 177461, 1806459, 1806914, 177461, 177461, 1806459, 1806914,
+ 177461, 1806459, 1806914, 177461, 177461, 177461, 1806914, 177461, 1806914, 177461, 1806914, 177461,
+ 1806914, 177461, 1806914, 177461, 1806914, 1806459, 1806914, 1806903, 1806459, 1806903, 1806459,
+ 1806903, 1806914, 1806914, 1806914, 1806903, 1806903, 177461, 1806903, 1806459, 177461, 1806914, 177461,
+ 1806914, 1806903, 1806914, 1806903, 1806459, 1806459, 1806914, 1806914, 1806914, 1806459, 1806914,
+ 1806914, 177461, 1806903, 177461, 177461, 1806914, 177461, 1806914, 177461, 1806914, 1806914, 1806459,
+ 1806459, 177461, 1806459, 1806459, 1806914, 1806914, 1806914, 1806914, 1806914, 1806914, 177461, 177461,
+ 1806914, 1806903, 177461, 1806903, 1806914, 1806903, 1806459, 1806903, 1806914, 1806459, 1806903,
+ 1806459, 1806903, 1806903, 1806459, 1806914, 1806903, 1806914, 1806903, 1806914, 1806914, 1806459,
+ 1806903, 1806459, 1806459, 1806459, 1806914, 1806459, 1806903, 1806914, 1806459, 1806914, 1806903,
+ 1806914, 1806459, 1806903, 177461, 1806914, 177461, 1806914, 1806459, 1806914, 1806459, 1806459, 177461,
+ 1806459, 1806903, 177461, 2078493, 177461, 1806914, 1806903, 1806459, 1806914, 1806903, 1806903, 177461,
+ 1806903, 177461, 1806914, 1806903, 1806914, 1806459, 1806903, 1806914, 1806459, 1806903, 1806903,
+ 1806903, 1806459, 1806459, 1806903, 1806459, 1806903, 1806459, 1806903, 1806459, 1806914, 1806459,
+ 1806903, 1806903, 1806459, 1806459, 1806459, 1806903, 1806459, 1806903, 1806459, 1806903, 1806459,
+ 1806459, 1806903, 1806459, 1806459, 1806914, 1806914, 1806903, 1806459, 1806459, 1806903, 1806914,
+ 1806453, 1806903, 1806903, 1806459, 1806914, 1806903, 1806903, 1806459, 1806914, 1806903, 1806459,
+ 1806903, 1806914, 1806903, 1806914, 1806903, 1806903, 1806903, 1806914, 1806903, 1806459, 1806914,
+ 1806914, 1806903, 1806459, 1806903, 1806459, 1806903, 1806914, 1806903, 1806459, 1806903, 1806903,
+ 1806459, 1806903, 1806914, 1806903, 1806459, 1806459, 1806914, 1806903, 1806903, 1806903, 1806459,
+ 1806459, 1806903, 1806903, 1806903, 1806914, 1806903, 1806903, 1806903, 1806903, 1806914, 1806459,
+ 1806903, 1806914, 1806903, 1806903, 1806459, 1806459, 1806459, 1806914, 1806903, 1806459, 1806903,
+ 1589154, 1806459, 1806459, 1806903, 1806459, 1806459, 1806903, 1806459, 1806903, 1806459, 1806459,
+ 1806903, 1806459, 1806903, 1806903, 1806459, 1806914, 1806903, 1806459, 1806459, 1806903, 1806459,
+ 1806914, 1806459, 1806914, 1806459, 1806903, 1806914, 1806459, 1806903, 1806459, 1806903, 1806914,
+ 1806903, 1806903, 1806459, 1806914, 1806914, 1806914, 1806914, 1806903, 1806459, 1806459, 1806903,
+ 1806903, 1806903, 1806459, 1806459, 1806459, 1806903, 1806903, 1806903, 1806459, 1806459, 1806903,
+ 1806459, 1806459, 1806903, 1806903, 1806459, 1806903, 1806903, 1806459, 1806459, 1495752, 1806903,
+ 1806903, 1806459, 1806903, 1806459, 1311387, 177451, 1311387, 1311387, 177451, 1311387, 1311387,
+ 1311387, 1311387, 177451, 177451, 177451, 177451, 1311387, 1311387, 177451, 1311387, 177451, 177451,
+ 177451, 1311387, 1311387, 177451, 177451, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387,
+ 1311387, 1311387, 1311387, 1806458, 1311387, 1806458, 1311387, 1311387, 177451, 1806458, 177451,
+ 1311387, 177451, 177451, 177451, 177451, 1806458, 1311387, 1806458, 1806458, 177451, 177451, 177451,
+ 1806458, 177451, 1311387, 177451, 177451, 177451, 1311387, 1311387, 177451, 177451, 177451, 1806458,
+ 177451, 177451, 1806458, 1806458, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 177451, 1311387,
+ 1311387, 177451, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387,
+ 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387,
+ 1311387, 1311387, 1806499, 1806499, 1311387, 1311387, 1311387, 1311387, 1311387, 1806499, 177451,
+ 1806499, 1311387, 177451, 1806499, 177451, 1806499, 177451, 1311387, 177451, 1311387, 1311387, 1311387,
+ 1806499, 1311387, 1311387, 1806499, 1311387, 1311387, 1311387, 1311387, 1311387, 1806499, 1311387,
+ 1806502, 1806502, 1806502, 1311387, 1806462, 1311387, 1806462, 1806502, 1806462, 1311387, 1311387,
+ 1311387, 1806462, 1806502, 1806502, 1311387, 1806462, 1806462, 1806462, 1311387, 1311387, 1311387,
+ 1806462, 1311387, 1806462, 1806462, 1806462, 1311387, 1806462, 1311387, 1806462, 1806462, 1806462,
+ 1806462, 1806462, 1806462, 1806462, 1807087, 1806451, 1806462, 1806462, 1311387, 1806462, 1311387,
+ 1806462, 1806462, 1806462, 1806462, 1806462, 1806462, 1806462, 1311387, 1311387, 1311387, 1311387,
+ 1806459, 1806459, 1311387, 1806459, 1311387, 1311387, 1311387, 1311387, 1806459, 1806459, 1806459,
+ 1806459, 1806459, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1806462, 1807087, 1807087,
+ 1806462, 898640, 1806462, 1806499, 898640, 1806499, 1806458, 1806499, 1806458, 1806499, 1806462,
+ 1806499, 1806499, 898640, 1806462, 1806462, 1807087, 1806499, 1806458, 898640, 1806499, 1807087, 898640,
+ 898640, 1806458, 1806499, 898640, 1806462, 898640, 1806462, 898640, 1806458, 898640, 1807087, 898640,
+ 898640, 898640, 1806462, 1807087, 1806499, 1806499, 898640, 1806499, 1806462, 898640, 1806499, 1806499,
+ 898640, 1807087, 898640, 1806462, 1806462, 1807087, 898640, 1806462, 1806499, 898640, 1807087, 1806499,
+ 1806462, 1806458, 1806499, 1806499, 1806499, 1806462, 898640, 1807087, 898640, 1806462, 1806462,
+ 1806499, 1806458, 1806499, 1806499, 1807087, 898640, 898640, 1806458, 1806499, 1807087, 1806499, 898640,
+ 1806499, 1806458, 1806499, 898640, 1807087, 1806458, 1807087, 1806499, 898640, 1806418, 898640, 1806462,
+ 1806499, 1806462, 898640, 1806499, 898640, 898640, 1806458, 898640, 1806499, 1807087, 1806462, 1806499,
+ 1806462, 898640, 898640, 1807087, 1806499, 898640, 1806499, 898640, 898640, 1311387, 1806458, 1806499,
+ 1806462, 1806499, 1806458, 1806462, 1806499, 898640, 1806458, 1806499, 1806462, 1806499, 1806499,
+ 898640, 1806462, 1806499, 898640, 1806499, 1806462, 1807087, 1806462, 1807087, 1807087, 1806462,
+ 1806462, 1807087, 1806499, 1807087, 1807087, 1806458, 1806462, 1806499, 1807087, 1806458, 1806499,
+ 1806499, 1806462, 1807087, 1806462, 1807087, 1806458, 1806462, 1806462, 898640, 1806462, 1806458,
+ 1807087, 898640, 898640, 898640, 1807087, 1806462, 1806458, 1806499, 1806458, 898640, 1806458, 1806499,
+ 1806458, 1806462, 1807087, 1806462, 898640, 1807087, 1806499, 1807087, 1806458, 1806462, 898640,
+ 1807087, 898640, 1806499, 1807087, 1806462, 1806499, 1806462, 1806499, 1806499, 898640, 1806499, 898640,
+ 1806462, 1807087, 1806462, 1807087, 1806462, 1806499, 1807087, 1806462, 1806458, 1806462, 1806462,
+ 1806462, 1806462, 1806462, 1807087, 1806462, 1806458, 1807087, 1807087, 1806462, 1806462, 1806458,
+ 1806462, 1806458, 1807087, 1806462, 1807087, 1807087, 1807087, 1806462, 1807087, 1807087, 1807087,
+ 1807087, 1806499, 1806462, 1807087, 1806499, 1807087, 1807087, 1807087, 1806462, 1806458, 1806462,
+ 1806462, 1806458, 1806462, 1806462, 1806458, 1806462, 1807087, 1807087, 1807087, 1806499, 1806499,
+ 1806499, 1806462, 1806458, 1807087, 1806458, 1806462, 1807087, 1806499, 1806462, 1806462, 1806462,
+ 1806499, 898640, 1806458, 1806499, 898640, 1806462, 1806458, 1806462, 1806499, 1806458, 1806458, 898640,
+ 1806458, 1806458, 898640, 1806499, 1806499, 1806458, 1806462, 1806462, 898640, 1806462, 1806458, 898640,
+ 1806499, 1806458, 898640, 1806458, 1806499, 1806458, 1806458, 1806458, 898640, 1806458, 898640, 898640,
+ 898640, 1806458, 1806458, 1806458, 1806499, 1806458, 898640, 1806458, 1806458, 1806499, 1806458,
+ 1806499, 1806458, 1806458, 898640, 1806458, 1806458, 1806499, 1806458, 1806458, 898640, 898640, 1806499,
+ 1806458, 1806458, 1806499, 1806458, 898640, 898640, 1806458, 1806458, 1806458, 1806499, 1806458,
+ 1806458, 1806499, 1806458, 1806499, 1806458, 1806499, 1806458, 1806458, 1806499, 1806499, 898640,
+ 1806462, 1806458, 898640, 1806499, 898640, 898640, 898640, 1806499, 1806499, 898640, 1806462, 898640,
+ 1806499, 898640, 1806462, 1806458, 1806499, 1806462, 1806499, 898640, 1806499, 898640, 1806458, 1806499,
+ 1806499, 1806499, 898640, 1806458, 1807087, 1806462, 1807087, 1806458, 1806462, 1806458, 1807087,
+ 1806458, 1806458, 1806462, 1806458, 898640, 1806458, 898640, 898640, 1807087, 1807087, 1806458, 1807087,
+ 898640, 1806462, 1806458, 898640, 898640, 1806458, 1806458, 1806458, 1806499, 898640, 1806499, 1807087,
+ 1806462, 1806458, 1806499, 898640, 1806458, 1806499, 1806459, 1806499, 1806499, 1806458, 1806499,
+ 1807087, 1806462, 1806499, 1806499, 1806462, 1806499, 1806499, 1713318, 1806458, 898640, 1807087,
+ 898640, 1806462, 898640, 1806499, 1806458, 1806458, 1806458, 898640, 898640, 898640, 1806458, 898640,
+ 1806458, 898640, 898640, 898640, 1806458, 1806499, 1806458, 898640, 1806462, 898640, 898640, 1806458,
+ 1806458, 1806499, 898640, 1807087, 1806458, 1806499, 1807087, 1806499, 1806458, 1806458, 1806458,
+ 1806458, 898640, 898640, 898640, 1806462, 1807087, 1806499, 1807087, 1806499, 898640, 898640, 1806458,
+ 898640, 1806499, 1806458, 1806462, 1806458, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452,
+ 1806452, 1311387, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452,
+ 177451, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452,
+ 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1807087, 1807087, 1807087, 1806451, 1807087,
+ 1807087, 1806451, 1807087, 1807087, 1807087, 1807087, 1806451, 1807087, 1807087, 1806451, 1806451,
+ 1807087, 1806451, 1806451, 1806451, 1807087, 1807087, 1807087, 1806451, 1807087, 1806451, 1807087,
+ 1807087, 1806451, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087,
+ 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 177451,
+ 1807087, 1807087, 177451, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087,
+ 1807087, 1807087, 1806451, 1806502, 1806502, 1806502, 1806502, 1806451, 1806502, 1806451, 1806451,
+ 1806451, 1806502, 1806451, 1806502, 1806451, 1806502, 1806451, 1806502, 1806451, 1806451, 1806502,
+ 1806502, 1806451, 1806502, 1806502, 1806502, 1806451, 1806451, 1806451, 1806502, 1806502, 1806502,
+ 1806451, 1806451, 1806502, 1806502, 1806451, 1806452, 1806451, 1806451, 1806451, 1806451, 1806452,
+ 1806451, 1806452, 1806502, 1806451, 1806502, 1806451, 1806451, 1806452, 1806502, 1806502, 1806502,
+ 1806451, 1806452, 1806451, 1806502, 1806502, 1806502, 1806502, 1806451, 1806502, 1806502, 1806451,
+ 1806451, 1806451, 1806502, 1806502, 1806451, 1806451, 1806502, 1806451, 1806451, 177451, 1806502,
+ 1806452, 1806502, 1806452, 1806451, 1806502, 1806452, 1806451, 1806451, 1806451, 1806502, 1806502,
+ 1806451, 1806451, 1806502, 177451, 1806502, 1806452, 1806451, 1806451, 1806451, 1806502, 1806451,
+ 1806452, 1806451, 1806451, 1806451, 1806451, 1806451, 1806452, 1806502, 1806451, 177451, 1806452,
+ 1806502, 177451, 1806451, 1806502, 177451, 1806452, 177451, 1806451, 177451, 1806451, 1806452, 177451,
+ 1806451, 1806451, 1806502, 177451, 1806451, 1806502, 1806502, 1806451, 1806502, 1806502, 1806502,
+ 177451, 1806451, 177451, 177451, 1806452, 1806451, 1806502, 1806451, 1806502, 1806452, 1806451, 1806502,
+ 1806451, 1806502, 1806451, 1806452, 1806502, 1806451, 1806451, 1806502, 1806502, 177451, 1806451,
+ 1806452, 1806452, 1806499, 1806502, 1806451, 177451, 1806502, 1806502, 1806452, 1806451, 1806457,
+ 1806452, 1806502, 1806451, 1806502, 1806451, 1806452, 177451, 1806502, 1806502, 177451, 177451, 1806452,
+ 1806451, 1806502, 1806502, 1806452, 177451, 1806502, 1806451, 1806451, 1806502, 1806451, 1806502,
+ 1806451, 1806502, 1806451, 1806502, 1806452, 177451, 1806451, 1806451, 177451, 1806452, 1806502,
+ 1806452, 1806451, 1806502, 177451, 1806451, 1806451, 1806451, 1806502, 1806502, 1806452, 1806452,
+ 177451, 177451, 1806502, 1806502, 177451, 177451, 1806502, 177451, 1806452, 1806452, 177451, 1806452,
+ 177451, 1806502, 177451, 1806452, 1806452, 177451, 177451, 1806502, 1806452, 1806452, 1806452, 177451,
+ 1806451, 1806452, 1806452, 177451, 1806451, 1806452, 1806452, 177451, 1806452, 1806502, 177451, 1806451,
+ 1806452, 177451, 177451, 177451, 177451, 1806452, 1806502, 1806451, 1806452, 1806502, 1806502, 1806452,
+ 1806502, 1806452, 1806452, 177451, 1806451, 1806502, 1806452, 1806502, 1806452, 1806452, 1806502,
+ 177451, 1806452, 177451, 1806452, 1806452, 1806451, 1806451, 177451, 1806452, 1806502, 177451, 1806452,
+ 177451, 1806502, 177451, 1806502, 177451, 1806451, 177451, 177451, 1806452, 1806502, 1806502, 1806502,
+ 1806502, 1806451, 1806452, 1806502, 1806452, 1806452, 1806452, 1806502, 1806451, 1806502, 177451,
+ 1806452, 1806502, 1806451, 1806452, 1806452, 1806452, 1806451, 177451, 1806452, 1806452, 177451,
+ 1806451, 177451, 1806452, 177451, 1806502, 1806451, 177451, 1806451, 177451, 177451, 1806452, 177451,
+ 1806502, 1806452, 177451, 1806452, 177451, 1806502, 177451, 1806502, 177451, 177451, 1806452, 177451,
+ 1806451, 1806452, 1806452, 177451, 1806451, 1806458, 1806451, 1806452, 177451, 1806452, 177451, 1806502,
+ 177451, 1806452, 177451, 177451, 1806452, 1806502, 1806452, 1806451, 1806452, 1806451, 177451, 1806452,
+ 1806502, 177451, 1806502, 177451, 177451, 1806452, 177451, 1806502, 177451, 1806451, 1806452, 1806452,
+ 1806452, 1806452, 1806451, 1806502, 177451, 177451, 1806452, 1806502, 1806451, 177451, 177451, 177451,
+ 1806502, 1806452, 1806452, 1806452, 1806452, 2848361, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806452, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1482583, 1806465,
+ 1806465, 177462, 1806465, 1806465, 1806465, 1806465, 177462, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806502, 177462, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1482583, 1806465, 1806465, 1806465, 1806465, 1806465, 1806454, 1806454,
+ 177462, 177462, 1806454, 1806454, 1806454, 898640, 1806454, 898640, 1806454, 1806454, 898640, 1806454,
+ 1806454, 1806454, 1806454, 177462, 177462, 898640, 177462, 1806454, 177462, 1806454, 1806454, 898640,
+ 177462, 177462, 898640, 177462, 1806454, 1806454, 1806454, 177462, 898640, 1806454, 177462, 177462,
+ 898640, 1806454, 898640, 1806454, 1806454, 177462, 1806454, 898640, 177462, 177462, 898640, 898640,
+ 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 1806454, 1806454,
+ 898640, 1806454, 177462, 1806454, 1806454, 1806454, 1806454, 1806454, 1806454, 1806454, 177462, 177462,
+ 1806454, 1806454, 177462, 1806454, 1806454, 177462, 177462, 1806454, 1806454, 1806454, 1806454, 177462,
+ 1806454, 1806454, 1806454, 1806454, 1806454, 177462, 177462, 1806454, 1806454, 1806454, 1806454,
+ 1806454, 1806454, 1806454, 177462, 177462, 1806454, 1806454, 1806454, 1806454, 1806465, 177462, 1806454,
+ 177462, 177462, 1806454, 1806454, 177462, 1806454, 1806454, 177462, 177462, 177462, 177462, 177462,
+ 898640, 177462, 177462, 177462, 1806462, 1482583, 1806454, 1806454, 1806454, 1806454, 898640, 1806454,
+ 1806454, 1806454, 1806454, 1806454, 1806454, 177462, 177462, 177462, 1806454, 177462, 177462, 1806454,
+ 177462, 1806454, 177462, 1806454, 177462, 177462, 177462, 177462, 1806454, 177462, 177462, 1806454,
+ 177462, 177462, 177462, 177462, 177462, 177462, 1806454, 1806454, 1806454, 1806454, 1311387, 1806454,
+ 177462, 177462, 1311387, 1806454, 1806454, 177462, 1806454, 1806454, 1806454, 1311387, 1806454, 1806454,
+ 1311387, 177462, 177462, 177462, 1311387, 1806454, 1806454, 1311387, 1806454, 1311387, 177462, 1806454,
+ 1311387, 1311387, 1806454, 1311387, 177462, 1806454, 1806454, 1806454, 177462, 1806454, 1806454, 177462,
+ 177462, 177462, 1806454, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 1806454,
+ 1806454, 1806454, 1806454, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462,
+ 1806454, 177462, 177462, 1806454, 1806454, 177462, 177462, 1806454, 177462, 1806454, 177462, 177462,
+ 1806454, 177462, 177462, 177462, 177462, 1806454, 1806454, 177462, 177462, 177462, 1806454, 1806454,
+ 177462, 177462, 177462, 177462, 177462, 1806454, 177462, 1806454, 177462, 177462};
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java
new file mode 100644
index 00000000000..21c3cd1c94a
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.time.GlobalTime;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactLoad;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactLoader;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.osee.framework.ui.skynet.render.ITemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Theron Virgin
+ */
+public class PublishRequirements extends AbstractBlam {
+ private boolean includeAttributes;
+ private boolean publishAsDiff;
+ private boolean removeTrackedChanges;
+ private Date date;
+ private Branch branch;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Boolean updateParagraphNumber = variableMap.getBoolean("Update Paragraph Numbers");
+ List<Artifact> artifacts = variableMap.getArtifacts("artifacts");
+ includeAttributes = variableMap.getBoolean("Publish With Attributes");
+ publishAsDiff = variableMap.getBoolean("Publish As Diff");
+ removeTrackedChanges = variableMap.getBoolean("Skip Artifacts with Tracked Changes");
+ if (variableMap.getValue("Diff Starting Point") instanceof Date) {
+ date = (Date) variableMap.getValue("Diff Starting Point");
+ }
+ branch = variableMap.getBranch("Diff Branch");
+
+ RelationManager.getRelatedArtifacts(artifacts, 999, true, CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD);
+
+ SkynetTransaction transaction = new SkynetTransaction(artifacts.get(0).getBranch());
+ String templateOption =
+ publishAsDiff ? (includeAttributes ? ITemplateRenderer.DIFF_VALUE : ITemplateRenderer.DIFF_NO_ATTRIBUTES_VALUE) : (includeAttributes ? ITemplateRenderer.PREVIEW_WITH_RECURSE_VALUE : ITemplateRenderer.PREVIEW_WITH_RECURSE_NO_ATTRIBUTES_VALUE);
+ VariableMap options =
+ new VariableMap(WordTemplateRenderer.UPDATE_PARAGRAPH_NUMBER_OPTION, updateParagraphNumber,
+ ITemplateRenderer.TEMPLATE_OPTION, templateOption, ITemplateRenderer.TRANSACTION_OPTION, transaction);
+ for (Artifact artifact : artifacts) {
+ try {
+ publish(monitor, artifact, options);
+ } catch (OseeStateException ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ }
+ }
+ transaction.execute();
+ }
+
+ private void publish(IProgressMonitor monitor, Artifact artifact, VariableMap options) throws OseeCoreException {
+ if (monitor.isCanceled()) {
+ return;
+ }
+
+ ArrayList<Artifact> nonFolderChildren = new ArrayList<Artifact>();
+ if (artifact.isOfType("Folder")) {
+ for (Artifact child : artifact.getChildren(true)) {
+ if (child.isOfType("Folder")) {
+ publish(monitor, child, options);
+ } else {
+ nonFolderChildren.add(child);
+ }
+ }
+ } else {
+ nonFolderChildren.add(artifact);
+ }
+
+ if (publishAsDiff) {
+ if (branch == null || date == null) {
+ throw new OseeCoreException(
+ "Must Select a " + branch == null ? "Branch" : "Date" + " to diff against when publishing as Diff");
+ }
+ nonFolderChildren = buildRecursiveList(nonFolderChildren);
+ int transactionId = BranchManager.getBranchTransaction(date, branch.getBranchId());
+ ArrayList<Artifact> olderArtifacts = getOlderArtifacts(nonFolderChildren, transactionId, branch.getBranchId());
+ int index = 0;
+ for (Artifact art : olderArtifacts) {
+ if (art != null && art.isDeleted()) {
+ olderArtifacts.set(index, null);
+ }
+ if (art != null && removeTrackedChanges && containsTrackedChanges(art)) {
+ appendResultLine(String.format("Skiped %s because it Contains Tracked Changes\n",
+ art.getDescriptiveName()));
+ olderArtifacts.set(index, null);
+ }
+ index++;
+ }
+ index = 0;
+ for (Artifact art : nonFolderChildren) {
+ if (art != null && art.isDeleted()) {
+ nonFolderChildren.set(index, null);
+ }
+ if (art != null && removeTrackedChanges && containsTrackedChanges(art)) {
+ appendResultLine(String.format("Skiped %s because it contains Tracked Changes\n",
+ art.getDescriptiveName()));
+ nonFolderChildren.set(index, null);
+ }
+ index++;
+ }
+ RendererManager.diffInJob(olderArtifacts, nonFolderChildren, options);
+ } else {
+ RendererManager.preview(nonFolderChildren, monitor, options);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Drag in parent artifacts below and click the play button at the top right.";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Update Paragraph Numbers\" /><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Publish With Attributes\" /><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Publish As Diff\" /><XWidget xwidgetType=\"XLabel\" displayName=\" \" /><XWidget xwidgetType=\"XLabel\" displayName=\"Diff Options:\" /><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Skip Artifacts with Tracked Changes\" /><XWidget xwidgetType=\"XDate\" displayName=\"Diff Starting Point\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Diff Branch\" defaultValue=\"" + BranchManager.getDefaultBranch().getBranchName() + "\" /><XWidget xwidgetType=\"XListDropViewer\" displayName=\"artifacts\" /></xWidgets>";
+ }
+
+ private ArrayList<Artifact> getOlderArtifacts(ArrayList<Artifact> artifacts, int transactionId, int branchId) throws OseeCoreException {
+ ArrayList<Artifact> historicArtifacts = new ArrayList<Artifact>(artifacts.size());
+ int queryId = ArtifactLoader.getNewQueryId();
+ Timestamp insertTime = GlobalTime.GreenwichMeanTimestamp();
+
+ Set<Artifact> artifactSet = new HashSet<Artifact>(artifacts);
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+ for (Artifact artifact : artifactSet) {
+ insertParameters.add(new Object[] {queryId, insertTime, artifact.getArtId(), branchId, transactionId});
+ }
+ ArtifactLoader.loadArtifacts(queryId, ArtifactLoad.FULL, null, insertParameters, false, true, true);
+ for (Artifact artifact : artifacts) {
+ historicArtifacts.add(ArtifactCache.getHistorical(artifact.getArtId(), transactionId));
+ }
+ return historicArtifacts;
+ }
+
+ private ArrayList<Artifact> buildRecursiveList(ArrayList<Artifact> artifacts) throws OseeCoreException {
+ ArrayList<Artifact> artifactWithChildren = new ArrayList<Artifact>(artifacts.size());
+ for (Artifact artifact : artifacts) {
+ artifactWithChildren.add(artifact);
+ addChildren(artifactWithChildren, artifact);
+ }
+ return artifactWithChildren;
+ }
+
+ private void addChildren(ArrayList<Artifact> artifacts, Artifact artifact) throws OseeCoreException {
+ for (Artifact loopArtifact : artifact.getChildren(true)) {
+ artifacts.add(loopArtifact);
+ addChildren(artifacts, loopArtifact);
+ }
+ }
+
+ private boolean containsTrackedChanges(Artifact art) {
+ if (art.isOfType(WordArtifact.ARTIFACT_NAME)) {
+ boolean isWholeWord = art.isOfType(WordArtifact.WHOLE_WORD);
+ try {
+ Attribute<?> attribute =
+ art.getSoleAttribute(isWholeWord ? WordAttribute.WHOLE_WORD_CONTENT : WordAttribute.WORD_TEMPLATE_CONTENT);
+ if (attribute != null) {
+ return ((WordAttribute) attribute).mergeMarkupPresent();
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(PublishRequirements.class, ex, false);
+ }
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java
new file mode 100644
index 00000000000..73680e37bcb
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer;
+
+/**
+ * We need to create an SRSRenderer that provides the correct templates. Then we'll use it instead of the WordTemplate
+ * processor like we do currently.
+ *
+ * @author Robert A. Fisher
+ */
+
+public class PublishSrs extends AbstractBlam {
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Boolean updateParagraphNumber = variableMap.getBoolean("Update Paragraph Numbers");
+ WordTemplateRenderer srsRenderer = new WordTemplateRenderer(WordTemplateRenderer.RENDERER_EXTENSION);
+ srsRenderer.setOptions(new VariableMap(WordTemplateRenderer.UPDATE_PARAGRAPH_NUMBER_OPTION, updateParagraphNumber));
+ srsRenderer.publishSRS(variableMap);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Update Paragraph Numbers\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java
new file mode 100644
index 00000000000..bb827f10154
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.io.IOException;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ISheetWriter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class PublishSubsystemToDesignTraceability extends AbstractBlam {
+ private CharBackedInputStream charBak;
+ private ISheetWriter excelWriter;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor)
+ */
+
+ private void init() throws IOException {
+ charBak = new CharBackedInputStream();
+ excelWriter = new ExcelXmlWriter(charBak.getWriter());
+ }
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask(getDescriptionUsage(), 100);
+
+ List<Artifact> subsystems = variableMap.getArtifacts("Subsystem Root Artifacts");
+ Branch branch = subsystems.get(0).getBranch();
+
+ init();
+
+ monitor.subTask("Aquiring Design Artifacts"); // bulk load for performance reasons
+ ArtifactQuery.getArtifactsFromType("Subsystem Design", branch);
+ monitor.worked(10);
+
+ monitor.subTask("Aquiring Subsystem Requirements"); // bulk load for performance reasons
+ ArtifactQuery.getArtifactsFromType("Subsystem Requirement", branch);
+ monitor.worked(60);
+
+ int workIncrement = 30 / subsystems.size();
+ for (Artifact subsystem : subsystems) {
+ if (monitor.isCanceled()) {
+ return;
+ }
+ monitor.worked(workIncrement);
+ writeSubsystemDesignTraceability(subsystem);
+ }
+
+ excelWriter.endWorkbook();
+ IFile iFile = OseeData.getIFile("SubsystemToDesignTrace_" + Lib.getDateTimeString() + ".xml");
+ AIFile.writeToFile(iFile, charBak);
+ Program.launch(iFile.getLocation().toOSString());
+ }
+
+ private void writeSubsystemDesignTraceability(Artifact subsystem) throws IOException, OseeCoreException {
+ excelWriter.startSheet(subsystem.getDescriptiveName(), 200);
+ excelWriter.writeRow(subsystem.getDescriptiveName() + " Subsystem To Design Traceability");
+
+ excelWriter.writeRow("Subsystem Requirement", null, "Subsystem Design");
+ excelWriter.writeRow("Paragraph Number", "Paragraph Title", "Paragraph Number", "Paragraph Title");
+
+ for (Artifact subsystemRequirement : subsystem.getDescendants()) {
+ excelWriter.writeCell(subsystemRequirement.getSoleAttributeValue("Imported Paragraph Number", ""));
+ excelWriter.writeCell(subsystemRequirement.getDescriptiveName());
+
+ if (subsystemRequirement.isOfType("Subsystem Requirement")) {
+ boolean loopNeverRan = true;
+ for (Artifact subsystemDesign : subsystemRequirement.getRelatedArtifacts(CoreRelationEnumeration.Design__Design)) {
+ if (subsystemDesign.isOfType("Subsystem Design")) {
+ loopNeverRan = false;
+ excelWriter.writeCell(subsystemDesign.getSoleAttributeValue("Imported Paragraph Number", ""), 2);
+ excelWriter.writeCell(subsystemDesign.getDescriptiveName(), 3);
+ excelWriter.endRow();
+ }
+ }
+ if (loopNeverRan) {
+ excelWriter.endRow();
+ }
+ } else {
+ excelWriter.writeCell("N/A - " + subsystemRequirement.getArtifactTypeName());
+ excelWriter.endRow();
+ }
+ }
+
+ excelWriter.endSheet();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#getDescriptionUsage()
+ */
+ @Override
+ public String getDescriptionUsage() {
+ return "Publish Subsystem To Design Traceability Tables";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XListDropViewer\" displayName=\"Subsystem Root Artifacts\" /></xWidgets>";
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java
new file mode 100644
index 00000000000..e12cb033134
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.errorhandler;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class ErrorHandler {
+
+ private Set<Resolver> set;
+ private StateValue value;
+
+ /**
+ * Error handler.
+ */
+ public ErrorHandler() {
+ super();
+ this.set = new HashSet<Resolver>();
+ this.value = new StateValue();
+ }
+
+ public void processException(Exception ex) {
+ boolean resolved = false;
+ for (Resolver r : set) {
+ if (r.resolve(ex, value)) {
+ resolved = true;
+ }
+ }
+ if (!resolved) {
+ throw new RuntimeException("Exception not resolved", ex);
+ }
+ }
+
+ public void addResolver(Resolver resolver) {
+ set.add(resolver);
+ }
+
+ public boolean isSaveValid() {
+ return value.isSaveValid();
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java
new file mode 100644
index 00000000000..aacf4e76012
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.errorhandler;
+
+public interface Resolver {
+
+ public boolean resolve(Exception ex, StateValue value);
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java
new file mode 100644
index 00000000000..eae68646af2
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.errorhandler;
+
+public class SqlResolver implements Resolver {
+
+ public SqlResolver() {
+ super();
+ }
+
+ public boolean resolve(Exception ex, StateValue value) {
+ if (ex.getMessage().contains("connection")) {
+ value.andSaveValid(false);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return this.getClass().getCanonicalName().equals(obj.getClass().getCanonicalName());
+ }
+
+ @Override
+ public int hashCode() {
+ return this.getClass().getCanonicalName().hashCode();
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java
new file mode 100644
index 00000000000..8cb4546cb80
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.errorhandler;
+
+public class StateValue {
+
+ private boolean isSaveValid;
+
+ public StateValue() {
+ super();
+ isSaveValid = true;
+ }
+
+ public boolean isSaveValid() {
+ return isSaveValid;
+ }
+
+ public void andSaveValid(boolean isSaveValid) {
+ this.isSaveValid &= isSaveValid;
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java
new file mode 100644
index 00000000000..5469a3bd858
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.health;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItemAction;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BranchCommitRegressionTest extends XNavigateItemAction {
+
+ public static String NAME = "CommitRegressionTest - Run on Test";
+
+ /**
+ * @param parent
+ */
+ public BranchCommitRegressionTest(XNavigateItem parent) {
+ super(parent, NAME);
+ }
+
+ public BranchCommitRegressionTest() {
+ this(null);
+ }
+
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) {
+ if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getName(), getName())) return;
+ Jobs.startJob(new TraxInterfaceRegressionTestJob(getName()), true);
+ }
+
+ public class TraxInterfaceRegressionTestJob extends Job {
+ XResultData rd = new XResultData();
+ private final String jobName;
+
+ public TraxInterfaceRegressionTestJob(String jobName) {
+ super(jobName);
+ this.jobName = jobName;
+ }
+
+ @Override
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+ runTest(rd, monitor);
+ rd.report(getName());
+ monitor.done();
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ return new Status(Status.ERROR, DefinePlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
+ }
+ }
+
+ }
+
+ /**
+ * used recursively when originally passed a directory, thus an array of files is accepted
+ *
+ * @param monitor
+ * @throws Exception
+ */
+ public static void runTest(XResultData rd, IProgressMonitor monitor) throws Exception {
+ if (monitor != null) monitor.subTask(NAME);
+ rd.logError("This is an error");
+ rd.logWarning("This is a warning");
+ if (monitor != null) monitor.done();
+ rd.log("Complete");
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java
new file mode 100644
index 00000000000..5489d1d146c
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.meta;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.define.relation.Import.RelationImporter;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ImportRelationJob extends Job {
+ private final File file;
+ private final Branch branch;
+
+ public ImportRelationJob(File file, Branch branch) throws IllegalArgumentException, CoreException {
+ super("Importing Relations");
+ this.file = file;
+ this.branch = branch;
+ }
+
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+ RelationImporter importer = new RelationImporter(branch);
+ importer.extractRelationsFromSheet(new FileInputStream(file), monitor);
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ String message = ex.getMessage();
+
+ if (message == null) message = "";
+
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ return new Status(Status.ERROR, DefinePlugin.PLUGIN_ID, -1, ex.toString(), ex);
+ }
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java
new file mode 100644
index 00000000000..d0206aa4be9
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.meta;
+
+import java.io.File;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkspace;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ImportRelationPage extends WizardDataTransferPage {
+ private Button btnSingleFile;
+ private Text txtSingleFile;
+ private String currentFileSelection;
+
+ /**
+ * @param name
+ * @param selection
+ */
+ public ImportRelationPage(String name, IStructuredSelection selection) {
+ super(name);
+ setTitle("Import relations into Define");
+ setDescription("Import relations into Define");
+
+ if (selection != null && selection.size() == 1) {
+ Object firstElement = selection.getFirstElement();
+ if (firstElement instanceof IAdaptable) {
+ Object resource = ((IAdaptable) firstElement).getAdapter(IResource.class);
+ if (resource != null) {
+ IResource currentResourceSelection = (IResource) resource;
+ if (currentResourceSelection.getType() == IResource.FILE) {
+ currentFileSelection = currentResourceSelection.getLocation().toString();
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ composite.setFont(parent.getFont());
+
+ createSourceGroup(composite);
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all
+ * events and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+ }
+
+ protected void createSourceGroup(Composite parent) {
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Import Source");
+ GridLayout gd = new GridLayout();
+ gd.numColumns = 3;
+ composite.setLayout(gd);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ txtSingleFile = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ txtSingleFile.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ txtSingleFile.setText((currentFileSelection == null ? "" : currentFileSelection));
+ txtSingleFile.addListener(SWT.Modify, this);
+ btnSingleFile = new Button(composite, SWT.PUSH);
+ btnSingleFile.setText("&Browse...");
+
+ btnSingleFile.addSelectionListener(new SelectionAdapter() {
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ File file = selectFile();
+ if (file != null && file.isFile()) txtSingleFile.setText(file.getPath());
+ }
+ });
+
+ setPageComplete(determinePageCompletion());
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ protected boolean validateSourceGroup() {
+ if (!(new File(txtSingleFile.getText()).isFile())) {
+ setErrorMessage(txtSingleFile.getText() + " is not a file");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean finish() {
+ try {
+ // getSpecifiedContainer().getProject();
+
+ File file = new File(txtSingleFile.getText());
+ // TODO this branch needs to be selected from the wizard not hard coded
+ Job job = new ImportRelationJob(file, BranchManager.getDefaultBranch());
+ job.setUser(true);
+ job.setPriority(Job.LONG);
+ job.schedule();
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ ErrorDialog.openError(getShell(), "Define Import Error", "An error has occured while importing a document.",
+ new Status(IStatus.ERROR, "org.eclipse.osee.framework.jdk.core", IStatus.ERROR,
+ "Unknown exception occurred in the import", ex));
+ }
+ return true;
+ }
+
+ private File selectFile() {
+ FileDialog dialog = new FileDialog(getShell(), SWT.OPEN | SWT.SINGLE);
+ dialog.setFilterExtensions(new String[] {"*.xml"});
+ dialog.setFilterPath(AWorkspace.getWorkspacePath());
+
+ String path = dialog.open();
+
+ if (path != null) {
+ return new File(path);
+ } else {
+ return null;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java
new file mode 100644
index 00000000000..3de43c67a94
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.meta;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ImportRelationWizard extends Wizard implements IImportWizard {
+ private ImportRelationPage mainPage;
+ private IStructuredSelection selection;
+
+ /**
+ *
+ */
+ public ImportRelationWizard() {
+ super();
+ setDialogSettings(DefinePlugin.getInstance().getDialogSettings());
+ setWindowTitle("Skynet Types Import Wizard");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ return mainPage.finish();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+ * org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.selection = selection;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on Wizard.
+ */
+ public void addPages() {
+ mainPage = new ImportRelationPage("Import Artifact Types", selection);
+ addPage(mainPage);
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java
new file mode 100644
index 00000000000..cbd19958acc
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.navigate;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
+import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * Insert the type's description here.
+ *
+ * @see ViewPart
+ */
+public class DefineNavigateView extends ViewPart implements IActionable {
+
+ public static final String VIEW_ID = "org.eclipse.osee.define.DefineNavigateView";
+ public static final String HELP_CONTEXT_ID = "defineNavigator";
+ private XNavigateComposite xNavComp;
+
+ /**
+ * The constructor.
+ */
+ public DefineNavigateView() {
+ }
+
+ public void setFocus() {
+ }
+
+ /*
+ * @see IWorkbenchPart#createPartControl(Composite)
+ */
+ public void createPartControl(Composite parent) {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return;
+
+ xNavComp = new XNavigateComposite(new DefineNavigateViewItems(), parent, SWT.NONE);
+ xNavComp.getFilteredTree().getViewer().setSorter(new DefineNavigateViewerSorter());
+
+ DefinePlugin.getInstance().setHelp(xNavComp, HELP_CONTEXT_ID);
+ createActions();
+ xNavComp.refresh();
+ }
+
+ protected void createActions() {
+
+ Action refreshAction = new Action("Refresh") {
+
+ public void run() {
+ xNavComp.refresh();
+ }
+ };
+ refreshAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif"));
+ refreshAction.setToolTipText("Refresh");
+
+ OseeAts.addBugToViewToolbar(this, this, DefinePlugin.getInstance(), VIEW_ID, "Define Navigator");
+
+ }
+
+ public String getActionDescription() {
+ IStructuredSelection sel = (IStructuredSelection) xNavComp.getFilteredTree().getViewer().getSelection();
+ if (sel.iterator().hasNext()) return String.format("Currently Selected - %s",
+ ((XNavigateItem) sel.iterator().next()).getName());
+ return "";
+ }
+
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java
new file mode 100644
index 00000000000..5f5dcf16003
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.navigate;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.define.health.BranchCommitRegressionTest;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
+import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin;
+import org.eclipse.osee.framework.ui.skynet.blam.BlamOperations;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItemBlam;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateViewItems;
+import org.osgi.framework.Bundle;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DefineNavigateViewItems extends XNavigateViewItems {
+ private static DefineNavigateViewItems navigateItems = new DefineNavigateViewItems();
+
+ public DefineNavigateViewItems() {
+ super();
+ }
+
+ public static DefineNavigateViewItems getInstance() {
+ return navigateItems;
+ }
+
+ public List<XNavigateItem> getSearchNavigateItems() {
+ List<XNavigateItem> items = new ArrayList<XNavigateItem>();
+
+ XNavigateItem blamOperationItems = new XNavigateItem(null, "Blam Operations");
+ for (BlamOperation blamOperation : BlamOperations.getBlamOperationsNameSort()) {
+ new XNavigateItemBlam(blamOperationItems, blamOperation);
+ }
+ items.add(blamOperationItems);
+
+ try {
+ if (AccessControlManager.isOseeAdmin()) {
+ XNavigateItem adminItems = new XNavigateItem(null, "Admin");
+ new BranchCommitRegressionTest(adminItems);
+ items.add(adminItems);
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+
+ addExtensionPointItems(items);
+
+ return items;
+ }
+
+ public void addExtensionPointItems(List<XNavigateItem> items) {
+ IExtensionPoint point =
+ Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.define.DefineNavigateItem");
+ if (point == null) OSEELog.logSevere(DefinePlugin.class, "Can't access DefineNavigateItem extension point", true);
+ IExtension[] extensions = point.getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] elements = extension.getConfigurationElements();
+ String classname = null;
+ String bundleName = null;
+ for (IConfigurationElement el : elements) {
+ if (el.getName().equals("IDefineNavigateItem")) {
+ classname = el.getAttribute("classname");
+ bundleName = el.getContributor().getName();
+ }
+ }
+ if (classname != null && bundleName != null) {
+ Bundle bundle = Platform.getBundle(bundleName);
+ try {
+ Class<?> taskClass = bundle.loadClass(classname);
+ Object obj = taskClass.newInstance();
+ IDefineNavigateItem task = (IDefineNavigateItem) obj;
+ items.addAll(task.getNavigateItems());
+ } catch (Exception ex) {
+ OSEELog.logException(DefinePlugin.class, "Error loading DefineNavigateItem extension", ex, true);
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java
new file mode 100644
index 00000000000..70ad4d49b27
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.navigate;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class DefineNavigateViewerSorter extends ViewerSorter {
+
+ /**
+ * @param treeViewer
+ */
+ public DefineNavigateViewerSorter() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ XNavigateItem item1 = (XNavigateItem) e1;
+ XNavigateItem item2 = (XNavigateItem) e2;
+ return getComparator().compare(item1.getName(), item2.getName());
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java
new file mode 100644
index 00000000000..17ee37995d7
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.navigate;
+
+import java.util.List;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+
+/**
+ * @author Donald G. Dunne
+ */
+public interface IDefineNavigateItem {
+
+ public List<XNavigateItem> getNavigateItems();
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java
new file mode 100644
index 00000000000..db4cdc8fcf2
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.relation.Import;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.CharBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist;
+import org.eclipse.osee.framework.db.connection.exception.MultipleArtifactsExist;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.text.FindResults;
+import org.eclipse.osee.framework.jdk.core.text.tool.Find;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkspace;
+
+public class ExtractTestRelations {
+ private String scriptsDir;
+ private String fileNamePattern;
+ private Branch branch;
+ private static final Matcher testScriptMatcher = Pattern.compile("doTestCase").matcher("");
+ private static final Matcher traceabilityMatcher = Pattern.compile("RequirementId\\(\\\"([^\\\"]+)\\\"").matcher("");
+
+ public ExtractTestRelations(String scriptsDir, String fileNamePattern, Branch branch) {
+ super();
+ this.scriptsDir = scriptsDir;
+ this.fileNamePattern = fileNamePattern;
+ this.branch = branch;
+ }
+
+ public void run() {
+ ArrayList<String> patterns = new ArrayList<String>();
+ patterns.add(scriptsDir);
+ Find app = new Find("RequirementId\\(\\\"([^\\\"]+)\\\"", new File(scriptsDir), fileNamePattern);
+ app.find(999999, true);
+ FindResults results = app.getResults();
+
+ for (FindResults.FindResultsIterator i = results.iterator(); i.hasNext();) {
+ try {
+ addRelationToDatabaseIfNotAlreadyThere(AWorkspace.fileToIFile(i.currentFile), i.currentRegion);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ }
+
+ public static void traceabilityReport() throws IOException {
+ Pattern javaFilePattern = Pattern.compile(".*\\.java");
+ for (IProject project : AWorkspace.getProjects()) {
+ File projectLocation = project.getLocation().toFile();
+ for (File javaFile : (List<File>) Lib.recursivelyListFiles(projectLocation, javaFilePattern)) {
+ CharBuffer buf = Lib.fileToCharBuffer(javaFile);
+ testScriptMatcher.reset(buf);
+ if (testScriptMatcher.find()) {
+ traceabilityMatcher.reset(buf);
+ while (traceabilityMatcher.find()) {
+ System.out.println(javaFile.getName() + ", " + traceabilityMatcher.group(1));
+ }
+ } else {
+ System.out.println(javaFile + ": no traceability");
+ }
+ }
+ }
+ }
+
+ private void addRelationToDatabaseIfNotAlreadyThere(IFile testArtifactFile, String reqArtifactName) throws OseeCoreException {
+
+ // Make sure that the runtime relation type is available
+ Artifact reqArtifact =
+ ArtifactQuery.getArtifactFromTypeAndName(Requirements.SOFTWARE_REQUIREMENT, reqArtifactName, branch);
+
+ // Make sure we have the reqArtifact
+ if (reqArtifact == null) {
+ System.out.println("Unable to locate the requirement named:\"" + reqArtifactName + "\"");
+ return;
+ }
+
+ // TODO replace the null here with the Test_TestSide relationSide enumeration
+ reqArtifact.addRelation(null, getTestArtifact(testArtifactFile, reqArtifact.getBranch()));
+ // Get a new test relation with the same tag as the requirement artifact
+ // UserRelation testRelation = relationManager.getUserRelationDescriptor("Test").makeNewUserRelation(reqArtifact.getTag());
+ // RelationLink link = relationManager.getRelationLinkDescriptor("Test").makeNewLink();
+
+ // Add the items to the relation
+ // link.setArtifact("Requirement", reqArtifact);
+ // link.setArtifact("Test", getTestArtifact(testArtifactName, reqArtifact.getTag()));
+ // reqArtifact.getLinkManager().addLink(link);
+ //
+ // link.setArtifactA(reqArtifact);
+ // link.setArtifactB(getTestArtifact(testArtifactName, reqArtifact.getTag()));
+ // link.persist();
+
+ // testRelation.addArtifact("test", getTestArtifact(testArtifactName, reqArtifact.getTag()));
+ // testRelation.addArtifact("requirement", reqArtifact);
+
+ // Save the relation
+ // link.persist();
+ }
+
+ private Artifact getTestArtifact(IFile testArtifactFile, Branch branch) throws OseeCoreException {
+ try {
+ return ArtifactQuery.getArtifactFromTypeAndName(Requirements.TEST_SCRIPT, testArtifactFile.getName(), branch);
+ } catch (MultipleArtifactsExist ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ return null;
+ } catch (ArtifactDoesNotExist ex) {
+ Artifact testArtifact =
+ ArtifactTypeManager.addArtifact(Requirements.TEST_SCRIPT, branch, testArtifactFile.getName());
+ testArtifact.setSoleAttributeValue("Content URL", testArtifactFile.getFullPath().toString());
+ testArtifact.persistAttributes();
+ return testArtifact;
+ }
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java
new file mode 100644
index 00000000000..67cd68b1d81
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.relation.Import;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.SkynetActivator;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class RelationImporter implements RowProcessor {
+ private static final ArtifactPersistenceManager artifactManager = ArtifactPersistenceManager.getInstance();
+ private static final int leadingColumnCount = 2;
+ private final ExcelSaxHandler excelHandler;
+ private final XMLReader xmlReader;
+ private Artifact[] columnArtifacts;
+ private IProgressMonitor monitor;
+ private boolean done;
+ private final Branch branch;
+
+ /**
+ * @throws SAXException
+ */
+ public RelationImporter(Branch branch) throws SAXException {
+ this.branch = branch;
+ excelHandler = new ExcelSaxHandler(this, true, true);
+
+ xmlReader = XMLReaderFactory.createXMLReader();
+ xmlReader.setContentHandler(excelHandler);
+ }
+
+ public void extractRelationsFromSheet(InputStream importStream, IProgressMonitor monitor) throws IOException, SAXException {
+ this.monitor = monitor;
+ xmlReader.parse(new InputSource(importStream));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processRow(java.lang.String[])
+ */
+ public void processRow(String[] row) {
+ if (done) return;
+ try {
+ monitor.worked(1);
+ Collection<Artifact> artifacts =
+ ArtifactQuery.getArtifactsFromTypeAndAttribute(Requirements.SUBSYSTEM_REQUIREMENT,
+ "Imported Paragraph Number", row[1], branch);
+
+ Artifact rowArtifact;
+ try {
+ rowArtifact = getSoleArtifact(artifacts);
+ } catch (IllegalArgumentException ex) {
+ OseeLog.log(SkynetActivator.class, Level.SEVERE, ex);
+ return;
+ }
+
+ if (rowArtifact == null) {
+ System.out.println("Skipping " + row[0] + " becuase no matching artifact was found");
+ } else {
+ if (!row[0].equals(rowArtifact.getDescriptiveName())) {
+ System.out.printf("Warning %s != %s%n", row[0], rowArtifact.getDescriptiveName());
+ }
+ monitor.subTask(rowArtifact.getDescriptiveName());
+ for (int i = 0; i < columnArtifacts.length; i++) {
+ String rationale = row[i + leadingColumnCount];
+ if (rationale != null) {
+ if (rationale.equalsIgnoreCase("x")) {
+ rationale = "";
+ }
+ columnArtifacts[i].addRelation(CoreRelationEnumeration.ALLOCATION__REQUIREMENT, rowArtifact,
+ rationale);
+ columnArtifacts[i].persistRelations();
+ }
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetActivator.class, Level.SEVERE, ex);
+ }
+ }
+
+ private Artifact getSoleArtifact(Collection<Artifact> artifacts) {
+ Artifact artifactResult = null;
+ boolean soleArtifact = true;
+ for (Artifact artifact : artifacts) {
+ if (soleArtifact) {
+ soleArtifact = false;
+ } else {
+ throw new IllegalArgumentException("Found more than one match for: " + artifact);
+ }
+ artifactResult = artifact;
+ }
+ return artifactResult;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processHeaderRow(java.lang.String[])
+ */
+ public void processHeaderRow(String[] row) {
+ monitor.setTaskName("Aquire Column Artifacts");
+ columnArtifacts = new Artifact[row.length - leadingColumnCount];
+ for (int i = 0; i < columnArtifacts.length; i++) {
+ monitor.worked(1);
+ try {
+ Collection<Artifact> artifacts =
+ ArtifactQuery.getArtifactsFromTypeAndName(Requirements.COMPONENT, row[i + leadingColumnCount], branch);
+
+ columnArtifacts[i] = getSoleArtifact(artifacts);
+ monitor.subTask(columnArtifacts[i].getDescriptiveName());
+ } catch (Exception ex) {
+ System.out.println(ex);
+ }
+ }
+ System.out.println(Arrays.deepToString(columnArtifacts));
+ monitor.setTaskName("Relate Row Artifacts");
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processEmptyRow()
+ */
+ public void processEmptyRow() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processCommentRow(java.lang.String[])
+ */
+ public void processCommentRow(String[] row) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#reachedEndOfWorksheet()
+ */
+ public void reachedEndOfWorksheet() {
+ monitor.done();
+ done = true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#detectedTotalRowCount(int)
+ */
+ public void detectedRowAndColumnCounts(int rowCount, int columnCount) {
+ monitor.beginTask("Importing Relations", rowCount + columnCount - leadingColumnCount);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.define.artifact.Import.RowProcessor#foundStartOfWorksheet(java.lang.String)
+ */
+ public void foundStartOfWorksheet(String sheetName) {
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java
new file mode 100644
index 00000000000..00023bf9d34
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.relation;
+
+import java.io.File;
+import java.util.Date;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableColorProvider;
+import org.eclipse.jface.viewers.ITableFontProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+public class TreeViewerTest {
+
+ class TreeViewerTestLabelProvider implements ITableLabelProvider, ITableColorProvider, ITableFontProvider {
+ Font font = null;
+
+ public String getColumnText(Object element, int columnIndex) {
+ if (!(element instanceof File)) return null;
+ File file = (File) element;
+ switch (columnIndex) {
+ case 0:
+ return file.getName();
+ case 1:
+ return "" + new Date(file.lastModified());
+ case 2:
+ return "" + file.isHidden();
+ }
+ return null;
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (columnIndex != 0) return null;
+ if (!(element instanceof File)) return null;
+ File file = (File) element;
+ Display display = Display.getCurrent();
+ if (file.isDirectory()) return display.getSystemImage(SWT.ICON_WARNING);
+ return display.getSystemImage(SWT.ICON_QUESTION);
+ }
+
+ public void dispose() {
+ if (font != null) font.dispose();
+ font = null;
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public Color getForeground(Object element, int columnIndex) {
+ if (columnIndex == 1) {
+ Display display = Display.getCurrent();
+ return display.getSystemColor(SWT.COLOR_RED);
+ }
+ return null;
+ }
+
+ public Color getBackground(Object element, int columnIndex) {
+ if (columnIndex == 0) {
+ File file = (File) element;
+ Display display = Display.getCurrent();
+ if (file.isDirectory()) return display.getSystemColor(SWT.COLOR_CYAN);
+ return display.getSystemColor(SWT.COLOR_MAGENTA);
+ }
+ return null;
+ }
+
+ public Font getFont(Object element, int columnIndex) {
+ if (columnIndex == 2) {
+ if (font == null) {
+ Display display = Display.getCurrent();
+ font = new Font(display, "Times", 12, SWT.ITALIC);
+ }
+ return font;
+ }
+ return null;
+ }
+ }
+
+ public static void main(String[] args) {
+ final Display display = new Display();
+ final Shell shell = new Shell(display);
+ shell.setLayout(new FormLayout());
+
+ TreeViewerTestLabelProvider labelProvider1 = new TreeViewerTest().new TreeViewerTestLabelProvider();
+ ITreeContentProvider contentProvider = new ITreeContentProvider() {
+ public Object[] getChildren(Object parentElement) {
+ if (!(parentElement instanceof File)) return null;
+ File file = (File) parentElement;
+ if (file.isDirectory()) return file.listFiles();
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ if (!(element instanceof File)) return null;
+ File file = (File) element;
+ return file.getParentFile();
+ }
+
+ public boolean hasChildren(Object element) {
+ if (!(element instanceof File)) return false;
+ File file = (File) element;
+ return file.isDirectory();
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ };
+
+ ILabelProvider labelProvider2 = new ILabelProvider() {
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ public Image getImage(Object element) {
+ if (!(element instanceof File)) return null;
+ File file = (File) element;
+ if (file.isDirectory()) return display.getSystemImage(SWT.ICON_WARNING);
+ return display.getSystemImage(SWT.ICON_QUESTION);
+ }
+
+ public String getText(Object element) {
+ if (!(element instanceof File)) return null;
+ File file = (File) element;
+ return file.getName();
+ }
+
+ };
+
+ final TreeViewer treeViewer1 = new TreeViewer(shell, SWT.FULL_SELECTION | SWT.CHECK);
+ Tree tree1 = treeViewer1.getTree();
+ tree1.setHeaderVisible(true);
+ TreeColumn column1 = new TreeColumn(tree1, SWT.LEFT);
+ column1.setText("Name");
+ column1.setImage(display.getSystemImage(SWT.ICON_WORKING));
+ column1.setWidth(200);
+ TreeColumn column2 = new TreeColumn(tree1, SWT.CENTER);
+ column2.setText("Last Modified");
+ column2.setImage(display.getSystemImage(SWT.ICON_INFORMATION));
+ column2.setWidth(200);
+ TreeColumn column3 = new TreeColumn(tree1, SWT.CENTER);
+ column3.setText("Hidden");
+ column3.setImage(display.getSystemImage(SWT.ICON_INFORMATION));
+ column3.setWidth(100);
+ treeViewer1.setLabelProvider(labelProvider1);
+ treeViewer1.setContentProvider(contentProvider);
+
+ final TreeViewer treeViewer2 = new TreeViewer(shell);
+ Tree tree2 = treeViewer2.getTree();
+ treeViewer2.setLabelProvider(labelProvider2);
+ treeViewer2.setContentProvider(contentProvider);
+
+ Button b = new Button(shell, SWT.PUSH);
+ b.setText("choose root folder");
+ b.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event e) {
+ DirectoryDialog f = new DirectoryDialog(shell, SWT.OPEN);
+ String root = f.open();
+ if (root != null) {
+ File file = new File(root);
+ if (file.exists()) {
+ treeViewer1.setInput(file);
+ treeViewer1.refresh();
+ treeViewer2.setInput(file);
+ treeViewer2.refresh();
+ }
+ }
+ }
+ });
+
+ FormData data = new FormData();
+ data.left = new FormAttachment(0, 10);
+ data.top = new FormAttachment(0, 10);
+ data.right = new FormAttachment(50, -5);
+ data.bottom = new FormAttachment(b, -10);
+ tree1.setLayoutData(data);
+
+ data = new FormData();
+ data.left = new FormAttachment(50, 5);
+ data.top = new FormAttachment(0, 10);
+ data.right = new FormAttachment(100, -10);
+ data.bottom = new FormAttachment(b, -10);
+ tree2.setLayoutData(data);
+
+ data = new FormData();
+ data.left = new FormAttachment(0, 10);
+ data.bottom = new FormAttachment(100, -10);
+ b.setLayoutData(data);
+
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) display.sleep();
+ }
+ display.dispose();
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java
new file mode 100644
index 00000000000..770861b93e2
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.traceability;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.regex.Pattern;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.CountingMap;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ISheetWriter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+import org.eclipse.osee.framework.skynet.core.word.WordUtil;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ImportTraceabilityJob extends Job {
+ private static final Pattern filePattern = Pattern.compile(".*\\.(java|ada|ads|adb|c|h)");
+ private static final TraceabilityExtractor traceExtractor = TraceabilityExtractor.getInstance();
+
+ private final File file;
+ private final RequirementData requirementData;
+ private final ArrayList<String> noTraceabilityFiles;
+ private final CountingMap<Artifact> reqsTraceCounts;
+ private final HashCollection<Artifact, String> requirementToCodeUnitsMap;
+ private final HashSet<String> codeUnits;
+ private final CharBackedInputStream charBak;
+ private final ISheetWriter excelWriter;
+ private int pathPrefixLength;
+ private boolean writeOutResults;
+
+ public ImportTraceabilityJob(File file, Branch branch, boolean writeOutResults) throws CoreException, IOException {
+ super("Importing Traceability");
+ this.file = file;
+ this.requirementData = new RequirementData(branch);
+ noTraceabilityFiles = new ArrayList<String>(200);
+ reqsTraceCounts = new CountingMap<Artifact>();
+ codeUnits = new HashSet<String>();
+ requirementToCodeUnitsMap = new HashCollection<Artifact, String>(false, LinkedList.class);
+ charBak = new CharBackedInputStream();
+ excelWriter = new ExcelXmlWriter(charBak.getWriter());
+ this.writeOutResults = writeOutResults;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public IStatus run(IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+ try {
+ monitor.beginTask("Importing From " + file.getName(), 100);
+ monitor.worked(1);
+
+ toReturn = requirementData.initialize(monitor);
+ if (toReturn.getSeverity() == IStatus.OK) {
+ if (monitor.isCanceled() != true) {
+ if (writeOutResults) {
+ excelWriter.startSheet("srs <--> code units", 6);
+ excelWriter.writeRow("Req in DB", "Code Unit", "Requirement Name", "Requirement Trace Mark in Code");
+ }
+
+ if (file.isFile()) {
+ for (String path : Lib.readListFromFile(file, true)) {
+ monitor.subTask(path);
+ handleDirectory(new File(path));
+ if (monitor.isCanceled() == true) {
+ break;
+ }
+ }
+ } else if (file.isDirectory()) {
+ handleDirectory(file);
+ } else {
+ throw new IllegalStateException("unexpected file system type");
+ }
+
+ if (writeOutResults && monitor.isCanceled() != true) {
+ excelWriter.endSheet();
+
+ writeNoTraceFilesSheet();
+ writeTraceCountsSheet();
+
+ excelWriter.endWorkbook();
+ IFile iFile = OseeData.getIFile("CodeUnit_To_SRS_Trace.xml");
+ AIFile.writeToFile(iFile, charBak);
+ Program.launch(iFile.getLocation().toOSString());
+ }
+
+ if (monitor.isCanceled() != true) {
+ toReturn = Status.OK_STATUS;
+ } else {
+ toReturn = Status.CANCEL_STATUS;
+ }
+ }
+ }
+ } catch (Exception ex) {
+ toReturn = new Status(Status.ERROR, DefinePlugin.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex);
+ } finally {
+ monitor.done();
+ }
+ return toReturn;
+ }
+
+ private void handleDirectory(File directory) throws IOException, OseeCoreException {
+ if (directory == null || directory.getParentFile() == null) {
+ throw new OseeArgumentException("The path " + directory + " is invalid.");
+ }
+
+ pathPrefixLength = directory.getParentFile().getAbsolutePath().length();
+
+ for (File sourceFile : Lib.recursivelyListFiles(directory, filePattern)) {
+ List<String> traceMarks = traceExtractor.getTraceMarksFromFile(sourceFile);
+
+ int matchCount = 0;
+ String relativePath = sourceFile.getPath().substring(pathPrefixLength);
+ codeUnits.add(relativePath);
+ for (String traceMark : traceMarks) {
+ handelReqTrace(relativePath, traceMark);
+ matchCount++;
+ }
+ if (matchCount == 0) {
+ noTraceabilityFiles.add(relativePath);
+ }
+ }
+ }
+
+ private void writeNoTraceFilesSheet() throws IOException {
+ excelWriter.startSheet("no match files", 1);
+ for (String path : noTraceabilityFiles) {
+ excelWriter.writeRow(path);
+ }
+ excelWriter.endSheet();
+ }
+
+ private void writeTraceCountsSheet() throws IOException, OseeCoreException {
+ excelWriter.startSheet("trace counts", 3);
+ excelWriter.writeRow("SRS Requirement from Database", "Trace Count", "Partitions");
+ excelWriter.writeRow("% requirement coverage", null, "=1-COUNTIF(C2,&quot;0&quot;)/COUNTA(C2)");
+
+ for (Artifact artifact : requirementData.getDirectSwRequirements()) {
+ excelWriter.writeRow(artifact.getDescriptiveName(), String.valueOf(reqsTraceCounts.get(artifact)),
+ Collections.toString(",", artifact.getAttributesToStringList(Requirements.PARTITION)));
+ }
+
+ excelWriter.endSheet();
+ }
+
+ private void handelReqTrace(String path, String traceMark) throws OseeCoreException, IOException {
+ String foundStr;
+ Artifact reqArtifact = null;
+
+ if (traceExtractor.isValidTraceMark(traceMark) != true) {
+ foundStr = "invalid trace mark";
+ } else {
+ reqArtifact = requirementData.getRequirementFromTraceMark(traceMark);
+ if (reqArtifact == null) {
+ Pair<String, String> structuredRequirement = traceExtractor.getStructuredRequirement(traceMark);
+ if (structuredRequirement != null) {
+ reqArtifact = requirementData.getRequirementFromTraceMark(structuredRequirement.getKey());
+
+ if (reqArtifact == null) {
+ foundStr = "no match in DB";
+ } else {
+ // for local data and procedures search requirement text for traceMark
+ // example local data [{SUBSCRIBER}.ID] and example procedure {CURSOR_ACKNOWLEDGE}.NORMAL
+ String textContent =
+ WordUtil.textOnly(reqArtifact.getSoleAttributeValue(WordAttribute.WORD_TEMPLATE_CONTENT, "")).toUpperCase();
+ if (textContent.contains(traceExtractor.getCanonicalRequirementName(structuredRequirement.getValue()))) {
+ foundStr = "req body match";
+ } else {
+ foundStr = "paritial match";
+ }
+ }
+ } else {
+ foundStr = "no match in DB";
+ }
+ } else {
+ foundStr = fullMatch(reqArtifact);
+ }
+ }
+
+ String name = null;
+ if (reqArtifact != null) {
+ name = reqArtifact.getDescriptiveName();
+ requirementToCodeUnitsMap.put(reqArtifact, path);
+ }
+
+ if (writeOutResults) {
+ excelWriter.writeRow(foundStr, path, name, traceMark);
+ }
+ }
+
+ private String fullMatch(Artifact reqArtifact) {
+ reqsTraceCounts.put(reqArtifact);
+ return "full match";
+ }
+
+ public HashCollection<Artifact, String> getRequirementToCodeUnitsMap() {
+ return requirementToCodeUnitsMap;
+ }
+
+ /**
+ * @return the codeUnits
+ */
+ public HashSet<String> getCodeUnits() {
+ return codeUnits;
+ }
+
+ /**
+ * Get all direct and indirect software requirements
+ *
+ * @return requirement data
+ */
+ public RequirementData getRequirementData() {
+ return requirementData;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java
new file mode 100644
index 00000000000..43c51c750a3
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.traceability;
+
+import java.io.File;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.DirectoryOrFileSelector;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectComposite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ImportTraceabilityPage extends WizardDataTransferPage {
+ public static final String PAGE_NAME = "org.eclipse.osee.define.wizardPage.importTraceabilityPage";
+
+ private DirectoryOrFileSelector directoryFileSelector;
+ private BranchSelectComposite branchSelectComposite;
+
+ private IResource currentResourceSelection;
+
+ /**
+ * @param name
+ * @param selection
+ */
+ public ImportTraceabilityPage(IStructuredSelection selection) {
+ super(PAGE_NAME);
+
+ setTitle("Import traceability into OSEE Define");
+ setDescription("Import relations between artifacts");
+
+ if (selection != null && selection.size() == 1) {
+ Object firstElement = selection.getFirstElement();
+ if (firstElement instanceof IAdaptable) {
+ currentResourceSelection = (IResource) ((IAdaptable) firstElement).getAdapter(IResource.class);
+ }
+ }
+ }
+
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite composite = new Composite(parent, SWT.NULL);
+ composite.setLayout(new GridLayout());
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ composite.setFont(parent.getFont());
+
+ createSourceGroup(composite);
+
+ restoreWidgetValues();
+ updateWidgetEnablements();
+ setPageComplete(determinePageCompletion());
+
+ setControl(composite);
+ }
+
+ /**
+ * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all events
+ * and enablements for controls on this page. Subclasses may extend.
+ *
+ * @param event Event
+ */
+ public void handleEvent(Event event) {
+ setPageComplete(determinePageCompletion());
+ }
+
+ protected void createSourceGroup(Composite parent) {
+ directoryFileSelector = new DirectoryOrFileSelector(parent, SWT.NONE, "Import Source", this);
+
+ if (currentResourceSelection == null) {
+ // Select directory as the default
+ directoryFileSelector.setDirectorySelected(true);
+ } else {
+ directoryFileSelector.setDirectorySelected(currentResourceSelection.getType() != IResource.FILE);
+ directoryFileSelector.setText(currentResourceSelection.getLocation().toString());
+ }
+
+ Group composite = new Group(parent, SWT.NONE);
+ composite.setText("Destination Branch");
+ GridLayout gd = new GridLayout();
+ composite.setLayout(gd);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ branchSelectComposite = new BranchSelectComposite(composite, SWT.BORDER, false);
+
+ setPageComplete(determinePageCompletion());
+ }
+
+ /*
+ * @see WizardPage#becomesVisible
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ // policy: wizards are not allowed to come up with an error message
+ if (visible) {
+ setErrorMessage(null);
+ }
+ }
+
+ @Override
+ protected boolean validateSourceGroup() {
+ return directoryFileSelector.validate(this);
+ }
+
+ public File getImportFile() {
+ return directoryFileSelector.getFile();
+ }
+
+ public Branch getSelectedBranch() {
+ return branchSelectComposite.getSelectedBranch();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java
new file mode 100644
index 00000000000..17ca1d32743
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.traceability;
+
+import java.io.File;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ImportTraceabilityWizard extends Wizard implements IImportWizard {
+ private ImportTraceabilityPage mainPage;
+ private IStructuredSelection selection;
+
+ /**
+ *
+ */
+ public ImportTraceabilityWizard() {
+ super();
+ setWindowTitle("Traceability Import Wizard");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ @Override
+ public boolean performFinish() {
+ try {
+ Branch branch = mainPage.getSelectedBranch();
+ File file = mainPage.getImportFile();
+ Jobs.startJob(new ImportTraceabilityJob(file, branch, true));
+ } catch (Exception ex) {
+ OSEELog.logException(getClass(), "Traceability Import Error", ex, true);
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+ * org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.selection = selection;
+ }
+
+ /**
+ * (non-Javadoc) Method declared on Wizard.
+ */
+ public void addPages() {
+ mainPage = new ImportTraceabilityPage(selection);
+ addPage(mainPage);
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java
new file mode 100644
index 00000000000..6e0c760adca
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.traceability;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class RequirementData {
+ private static final TraceabilityExtractor traceExtractor = TraceabilityExtractor.getInstance();
+
+ private Branch requirementsBranch;
+ private List<Artifact> directSwRequirements;
+ private List<Artifact> inDirectSwRequirements;
+ private Set<Artifact> allSwRequirements;
+
+ private final HashMap<String, Artifact> directMap;
+ private final HashMap<String, Artifact> indirectMap;
+
+ public RequirementData(Branch requirementsBranch) {
+ this.requirementsBranch = requirementsBranch;
+
+ this.directMap = new HashMap<String, Artifact>();
+ this.indirectMap = new HashMap<String, Artifact>();
+ this.directSwRequirements = new ArrayList<Artifact>();
+ this.inDirectSwRequirements = new ArrayList<Artifact>();
+ this.allSwRequirements = new TreeSet<Artifact>();
+ }
+
+ private void reset() {
+ this.directMap.clear();
+ this.indirectMap.clear();
+ this.directSwRequirements.clear();
+ this.inDirectSwRequirements.clear();
+ this.allSwRequirements.clear();
+ }
+
+ public IStatus initialize(IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+ try {
+ reset();
+ monitor.subTask(String.format("Loading Software Requirements from: [%s]", getBranch().getBranchShortName()));
+
+ directSwRequirements.addAll(ArtifactQuery.getArtifactsFromType(Requirements.SOFTWARE_REQUIREMENT, getBranch()));
+ populateTraceMap(monitor, directSwRequirements, directMap);
+ monitor.worked(30);
+
+ if (monitor.isCanceled() != true) {
+ monitor.subTask(String.format("Load Indirect Software Requirements from: [%s]",
+ getBranch().getBranchShortName()));
+ inDirectSwRequirements.addAll(ArtifactQuery.getArtifactsFromType(
+ Requirements.INDIRECT_SOFTWARE_REQUIREMENT, getBranch()));
+ populateTraceMap(monitor, inDirectSwRequirements, indirectMap);
+ monitor.worked(7);
+
+ if (monitor.isCanceled() != true) {
+ allSwRequirements.addAll(directSwRequirements);
+ allSwRequirements.addAll(inDirectSwRequirements);
+ monitor.worked(1);
+ }
+ }
+ if (monitor.isCanceled() != true) {
+ toReturn = Status.OK_STATUS;
+ }
+ } catch (Exception ex) {
+ toReturn = new Status(IStatus.ERROR, DefinePlugin.PLUGIN_ID, "Loading requirement data.", ex);
+ }
+ return toReturn;
+ }
+
+ private void populateTraceMap(IProgressMonitor monitor, List<Artifact> artList, HashMap<String, Artifact> toPopulate) {
+ for (Artifact artifact : artList) {
+ toPopulate.put(traceExtractor.getCanonicalRequirementName(artifact.getDescriptiveName()), artifact);
+ }
+ }
+
+ /**
+ * Get requirements source branch
+ *
+ * @return source branch
+ */
+ public Branch getBranch() {
+ return requirementsBranch;
+ }
+
+ /**
+ * @return the directSwRequirements
+ */
+ public Collection<Artifact> getDirectSwRequirements() {
+ return directSwRequirements;
+ }
+
+ /**
+ * @return the inDirectSwRequirements
+ */
+ public Collection<Artifact> getInDirectSwRequirements() {
+ return inDirectSwRequirements;
+ }
+
+ /**
+ * @return the allSwRequirements
+ */
+ public Set<Artifact> getAllSwRequirements() {
+ return allSwRequirements;
+ }
+
+ /**
+ * Get Requirement Artifact based on traceMark mark
+ *
+ * @param traceMark
+ * @return requirement artifact
+ */
+ public Artifact getRequirementFromTraceMark(String traceMark) {
+ String canonicalTraceMark = TraceabilityExtractor.getInstance().getCanonicalRequirementName(traceMark);
+ Artifact reqArtifact = directMap.get(canonicalTraceMark);
+ if (reqArtifact == null) {
+ reqArtifact = indirectMap.get(canonicalTraceMark);
+ }
+ return reqArtifact;
+ }
+
+ /**
+ * Get Requirement Artifact based on traceMark mark if it fails, check if trace mark is a structured requirement and
+ * try again
+ *
+ * @param traceMark
+ * @return requirement artifact
+ */
+ public Artifact getRequirementFromTraceMarkIncludeStructuredRequirements(String traceMark) {
+ Artifact toReturn = getRequirementFromTraceMark(traceMark);
+ if (toReturn == null) {
+ Pair<String, String> structured = TraceabilityExtractor.getInstance().getStructuredRequirement(traceMark);
+ if (structured != null) {
+ toReturn = getRequirementFromTraceMark(structured.getKey());
+ }
+ }
+ return toReturn;
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java
new file mode 100644
index 00000000000..8657786bf7b
--- /dev/null
+++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.traceability;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.CharBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class TraceabilityExtractor {
+ private static final Pattern ofpTraceabilityPattern = Pattern.compile("\\^SRS\\s*([^;\n\r]+);");
+ private static final Pattern scriptTraceabilityPattern =
+ Pattern.compile("addTraceability\\s*\\(\\\"(?:SubDD|SRS|CSID)?\\s*([^\\\"]+)\\\"");
+ private static final Pattern invalidTraceabilityPattern = Pattern.compile("(\\[[A-Za-z]|USES_).*");
+
+ private static final Pattern embeddedVolumePattern = Pattern.compile("\\{\\d+ (.*)\\}[ .]*");
+ private static final Pattern nonWordPattern = Pattern.compile("[^A-Z_0-9]");
+ private static final Pattern structuredReqNamePattern = Pattern.compile("\\[?(\\{[^\\}]+\\})(.*)");
+
+ private static TraceabilityExtractor instance = null;
+ private final Matcher scriptReqTraceMatcher;
+ private final Matcher ofpReqTraceMatcher;
+ private final Matcher invalidTraceMatcher;
+ private final Matcher embeddedVolumeMatcher;
+ private final Matcher nonWordMatcher;
+ private final Matcher structuredRequirementMatcher;
+
+ private TraceabilityExtractor() {
+ this.ofpReqTraceMatcher = ofpTraceabilityPattern.matcher("");
+ this.scriptReqTraceMatcher = scriptTraceabilityPattern.matcher("");
+ this.invalidTraceMatcher = invalidTraceabilityPattern.matcher("");
+ this.embeddedVolumeMatcher = embeddedVolumePattern.matcher("");
+ this.nonWordMatcher = nonWordPattern.matcher("");
+ this.structuredRequirementMatcher = structuredReqNamePattern.matcher("");
+ }
+
+ public static TraceabilityExtractor getInstance() {
+ if (instance == null) {
+ instance = new TraceabilityExtractor();
+ }
+ return instance;
+ }
+
+ public List<String> getTraceMarksFromFile(File sourceFile) throws IOException {
+ CharBuffer buffer = Lib.fileToCharBuffer(sourceFile);
+ Matcher matcher = isScriptFile(sourceFile) ? getScriptTraceMarkMatcher() : getCodeTraceMarkMatcher();
+ return getTraceMarks(buffer, matcher);
+ }
+
+ public List<String> getTraceMarks(CharBuffer buffer, Matcher matcher) {
+ List<String> toReturn = new ArrayList<String>();
+ matcher.reset(buffer);
+ while (matcher.find() != false) {
+ String mark = matcher.group(1);
+ if (Strings.isValid(mark) != false) {
+ toReturn.add(mark);
+ }
+ }
+ return toReturn;
+ }
+
+ public boolean isValidTraceMark(String toCheck) {
+ invalidTraceMatcher.reset(toCheck);
+ return invalidTraceMatcher.matches() != true;
+ }
+
+ public Matcher getScriptTraceMarkMatcher() {
+ return scriptReqTraceMatcher;
+ }
+
+ public Matcher getCodeTraceMarkMatcher() {
+ return ofpReqTraceMatcher;
+ }
+
+ public boolean isScriptFile(File sourceFile) {
+ return sourceFile.getName().endsWith("java");
+ }
+
+ public String getCanonicalRequirementName(String requirementMark) {
+ String canonicalReqReference = requirementMark;
+ if (Strings.isValid(requirementMark) != false) {
+ canonicalReqReference = requirementMark.toUpperCase();
+
+ embeddedVolumeMatcher.reset(canonicalReqReference);
+ if (embeddedVolumeMatcher.find()) {
+ canonicalReqReference = embeddedVolumeMatcher.group(1);
+ }
+
+ nonWordMatcher.reset(canonicalReqReference);
+ canonicalReqReference = nonWordMatcher.replaceAll("");
+ }
+ return canonicalReqReference;
+ }
+
+ // [{SUBSCRIBER}.ID] and example procedure {CURSOR_ACKNOWLEDGE}.NORMAL
+ public Pair<String, String> getStructuredRequirement(String requirementMark) {
+ Pair<String, String> toReturn = null;
+ structuredRequirementMatcher.reset(requirementMark);
+ if (structuredRequirementMatcher.matches() != false) {
+ String primary = structuredRequirementMatcher.group(1);
+ String secondary = structuredRequirementMatcher.group(2);
+ if (Strings.isValid(primary) != false) {
+ toReturn = new Pair<String, String>(primary, secondary);
+ }
+ }
+ return toReturn;
+ }
+}

Back to the top