172 Commits

Autor SHA1 Mensagem Data
Eduardo Ramos f8c032d38b Bump maven plugins versions
Use Netbeans platform 8 and hide new unnecessary menus
2014-08-03 02:16:13 +02:00
Eduardo Ramos d873229ed8 Merge pull request #920 from count0/master
Make the GML exporter's Creator tag syntax conformant
2014-08-03 00:53:44 +02:00
Eduardo Ramos 17798a0f81 Merge pull request #923 from chirayuk/patch-1
Fix "Plugin Quick Start" link in README.md
2014-08-03 00:51:26 +02:00
Chirayu Krishnappa 586e72d4fb Fix "Plugin Quick Start" link in README.md
Fix the markdown for the "Plugin Quick Start (5 minutes)" link.
2014-05-30 19:27:54 -07:00
Tiago de Paula Peixoto ec2916565f Make the GML exporter's Creator tag syntax conformant 2014-05-22 12:13:58 +02:00
Eduardo Ramos b5c0de406d Fix graphstore call for new table observer 2014-05-19 22:55:50 +02:00
Mathieu Bastian 5777cab4a8 Enable auto-apply in DesktopAppearance 2014-03-30 19:14:17 -07:00
Mathieu Bastian 8d05d3958e Refactor calls to createObserver 2014-03-30 16:15:11 -07:00
Mathieu Bastian 38e540d8b3 Update GraphStore dependency 2014-03-30 15:44:25 -07:00
Mathieu Bastian 2ce8a3378c Update graphstore dependency 2014-03-02 17:54:17 -08:00
Mathieu Bastian 23b47bfe12 Fix dmg creation path on Linux 2014-01-18 17:55:51 -08:00
Mathieu Bastian 4b93a004f6 Fix LayoutPlugin compile issue 2014-01-18 17:38:01 -08:00
Mathieu Bastian 5b36a9f4b6 Add Application symlink in DMG 2014-01-18 17:35:32 -08:00
Eduardo Ramos b92f7dd857 Merge branch 'master' of github.com:gephi/gephi 2014-01-13 21:15:20 +01:00
Eduardo Ramos 52819685e9 Fix compilation dependency problem 2014-01-13 21:15:04 +01:00
Mathieu Bastian c2ee37971f Format Info.plist 2013-12-30 17:07:59 +01:00
Mathieu Bastian 96951871fd Add column observer in Appearance UI 2013-12-30 17:07:50 +01:00
Mathieu Bastian 1b99cc7fe2 Implement equals and hashCode on ranking and partition functions 2013-12-30 17:07:30 +01:00
Mathieu Bastian d873611a2b Set isRanking and isPartition as private methods 2013-12-30 17:06:59 +01:00
Mathieu Bastian 7a2dcf9bbb Update to JOGL 2.1.3 2013-12-25 18:03:42 +01:00
Mathieu Bastian 046c8efcfb Add TestNG to gephi-parent 2013-12-23 17:25:09 +01:00
Mathieu Bastian 325f60dcab Merge and update to new API 2013-12-23 17:23:44 +01:00
Mathieu Bastian 5d7ce7249d Update ImportAPI to use TimeFormat from GraphAPI 2013-12-22 22:09:09 +01:00
Mathieu Bastian 535b3ebf99 Add Statistics modules and update implementations to use the new API 2013-12-22 22:08:42 +01:00
Eduardo Ramos a56db00d36 Update nbm maven plugin to 3.11.1
Hide IDE Tools and Web browser from Window Menu
2013-10-26 00:51:42 +02:00
Eduardo Ramos 440b0bdf7e Remove old JOGL native binaries 2013-10-26 00:14:35 +02:00
Eduardo Ramos f27bbaf7c7 Update fastutil dependency to 6.5.9 2013-10-26 00:14:03 +02:00
Eduardo Ramos d7f321a4bb Revert platform localization zip to 7.2 2013-10-25 23:14:21 +02:00
Eduardo Ramos 7409c4fdf6 Updated JOGL dependencies to latest 2.1.1 release, which seems to finally fix the loading native libraries from JAR files problems.
Updated Netbeans maven platform version to 7.4
2013-10-23 23:07:55 +02:00
Mathieu Bastian ca72bf6e58 Minor refactoring 2013-08-25 22:50:52 -07:00
Mathieu Bastian 16547aeb93 Add partition palette management and UI 2013-08-25 22:50:20 -07:00
Mathieu Bastian 761701b37e Try again using dependency patch 2013-08-19 07:57:43 -07:00
Mathieu Bastian 84d050fc48 Revert last commit 2013-08-18 18:07:10 -07:00
Mathieu Bastian d4bd6896b6 Workaround for MNBMODULE-215 2013-08-18 18:04:55 -07:00
Mathieu Bastian 076e9dde7f A few more version upgrade 2013-08-18 17:59:47 -07:00
Mathieu Bastian 3af6a89dcd Update a few Maven plugin versions 2013-08-18 17:52:13 -07:00
Mathieu Bastian 30a10531f6 Debug Appearerance and implement apply button 2013-08-18 16:58:56 -07:00
Mathieu Bastian 70d8a4b766 Ranking and interpolation work in progress 2013-08-18 16:31:04 -07:00
Mathieu Bastian 93e8d2f1cc Work on appearance ranking, add Ranking object 2013-08-18 16:30:10 -07:00
Mathieu Bastian d99e990ef2 Debug AppearanceUI events 2013-08-18 16:29:20 -07:00
Mathieu Bastian 0f392cfb57 Add appearance control toolbar 2013-08-18 16:28:46 -07:00
Mathieu Bastian 9a99053130 Allow setting control points on spline editor 2013-08-18 16:27:32 -07:00
Mathieu Bastian 4608208d8e Debugging in ImportAPI and ImportPlugin 2013-08-18 15:00:27 -07:00
Mathieu Bastian 4df863a221 Add funnel image in DesktopAppearance 2013-08-18 14:59:55 -07:00
Mathieu Bastian db61bb4ac0 Remove target folder in AppearancePluginUI 2013-08-18 14:59:37 -07:00
Mathieu Bastian 23cb8c875f Move SplineEditor to UIComponents 2013-08-18 14:56:45 -07:00
Mathieu Bastian 2b9df0f666 Debug edge functions 2013-07-29 08:03:56 -07:00
Mathieu Bastian 9ead548b8e Debug Appearance UI 2013-07-28 22:50:40 -07:00
Mathieu Bastian a516fac1c3 Fix attribute value import in GEXF 2013-07-28 19:29:25 -07:00
Mathieu Bastian 3ecaa139a6 Implement appearance center panel system for partition 2013-07-28 19:24:35 -07:00
Mathieu Bastian 8743d446d2 Implement category and transformer toolbar system 2013-07-23 08:05:46 -07:00
Mathieu Bastian 0299ef4031 Fix text refresh performance issue 2013-07-21 14:32:18 -07:00
Mathieu Bastian 77ec95b76d Update JOGL version 2013-07-21 14:32:08 -07:00
Mathieu Bastian 2d49376813 Remove Partition modules and replace them with work in progress on appearance modules 2013-07-21 14:31:22 -07:00
Mathieu Bastian 9b4ffe4ad3 Fix databridge edge array grow issue 2013-06-10 23:39:13 -07:00
Mathieu Bastian 1841a0dde6 Fix arrow display issue 2013-06-10 23:38:59 -07:00
Mathieu Bastian f79e56880d Using Newt canvas as default 2013-06-10 23:38:47 -07:00
Mathieu Bastian e343581ea4 Using latest JOGL dev version due to window positioning issue 2013-06-10 23:38:10 -07:00
Mathieu Bastian 36327abc0b Debug perspective controller 2013-06-08 15:31:32 -07:00
Mathieu Bastian 133d787f12 Visualization animator 2013-06-08 15:31:17 -07:00
Mathieu Bastian d419d857b4 Experiment NEWT renderer 2013-06-08 15:31:03 -07:00
Mathieu Bastian b247f7e310 Fix ZipFile compile issue with Java 1.6 2013-05-30 23:14:44 -07:00
Mathieu Bastian ef1695fe59 Fix node border issue 2013-05-30 18:40:01 -07:00
Mathieu Bastian 8a168364ff Add snapshots repo for GraphAPI to pull graph-store 2013-05-30 18:39:43 -07:00
Mathieu Bastian 8b3e6c75fd Disable snapshots for netbeans and thirdparty repositories 2013-05-30 18:38:39 -07:00
Mathieu Bastian f2d01585c7 Minor debug 2013-05-27 23:15:45 -07:00
Mathieu Bastian 795eb453ce Add Preview export modules back 2013-05-27 18:25:21 -07:00
Mathieu Bastian 1bc40b4dfc Rename Processing to G2D 2013-05-27 17:14:33 -07:00
Mathieu Bastian e4fb5b4fcf Remove ProcessingApplet 2013-05-27 17:02:57 -07:00
Mathieu Bastian 851507afeb Setup preview zoom buttons 2013-05-27 17:01:59 -07:00
Mathieu Bastian 6e1f812846 Preview sketch mouse events 2013-05-27 16:48:39 -07:00
Mathieu Bastian 4afd75b332 Add @Override annotation in DesktopPreview 2013-05-27 13:14:15 -07:00
Mathieu Bastian 9bef9d46d7 Enable ProcessingGraphics resize and repaint 2013-05-27 13:10:35 -07:00
Mathieu Bastian b4ade84641 Update to NB Platform 7.3 2013-05-27 11:16:24 -07:00
Mathieu Bastian 54b6662663 Add Export and Preview dependence in gephi-app 2013-05-27 11:15:54 -07:00
Mathieu Bastian c7f95f1bf9 Add Preview modules and removed Processing dependency 2013-05-27 11:15:33 -07:00
Mathieu Bastian 2b2721f795 Update ExportPlugin code to the new GraphAPI 2013-05-25 19:21:46 -07:00
Mathieu Bastian 509d6baf8f ReportPanel UI fixes 2013-05-25 19:21:16 -07:00
Mathieu Bastian 84e721aa6b Add @Override annotations in ExportAPI 2013-05-25 19:20:56 -07:00
Mathieu Bastian dd1ed43235 Remove hierarchy export checkboxes in ExportPluginUI 2013-05-25 19:20:28 -07:00
Mathieu Bastian 56b65b1d9f Debug in ImportContainerImpl 2013-05-25 19:18:55 -07:00
Mathieu Bastian 3955dfbf42 Add text column getters in VisualizationAPI 2013-05-25 19:18:04 -07:00
Mathieu Bastian c9e397ba43 Merge branch 'master' of github.com:gephi/gephi 2013-05-18 20:03:42 -07:00
Mathieu Bastian 27e9ae02ac Rename transformer builder 2013-05-18 20:03:21 -07:00
Mathieu Bastian 5c89726fc3 Debug ReportPanel graph type selection 2013-05-18 20:03:01 -07:00
Mathieu Bastian f217730682 Update Ranking modules to the new API and add to project 2013-05-18 20:02:31 -07:00
Mathieu Bastian 83452510e1 Merge pull request #773 from ZiyaoWei/master
Bug fix for Issue #320.
2013-05-18 19:11:47 -07:00
Mathieu Bastian 4ffa88d58c Append timestamp and dynamic attributes in processor 2013-05-18 12:59:04 -07:00
Mathieu Bastian 10aeb80029 Fix TGF importer with new API 2013-05-18 12:58:44 -07:00
Mathieu Bastian d1f6cd6b40 Add dynamic value getters in ElementDraft 2013-05-18 12:58:26 -07:00
Mathieu Bastian 297fe912af Add edgeExists in container loader 2013-05-18 12:58:02 -07:00
Mathieu Bastian af722fae5e Add dynamic attribute label in report panel 2013-05-18 12:57:25 -07:00
Mathieu Bastian 5086cce845 Merge branch 'master' of github.com:gephi/gephi 2013-05-18 12:35:30 -07:00
Sébastien Heymann c071086d9b Merge pull request #742 from rlfnb/master
added trivial graph format to the list of importers
2013-05-16 13:56:48 -07:00
Sébastien Heymann 68e7822ea5 Merge pull request #703 from andygarcia/master
Fix issue #699: Reset size defaults to 10.0, not 1.0
2013-05-16 13:55:45 -07:00
Sébastien Heymann 69ccc43101 Merge pull request #774 from annaalkh/master
Fix issue #680
2013-05-16 13:53:18 -07:00
Mathieu Bastian acbe4bcaf9 Set dynamic attribute values in ElementDraft 2013-05-15 07:57:45 -07:00
Mathieu Bastian 017f801f88 Add dynamic attribute support in ImportAPI 2013-05-14 23:45:56 -07:00
Mathieu Bastian f4888f5d46 Minor fix on ReportPanel 2013-05-14 23:45:23 -07:00
Mathieu Bastian 9852ec5bda Report panel UI fixes 2013-05-13 18:33:33 -07:00
Mathieu Bastian acb1ceba7f Remove self-loop in close container 2013-05-13 18:33:19 -07:00
Mathieu Bastian f61e469c9a Update Netbeans Maven repository URL to avoid cookie rejected issues 2013-05-13 18:31:11 -07:00
Mathieu Bastian 683c30ce39 Add more options in the import report panel 2013-05-12 22:35:22 -07:00
Mathieu Bastian b66ff8cae2 Fix typo update 2013-05-12 22:35:02 -07:00
Mathieu Bastian 9bb97e2454 Fix typo 2013-05-12 22:34:05 -07:00
Mathieu Bastian d9c9522e1e Merge branch 'master' of github.com:gephi/gephi 2013-05-12 12:06:20 -07:00
Mathieu Bastian db459ff9f9 Add bytes graph persistence provider using GraphStore's serialization 2013-05-12 10:48:44 -07:00
Mathieu Bastian 2aa35be755 Add support for bytes workspace persistence provider data 2013-05-12 10:48:19 -07:00
Mathieu Bastian 5b00186710 Separate project zip file into multiple entries, one for the project and one for each workspace. Improve error handling. 2013-05-11 20:51:53 -07:00
Mathieu Bastian 0ad61139c5 Minor reformatting 2013-05-11 17:05:04 -07:00
Mathieu Bastian 39a99e5856 Cleanup and minor fixes on Project API. Add localization for project and workspace prefixes, as well as auto increment counters. 2013-05-11 17:04:37 -07:00
Mathieu Bastian cbdce1c18f Add custom XMLChar class to avoid XML Sun dependency 2013-05-11 17:02:54 -07:00
Mathieu Bastian f28957b9b8 Update LayoutPlugin with new node methods 2013-05-11 14:11:32 -07:00
Mathieu Bastian 68d0488623 Minor tweak 2013-04-29 18:04:03 -07:00
Mathieu Bastian 9b5f8f0b58 Use float buffers for drawable matrices. Reduce memory consumption in myGluProject. 2013-04-29 18:03:20 -07:00
Mathieu Bastian c6af330b52 Fix non EDT execution issue in DesktopImport 2013-04-29 17:36:43 -07:00
annaalkh 07d67961b8 Fix issue #750 2013-04-24 23:26:05 +04:00
Mathieu Bastian ae6074f3af Data bridge clearing 2013-04-23 08:47:55 -07:00
Mathieu Bastian 5afef61125 Display node labels 2013-04-23 08:25:31 -07:00
Mathieu Bastian b5948fc750 Minor debugging 2013-04-23 08:25:10 -07:00
Mathieu Bastian e6f79529a9 Visualization implementation debug 2013-04-22 10:43:52 -07:00
Mathieu Bastian c9e0742720 Fix LayoutPlugin getStoreId 2013-04-22 10:43:20 -07:00
Mathieu Bastian b3d11ae86b Visualization debug 2013-04-20 23:48:46 -07:00
Mathieu Bastian 21bea2bea7 Fix node and edge color issues 2013-04-20 22:29:28 -07:00
Mathieu Bastian 46ee327fc6 Node radius fix 2013-04-20 16:09:06 -07:00
Mathieu Bastian 5eda676d97 Fix edge display 2013-04-20 16:08:29 -07:00
Mathieu Bastian 143635f90b Integrate arrows in edges models 2013-04-20 16:07:50 -07:00
Mathieu Bastian cc37a02844 Octree and node reposition debug 2013-04-18 08:30:28 -07:00
ZiyaoWei c30f743f85 Issue #320 Fix broken DOT parser: The original parser will ignore single node, which would make the parser confused when parsing the rest of the file. 2013-04-17 23:29:24 -04:00
Mathieu Bastian 8fb939bfed Minor fixes 2013-04-17 00:08:44 -07:00
Mathieu Bastian 14d32a80c2 Debugging in VisualizationImpl 2013-04-16 23:55:14 -07:00
Mathieu Bastian 8e350df215 Fix issue in default processor with mixed graphs 2013-04-16 23:54:58 -07:00
Mathieu Bastian 3d12ba9b88 Update some Tools to the new GraphAPI 2013-04-16 23:54:46 -07:00
Mathieu Bastian 3fa18e67d4 More @Override annotation 2013-04-16 23:54:26 -07:00
Mathieu Bastian bc05917012 Add @Override annotation across the board 2013-04-16 23:53:32 -07:00
Mathieu Bastian d2af0fbca1 Update the AlgorithmsPlugin to the new Graph API 2013-04-16 23:51:10 -07:00
Mathieu Bastian 431fc592f2 Include ToolsAPI in POM 2013-04-16 00:08:52 -07:00
Mathieu Bastian 9f5857a96f Migrate Visualization to JOGL2. 2013-04-16 00:08:39 -07:00
Mathieu Bastian 0f0da1be77 Minor debug with graph visible 2013-04-15 17:51:57 -07:00
Mathieu Bastian 1b4080c7af Temporarily disable some modules on POM 2013-04-15 17:39:01 -07:00
Mathieu Bastian e59b7ccf01 Refactor and simplify the Visualization module. Update to the new Graph API. 2013-04-15 17:37:58 -07:00
Mathieu Bastian 7b36dbfe02 Comment some DynamicAPI code and update UIUtils to new attributes API 2013-04-15 17:37:17 -07:00
Mathieu Bastian baec9199a9 Minor debugging 2013-04-15 17:36:33 -07:00
Mathieu Bastian 1c2f686d48 Add TimeFormat in ImportAPi 2013-04-15 17:36:07 -07:00
Mathieu Bastian 24098f8bdc Add Context refresh thread in DesktopContext 2013-04-15 17:35:40 -07:00
Mathieu Bastian 5398cd1dda Fix bug when launching without Timelime component 2013-04-15 08:40:39 -07:00
Mathieu Bastian 7a3e579f7a Comment out dynamic graph generation. 2013-04-15 08:40:07 -07:00
Mathieu Bastian be4c42e229 Add GraphController @ServiceProvider annotation 2013-04-15 08:39:45 -07:00
Mathieu Bastian 0e3facf787 Comment out text dimensions in LabelAdjust 2013-04-15 08:39:14 -07:00
Mathieu Bastian 865db80e51 Comment out the Dynamic support in Processor. 2013-04-15 08:37:25 -07:00
Mathieu Bastian 396a5f8666 Use the new TimeFormat from ImportAPI and replace usage of AttributeUtils by the new setValueString method to parse values. 2013-04-15 08:36:28 -07:00
Mathieu Bastian c34d0ea9c3 Add setValueString to parse attribute values automatically in ImportAPI. 2013-04-15 08:35:02 -07:00
Mathieu Bastian 9057c563e2 Remove old Attributes API from DataLaboratoryAPI 2013-04-15 08:34:14 -07:00
Mathieu Bastian 0c962cf783 Update DesktopImport to the new Graph API. Remove hierarchical graph support and enable crash reports on imports. 2013-04-15 08:33:34 -07:00
Mathieu Bastian 4104a2e7b8 Update DesktopContext to the new Graph API. Remove pie chart. 2013-04-15 08:32:12 -07:00
annaalkh f031ff6b63 Merge branch 'master' of git://github.com/gephi/gephi 2013-04-12 21:48:32 +04:00
Mathieu Bastian b9d67a895d Update ProcessorPlugin to the latest API 2013-04-09 23:03:52 -07:00
Mathieu Bastian 223da54ac5 Minor changes on ImportAPI 2013-04-09 23:03:35 -07:00
Mathieu Bastian 1fb3fd0726 Remove dynamic processor in ProcessorPlugin 2013-04-09 23:03:12 -07:00
Mathieu Bastian 310efb3522 POM dependencies fies 2013-04-09 23:02:47 -07:00
Mathieu Bastian 3a48a5c87e Update and refactor ImportAPI for new GraphAPI. Update file importers. 2013-04-06 18:12:00 -07:00
Mathieu Bastian 3ebffd4807 Update LayoutAPI and LayoutPlugin to new GraphAPI 2013-04-06 18:10:45 -07:00
Mathieu Bastian 5e7eb963aa Remove YifanHUMultilevel layout algorithm 2013-04-06 18:09:54 -07:00
Mathieu Bastian 5b70b184b1 Remove GraphAPI and DHNSGraph and add GraphStore dependency 2013-04-06 18:08:54 -07:00
Sébastien Heymann 240f4a5ccf fix bug #767 2013-04-02 21:41:29 +03:00
Mathieu Bastian 70c4f5fee2 Merge pull request #764 from bfontaine/master
Two links fixed in the README
2013-03-23 12:16:21 -07:00
Baptiste Fontaine e4ac375e15 Fixed Plugins Quick Start link. 2013-03-15 00:43:39 +01:00
Baptiste Fontaine ab62a6bede Correct Javadoc link. 2013-03-15 00:38:25 +01:00
Eduardo Ramos 1ab13abd05 Fix project files saving and loading when in toolkit. 2013-03-13 22:20:03 +01:00
annaalkh 09decb6804 Fix issue #680 2013-03-08 00:47:57 +04:00
Ralf Neeb 0fa6e99a3f added trivial graph format support 2013-01-29 21:44:08 +01:00
Andy Garcia a37ff1aed0 Fix issues #699: Reset size tool and its dialog now default to 10.0 for node size, not 1.0. 2012-12-13 13:36:06 -05:00
1002 arquivos alterados com 42588 adições e 55392 exclusões
+5 -1
Ver Arquivo
@@ -94,4 +94,8 @@ keystore.ks
/modules/JFreeChartWrapper/target/
/modules/CommonsWrapper/target/
/modules/CoreLibraryWrapper/target/
/modules/UILibraryWrapper/target/
/modules/UILibraryWrapper/target/
/modules/AppearanceAPI/target/
/modules/AppearancePlugin/target/
/modules/AppearancePluginUI/target/
/modules/DesktopAppearance/target/
+1 -1
Ver Arquivo
@@ -42,7 +42,7 @@ Current version is 0.9-SNAPSHOT
Gephi is developed in Java and uses OpenGL for its visualization engine. Built on the top of Netbeans Platform, it follows a loosely-coupled, modular architecture philosophy. That allows it to be used build large applications and to grow in a sustainable way. Gephi is split into modules, which depend on other modules through well-written APIs. Plugins can reuse existing APIs, create new services and even replace a default implementation with a new one.
Consult the [**Javadoc**](http://gephi.org/docs) for an overview of the APIs.
Consult the [**Javadoc**](http://gephi.org/docs/api) for an overview of the APIs.
### Requirements
-8
Ver Arquivo
@@ -14,14 +14,6 @@
<packaging>nbm</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>dynamic-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>data-attributes-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>graph-api</artifactId>
@@ -45,7 +45,6 @@ import java.awt.Color;
import java.util.HashMap;
import org.gephi.graph.api.Edge;
import org.gephi.graph.api.Node;
import org.gephi.graph.api.NodeData;
/**
*
@@ -53,27 +52,27 @@ import org.gephi.graph.api.NodeData;
*/
public abstract class AbstractShortestPathAlgorithm {
protected final HashMap<NodeData, Color> colors;
protected final HashMap<NodeData, Double> distances;
protected final HashMap<Node, Color> colors;
protected final HashMap<Node, Double> distances;
protected final Node sourceNode;
protected double maxDistance = 0;
public AbstractShortestPathAlgorithm(Node sourceNode) {
this.sourceNode = sourceNode;
colors = new HashMap<NodeData, Color>();
distances = new HashMap<NodeData, Double>();
colors = new HashMap<Node, Color>();
distances = new HashMap<Node, Double>();
}
protected boolean relax(Edge edge) {
Node source = edge.getSource();
Node target = edge.getTarget();
double distSource = distances.get(source.getNodeData());
double distTarget = distances.get(target.getNodeData());
double distSource = distances.get(source);
double distTarget = distances.get(target);
double weight = edgeWeight(edge);
double sourceWeight = distSource + weight;
if (sourceWeight < distTarget) {
distances.put(target.getNodeData(), sourceWeight);
distances.put(target, sourceWeight);
maxDistance = Math.max(maxDistance, sourceWeight);
return true;
} else {
@@ -91,7 +90,7 @@ public abstract class AbstractShortestPathAlgorithm {
public abstract Edge getPredecessorIncoming(Node node);
public HashMap<NodeData, Double> getDistances() {
public HashMap<Node, Double> getDistances() {
return distances;
}
@@ -1,55 +1,50 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.algorithms.shortestpath;
import java.util.HashMap;
import org.gephi.data.attributes.type.TimeInterval;
import org.gephi.dynamic.DynamicUtilities;
import org.gephi.dynamic.api.DynamicController;
import org.gephi.graph.api.DirectedGraph;
import org.gephi.graph.api.Edge;
import org.gephi.graph.api.Node;
import org.gephi.graph.api.NodeData;
import org.openide.util.Lookup;
/**
*
@@ -58,19 +53,15 @@ import org.openide.util.Lookup;
public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgorithm {
protected final DirectedGraph graph;
protected final HashMap<NodeData, Edge> predecessors;
protected TimeInterval timeInterval;
protected final HashMap<Node, Edge> predecessors;
public BellmanFordShortestPathAlgorithm(DirectedGraph graph, Node sourceNode) {
super(sourceNode);
this.graph = graph;
predecessors = new HashMap<NodeData, Edge>();
DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class);
if (dynamicController != null) {
timeInterval = DynamicUtilities.getVisibleInterval(dynamicController.getModel(graph.getGraphModel().getWorkspace()));
}
predecessors = new HashMap<Node, Edge>();
}
@Override
public void compute() {
graph.readLock();
@@ -78,10 +69,10 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
//Initialize
int nodeCount = 0;
for (Node node : graph.getNodes()) {
distances.put(node.getNodeData(), Double.POSITIVE_INFINITY);
distances.put(node, Double.POSITIVE_INFINITY);
nodeCount++;
}
distances.put(sourceNode.getNodeData(), 0d);
distances.put(sourceNode, 0d);
//Relax edges repeatedly
@@ -92,7 +83,7 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
Node target = edge.getTarget();
if (relax(edge)) {
relaxed = true;
predecessors.put(target.getNodeData(), edge);
predecessors.put(target, edge);
}
}
if (!relaxed) {
@@ -103,7 +94,7 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
//Check for negative-weight cycles
for (Edge edge : graph.getEdges()) {
if (distances.get(edge.getSource().getNodeData()) + edgeWeight(edge) < distances.get(edge.getTarget().getNodeData())) {
if (distances.get(edge.getSource()) + edgeWeight(edge) < distances.get(edge.getTarget())) {
graph.readUnlock();
throw new RuntimeException("The Graph contains a negative-weighted cycle");
}
@@ -114,16 +105,14 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
@Override
protected double edgeWeight(Edge edge) {
if (timeInterval != null) {
return edge.getWeight(timeInterval.getLow(), timeInterval.getHigh());
}
return edge.getWeight();
}
@Override
public Node getPredecessor(Node node) {
Edge edge = predecessors.get(node.getNodeData());
Edge edge = predecessors.get(node);
if (edge != null) {
if (edge.getSource().getNodeData() != node.getNodeData()) {
if (edge.getSource() != node) {
return edge.getSource();
} else {
return edge.getTarget();
@@ -132,7 +121,8 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
return null;
}
@Override
public Edge getPredecessorIncoming(Node node) {
return predecessors.get(node.getNodeData());
return predecessors.get(node);
}
}
@@ -44,104 +44,93 @@ package org.gephi.algorithms.shortestpath;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import org.gephi.data.attributes.type.TimeInterval;
import org.gephi.dynamic.DynamicUtilities;
import org.gephi.dynamic.api.DynamicController;
import org.gephi.graph.api.Edge;
import org.gephi.graph.api.Graph;
import org.gephi.graph.api.Node;
import org.gephi.graph.api.NodeData;
import org.openide.util.Lookup;
/**
*
* @author Mathieu Bastian
*/
public class DijkstraShortestPathAlgorithm extends AbstractShortestPathAlgorithm {
protected final Graph graph;
protected final HashMap<NodeData, Edge> predecessors;
protected TimeInterval timeInterval;
protected final HashMap<Node, Edge> predecessors;
public DijkstraShortestPathAlgorithm(Graph graph, Node sourceNode) {
super(sourceNode);
this.graph = graph;
predecessors = new HashMap<NodeData, Edge>();
DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class);
if (dynamicController != null) {
timeInterval = DynamicUtilities.getVisibleInterval(dynamicController.getModel(graph.getGraphModel().getWorkspace()));
}
predecessors = new HashMap<Node, Edge>();
}
@Override
public void compute() {
graph.readLock();
Set<Node> unsettledNodes = new HashSet<Node>();
Set<NodeData> settledNodes = new HashSet<NodeData>();
Set<Node> settledNodes = new HashSet<Node>();
//Initialize
for (Node node : graph.getNodes()) {
distances.put(node.getNodeData(), Double.POSITIVE_INFINITY);
distances.put(node, Double.POSITIVE_INFINITY);
}
distances.put(sourceNode.getNodeData(), 0d);
distances.put(sourceNode, 0d);
unsettledNodes.add(sourceNode);
while (!unsettledNodes.isEmpty()) {
// find node with smallest distance value
Double minDistance = Double.POSITIVE_INFINITY;
Node minDistanceNode = null;
for (Node k : unsettledNodes) {
Double dist = distances.get(k.getNodeData());
Double dist = distances.get(k);
if (minDistanceNode == null) {
minDistanceNode = k;
}
if (dist.compareTo(minDistance) < 0) {
minDistance = dist;
minDistanceNode = k;
}
}
unsettledNodes.remove(minDistanceNode);
settledNodes.add(minDistanceNode.getNodeData());
settledNodes.add(minDistanceNode);
for (Edge edge : graph.getEdges(minDistanceNode)) {
Node neighbor = graph.getOpposite(minDistanceNode, edge);
if (!settledNodes.contains(neighbor.getNodeData())) {
if (!settledNodes.contains(neighbor)) {
double dist = getShortestDistance(minDistanceNode) + edgeWeight(edge);
if (getShortestDistance(neighbor) > dist) {
distances.put(neighbor.getNodeData(), dist);
predecessors.put(neighbor.getNodeData(), edge);
distances.put(neighbor, dist);
predecessors.put(neighbor, edge);
unsettledNodes.add(neighbor);
maxDistance = Math.max(maxDistance, dist);
}
}
}
}
graph.readUnlock();
}
private double getShortestDistance(Node destination) {
Double d = distances.get(destination.getNodeData());
Double d = distances.get(destination);
if (d == null) {
return Double.POSITIVE_INFINITY;
} else {
return d;
}
}
@Override
protected double edgeWeight(Edge edge) {
if (timeInterval != null) {
return edge.getWeight(timeInterval.getLow(), timeInterval.getHigh());
}
return edge.getWeight();
}
@Override
public Node getPredecessor(Node node) {
Edge edge = predecessors.get(node.getNodeData());
Edge edge = predecessors.get(node);
if (edge != null) {
if (edge.getSource() != node) {
return edge.getSource();
@@ -151,8 +140,9 @@ public class DijkstraShortestPathAlgorithm extends AbstractShortestPathAlgorithm
}
return null;
}
@Override
public Edge getPredecessorIncoming(Node node) {
return predecessors.get(node.getNodeData());
return predecessors.get(node);
}
}
@@ -9,25 +9,21 @@
</parent>
<groupId>org.gephi</groupId>
<artifactId>graph-dhns</artifactId>
<artifactId>appearance-api</artifactId>
<version>0.9-SNAPSHOT</version>
<packaging>nbm</packaging>
<name>DHNSGraph</name>
<name>AppearanceAPI</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>utils-collection</artifactId>
<artifactId>dynamic-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>graph-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>data-attributes-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>project-api</artifactId>
@@ -51,9 +47,10 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>nbm-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<publicPackages>
<publicPackage>org.gephi.appearance.api</publicPackage>
<publicPackage>org.gephi.appearance.spi</publicPackage>
</publicPackages>
</configuration>
</plugin>
@@ -0,0 +1,156 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance;
import org.gephi.appearance.api.AppearanceController;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.spi.Transformer;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.graph.api.Element;
import org.gephi.graph.api.ElementIterable;
import org.gephi.graph.api.GraphModel;
import org.gephi.project.api.ProjectController;
import org.gephi.project.api.Workspace;
import org.gephi.project.api.WorkspaceListener;
import org.openide.util.Lookup;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = AppearanceController.class)
public class AppearanceControllerImpl implements AppearanceController {
private AppearanceModelImpl model;
public AppearanceControllerImpl() {
//Workspace events
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
pc.addWorkspaceListener(new WorkspaceListener() {
@Override
public void initialize(Workspace workspace) {
}
@Override
public void select(Workspace workspace) {
model = workspace.getLookup().lookup(AppearanceModelImpl.class);
if (model == null) {
model = new AppearanceModelImpl(workspace);
workspace.add(model);
}
// model.select();
}
@Override
public void unselect(Workspace workspace) {
// model.unselect();
model = null;
}
@Override
public void close(Workspace workspace) {
}
@Override
public void disable() {
model = null;
}
});
if (pc.getCurrentWorkspace() != null) {
model = pc.getCurrentWorkspace().getLookup().lookup(AppearanceModelImpl.class);
if (model == null) {
model = new AppearanceModelImpl(pc.getCurrentWorkspace());
pc.getCurrentWorkspace().add(model);
}
}
}
@Override
public void transform(Function function) {
if (model != null) {
GraphModel graphModel = model.getGraphModel();
ElementIterable<? extends Element> iterable;
if (function.getTransformer().isNode()) {
iterable = graphModel.getGraphVisible().getNodes();
} else {
iterable = graphModel.getGraphVisible().getEdges();
}
for (Element element : iterable) {
function.transform(element);
}
}
}
@Override
public AppearanceModelImpl getModel() {
return model;
}
@Override
public AppearanceModelImpl getModel(Workspace workspace) {
AppearanceModelImpl m = workspace.getLookup().lookup(AppearanceModelImpl.class);
if (m == null) {
m = new AppearanceModelImpl(workspace);
workspace.add(m);
}
return m;
}
@Override
public Transformer getTransformer(TransformerUI ui) {
Class<? extends Transformer> transformerClass = ui.getTransformerClass();
Transformer transformer = Lookup.getDefault().lookup(transformerClass);
if (transformer != null) {
return transformer;
}
return null;
}
@Override
public void setUseLocalScale(boolean useLocalScale) {
if (model != null) {
model.setLocalScale(useLocalScale);
}
}
}
@@ -0,0 +1,271 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.gephi.appearance.api.AppearanceModel;
import org.gephi.appearance.api.AttributeFunction;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.spi.PartitionTransformer;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.SimpleTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.attribute.api.AttributeModel;
import org.gephi.attribute.api.AttributeUtils;
import org.gephi.attribute.api.Column;
import org.gephi.attribute.api.Index;
import org.gephi.graph.api.GraphController;
import org.gephi.graph.api.GraphModel;
import org.gephi.project.api.Workspace;
import org.openide.util.Lookup;
/**
*
* @author mbastian
*/
public class AppearanceModelImpl implements AppearanceModel {
private final Workspace workspace;
private final AttributeModel attributeModel;
private final GraphModel graphModel;
private final Interpolator defaultInterpolator;
private boolean localScale = false;
//Functions
private final Object functionLock;
private List<Function> nodeFunctions;
private List<Function> edgeFunctions;
public AppearanceModelImpl(Workspace workspace) {
this.workspace = workspace;
this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace);
this.attributeModel = Lookup.getDefault().lookup(GraphController.class).getAttributeModel(workspace);
this.defaultInterpolator = Interpolator.LINEAR;
this.functionLock = new Object();
//Functions
refreshFunctions();
}
@Override
public Workspace getWorkspace() {
return workspace;
}
@Override
public boolean isLocalScale() {
return localScale;
}
@Override
public Function[] getNodeFunctions() {
refreshFunctions();
return nodeFunctions.toArray(new Function[0]);
}
@Override
public Function[] getEdgeFunctions() {
refreshFunctions();
return edgeFunctions.toArray(new Function[0]);
}
private void refreshFunctions() {
synchronized (functionLock) {
//Index UIs
Map<Class, TransformerUI> uis = new HashMap<Class, TransformerUI>();
for (TransformerUI ui : Lookup.getDefault().lookupAll(TransformerUI.class)) {
Class transformerClass = ui.getTransformerClass();
if (transformerClass == null) {
throw new NullPointerException("Transformer class can' be null");
}
if (uis.containsKey(transformerClass)) {
throw new RuntimeException("A Transformer can't be attach to multiple TransformerUI");
}
uis.put(transformerClass, ui);
}
//Index existing funcs
Set<Column> attributeNodeFunctions = new HashSet<Column>();
Set<Column> attributeEdgeFunctions = new HashSet<Column>();
if (nodeFunctions != null) {
for (Function f : nodeFunctions) {
if (f.isAttribute()) {
attributeNodeFunctions.add(((AttributeFunction) f).getColumn());
}
}
}
if (edgeFunctions != null) {
for (Function f : edgeFunctions) {
if (f.isAttribute()) {
attributeEdgeFunctions.add(((AttributeFunction) f).getColumn());
}
}
}
//Simple transformers
if (nodeFunctions == null) {
nodeFunctions = new ArrayList<Function>();
edgeFunctions = new ArrayList<Function>();
for (Transformer transformer : Lookup.getDefault().lookupAll(Transformer.class)) {
if (transformer instanceof SimpleTransformer) {
if (transformer.isNode()) {
nodeFunctions.add(new FunctionImpl(this, null, transformer, uis.get(transformer.getClass())));
}
if (transformer.isEdge()) {
edgeFunctions.add(new FunctionImpl(this, null, transformer, uis.get(transformer.getClass())));
}
}
}
}
//Atts
Set<Column> foundNodeColumns = new HashSet<Column>();
Set<Column> foundEdgeColumns = new HashSet<Column>();
for (Transformer transformer : Lookup.getDefault().lookupAll(Transformer.class)) {
if (transformer instanceof RankingTransformer || transformer instanceof PartitionTransformer) {
if (transformer.isNode()) {
for (Column col : attributeModel.getNodeTable()) {
if (!col.isProperty()) {
Index index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex();
if (transformer instanceof RankingTransformer && isRanking(col) && !attributeNodeFunctions.contains(col)) {
nodeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new RankingImpl(col, index, defaultInterpolator)));
} else if (transformer instanceof PartitionTransformer && isPartition(col) && !attributeNodeFunctions.contains(col)) {
nodeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new PartitionImpl(col, index)));
}
foundNodeColumns.add(col);
}
}
}
if (transformer.isEdge()) {
for (Column col : attributeModel.getEdgeTable()) {
if (!col.isProperty() && col.isNumber()) {
Index index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex();
if (transformer instanceof RankingTransformer && isRanking(col) && !attributeEdgeFunctions.contains(col)) {
edgeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new RankingImpl(col, index, defaultInterpolator)));
} else if (transformer instanceof PartitionTransformer && isPartition(col) && !attributeEdgeFunctions.contains(col)) {
edgeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new PartitionImpl(col, index)));
}
foundEdgeColumns.add(col);
}
}
}
}
}
attributeNodeFunctions.removeAll(foundNodeColumns);
attributeEdgeFunctions.removeAll(foundEdgeColumns);
//Remove
for (Iterator<Function> nodeItr = nodeFunctions.iterator(); nodeItr.hasNext();) {
Function f = nodeItr.next();
if (f.isAttribute() && attributeNodeFunctions.contains(((AttributeFunction) f).getColumn())) {
nodeItr.remove();
}
}
for (Iterator<Function> edgeItr = edgeFunctions.iterator(); edgeItr.hasNext();) {
Function f = edgeItr.next();
if (f.isAttribute() && attributeEdgeFunctions.contains(((AttributeFunction) f).getColumn())) {
edgeItr.remove();
}
}
}
}
private boolean isPartition(Column column) {
Index index;
if (AttributeUtils.isNodeColumn(column)) {
index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex();
} else {
index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex();
}
int valueCount = index.countValues(column);
int elementCount = index.countElements(column);
double ratio = valueCount / (double) elementCount;
if (column.isNumber()) {
Class columnTypeClass = column.getTypeClass();
if (columnTypeClass.equals(Integer.class)) {
if (ratio < 0.6) {
return true;
}
} else {
if (ratio < 0.1) {
return true;
}
}
} else {
if (ratio < 0.8) {
return true;
}
}
return false;
}
private boolean isRanking(Column column) {
if (column.isNumber()) {
Index index;
if (AttributeUtils.isNodeColumn(column)) {
index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex();
} else {
index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex();
}
if (index.countValues(column) > 0 && !isPartition(column)) {
return true;
}
}
return false;
}
public void setLocalScale(boolean localScale) {
this.localScale = localScale;
}
protected GraphModel getGraphModel() {
return graphModel;
}
}
@@ -0,0 +1,202 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance;
import org.gephi.appearance.api.Partition;
import org.gephi.appearance.api.PartitionFunction;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.api.RankingFunction;
import org.gephi.appearance.api.SimpleFunction;
import org.gephi.appearance.spi.PartitionTransformer;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.SimpleTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.attribute.api.Column;
import org.gephi.graph.api.Element;
/**
*
* @author mbastian
*/
public class FunctionImpl implements RankingFunction, PartitionFunction, SimpleFunction {
protected final AppearanceModelImpl model;
protected final Column column;
protected final Transformer transformer;
protected final TransformerUI transformerUI;
protected final PartitionImpl partition;
protected final RankingImpl ranking;
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI) {
this(model, column, transformer, transformerUI, null, null);
}
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking) {
this(model, column, transformer, transformerUI, null, ranking);
}
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) {
this(model, column, transformer, transformerUI, partition, null);
}
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition, RankingImpl ranking) {
this.model = model;
this.column = column;
try {
this.transformer = transformer.getClass().newInstance();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
this.transformerUI = transformerUI;
this.partition = partition;
this.ranking = ranking;
}
@Override
public void transform(Element element) {
if (isSimple()) {
((SimpleTransformer) transformer).transform(element);
} else if (isRanking()) {
Number val = (Number) element.getAttribute(column);
((RankingTransformer) transformer).transform(element, ranking, val);
} else if (isPartition()) {
Object val = element.getAttribute(column);
((PartitionTransformer) transformer).transform(element, partition, val);
}
}
@Override
public Column getColumn() {
return column;
}
public AppearanceModelImpl getModel() {
return model;
}
@Override
public Transformer getTransformer() {
return transformer;
}
@Override
public TransformerUI getUI() {
return transformerUI;
}
@Override
public boolean isSimple() {
return column == null;
}
@Override
public boolean isAttribute() {
return column != null;
}
@Override
public boolean isPartition() {
return partition != null;
}
@Override
public boolean isRanking() {
return ranking != null;
}
@Override
public Partition getPartition() {
return partition;
}
@Override
public Ranking getRanking() {
return ranking;
}
@Override
public String toString() {
if (column != null) {
if (column.getTitle() != null) {
return column.getTitle();
} else {
return column.getId();
}
}
return super.toString();
}
@Override
public int hashCode() {
int hash = 5;
hash = 47 * hash + (this.column != null ? this.column.hashCode() : 0);
hash = 47 * hash + (this.transformer != null ? this.transformer.hashCode() : 0);
hash = 47 * hash + (this.partition != null ? this.partition.hashCode() : 0);
hash = 47 * hash + (this.ranking != null ? this.ranking.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final FunctionImpl other = (FunctionImpl) obj;
if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) {
return false;
}
if (this.transformer != other.transformer && (this.transformer == null || !this.transformer.equals(other.transformer))) {
return false;
}
if (this.partition != other.partition && (this.partition == null || !this.partition.equals(other.partition))) {
return false;
}
if (this.ranking != other.ranking && (this.ranking == null || !this.ranking.equals(other.ranking))) {
return false;
}
return true;
}
}
@@ -0,0 +1,129 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance;
import java.awt.Color;
import java.util.HashMap;
import java.util.Map;
import org.gephi.appearance.api.Partition;
import org.gephi.attribute.api.Column;
import org.gephi.attribute.api.Index;
/**
*
* @author mbastian
*/
public class PartitionImpl implements Partition {
private final Index index;
private final Column column;
private final Map<Object, Color> colorMap;
public PartitionImpl(Column column, Index index) {
this.column = column;
this.index = index;
this.colorMap = new HashMap<Object, Color>();
}
@Override
public Iterable getValues() {
return index.values(column);
}
@Override
public int getElementCount() {
return index.countElements(column);
}
@Override
public int count(Object value) {
return index.count(column, value);
}
@Override
public Color getColor(Object value) {
return colorMap.get(value);
}
@Override
public void setColor(Object value, Color color) {
colorMap.put(value, color);
}
@Override
public float percentage(Object value) {
int count = index.count(column, value);
return (float) count / index.countElements(column);
}
@Override
public int size() {
return index.countValues(column);
}
@Override
public Column getColumn() {
return column;
}
@Override
public int hashCode() {
int hash = 3;
hash = 23 * hash + (this.column != null ? this.column.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PartitionImpl other = (PartitionImpl) obj;
if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) {
return false;
}
return true;
}
}
@@ -0,0 +1,112 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.Ranking;
import org.gephi.attribute.api.Column;
import org.gephi.attribute.api.Index;
/**
*
* @author mbastian
*/
public class RankingImpl implements Ranking {
private final Index index;
private final Column column;
private Interpolator interpolator;
public RankingImpl(Column column, Index index, Interpolator interpolator) {
this.column = column;
this.index = index;
this.interpolator = interpolator;
}
@Override
public Number getMinValue() {
return index.getMinValue(column);
}
@Override
public Number getMaxValue() {
return index.getMaxValue(column);
}
@Override
public Interpolator getInterpolator() {
return interpolator;
}
@Override
public void setInterpolator(Interpolator interpolator) {
this.interpolator = interpolator;
}
@Override
public float normalize(Number value) {
float normalizedValue = (float) (value.doubleValue() - getMinValue().doubleValue()) / (float) (getMaxValue().doubleValue() - getMinValue().doubleValue());
return interpolator.interpolate(normalizedValue);
}
@Override
public int hashCode() {
int hash = 3;
hash = 67 * hash + (this.column != null ? this.column.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final RankingImpl other = (RankingImpl) obj;
if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) {
return false;
}
return true;
}
}
@@ -0,0 +1,72 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
import org.gephi.appearance.spi.Transformer;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.project.api.Workspace;
/**
*
* @author mbastian
*/
public interface AppearanceController {
/**
* Sets whether rankings use a local or a global scale. When calculating the
* minimum and maximum value (i.e. the scale) rankings can use the complete
* graph or only the currently visible graph. When using the visible graph
* it is called the <b>local</b> scale.
*
* @param useLocalScale <code>true</code> for local, <code>false</code> for
* global
*/
public void setUseLocalScale(boolean useLocalScale);
public void transform(Function function);
public AppearanceModel getModel();
public AppearanceModel getModel(Workspace workspace);
public Transformer getTransformer(TransformerUI ui);
}
@@ -0,0 +1,74 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
import org.gephi.project.api.Workspace;
/**
*
* @author mbastian
*/
public interface AppearanceModel {
/**
* Return the workspace this model is associated with
*
* @return the workspace of this model
*/
public Workspace getWorkspace();
/**
* Returns
* <code>true</code> if rankings are using the currently visible graph as a
* scale. If
* <code>false</code> the complete graph is used to determine minimum and
* maximum values, the ranking scale.
*
* @return <code>true</code> if using a local scale, <code>false</code> if
* global scale
*/
public boolean isLocalScale();
public Function[] getNodeFunctions();
public Function[] getEdgeFunctions();
}
@@ -0,0 +1,53 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
import org.gephi.attribute.api.Column;
/**
*
* @author mbastian
*/
public interface AttributeFunction extends Function {
public Column getColumn();
}
@@ -0,0 +1,67 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
import org.gephi.appearance.spi.Transformer;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.graph.api.Element;
/**
*
* @author mbastian
*/
public interface Function {
public void transform(Element element);
public Transformer getTransformer();
public TransformerUI getUI();
public boolean isSimple();
public boolean isAttribute();
public boolean isRanking();
public boolean isPartition();
}
@@ -0,0 +1,325 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.appearance.api;
import java.awt.geom.Point2D;
/**
* Abstract clas that defines the single {@link #interpolate(float)} method.
* This abstract class is implemented by built-in interpolators.
*
* @author Mathieu Bastian
*/
public abstract class Interpolator {
/**
* Linear interpolation
* <code>x = interpolate(x)
* <code>
*/
public static final Interpolator LINEAR = new Interpolator() {
@Override
public float interpolate(float x) {
return x;
}
};
/**
* Log2 interpolation
* <code>Math.log(1 + x)/Math.log(2) = interpolate(x)</code>
*/
public static final Interpolator LOG2 = new Interpolator() {
@Override
public float interpolate(float x) {
return (float) (Math.log(1 + x) / Math.log(2));
}
};
/**
* Builds a bezier interpolator with two control points (px1, py1) and (px2,
* py2). The points should all be in range [0, 1].
*
* @param px1 the x-coordinate of first control point, between [0, 1]
* @param py1 the y-coordinate of first control point, between [0, 1]
* @param px2 the x-coordinate of second control point, between [0, 1]
* @param py2 the y-coordinate of second control point, between [0, 1]
* @return new bezier interpolator
*/
public static Interpolator newBezierInterpolator(float px1, float py1, float px2, float py2) {
return new BezierInterpolator(px1, py1, px2, py2);
}
/**
* This function takes an input value between 0 and 1 and returns another
* value, also between 0 and 1.
*
* @param x a value between 0 and 1
* @return a value between 0 and 1. Values outside of this boundary may be
* clamped to the interval [0,1] and cause undefined results.
*/
public abstract float interpolate(float x);
/**
* Bezier curve interpolator.
* <p>
* Basically, a cubic Bezier curve is created with start point (0,0) and
* endpoint (1,1). The other two control points (px1, py1) and (px2, py2)
* are given by the user, where px1, py1, px1, and px2 are all in the range
* [0,1].
* </p>
*/
//Author David C. Browne
public static class BezierInterpolator extends Interpolator {
/**
* the coordinates of the 2 2D control points for a cubic Bezier curve,
* with implicit start point (0,0) and end point (1,1) -- each
* individual coordinate value must be in range [0,1]
*/
private final float x1, y1, x2, y2;
/**
* do the input control points form a line with (0,0) and (1,1), i.e.,
* x1 == y1 and x2 == y2 -- if so, then all x(t) == y(t) for the curve
*/
private final boolean isCurveLinear;
/**
* power of 2 sample size for lookup table of x values
*/
private static final int SAMPLE_SIZE = 16;
/**
* difference in t used to calculate each of the xSamples values --
* power of 2 sample size should provide exact representation of this
* value and its integer multiples (integer in range of [0..SAMPLE_SIZE]
*/
private static final float SAMPLE_INCREMENT = 1f / SAMPLE_SIZE;
/**
* x values for the bezier curve, sampled at increments of 1/SAMPLE_SIZE
* -- this is used to find the good initial guess for parameter t, given
* an x
*/
private final float[] xSamples = new float[SAMPLE_SIZE + 1];
/**
* constructor -- cubic bezier curve will be represented by control
* points (0,0) (px1,py1) (px2,py2) (1,1) -- px1, py1, px2, py2 all in
* range [0,1]
*
* @param px1 is x-coordinate of first control point, in range [0,1]
* @param py1 is y-coordinate of first control point, in range [0,1]
* @param px2 is x-coordinate of second control point, in range [0,1]
* @param py2 is y-coordinate of second control point, in range [0,1]
*/
public BezierInterpolator(float px1, float py1, float px2, float py2) {
// check user input for precondition
if (px1 < 0 || px1 > 1 || py1 < 0 || py1 > 1
|| px2 < 0 || px2 > 1 || py2 < 0 || py2 > 1) {
throw new IllegalArgumentException("control point coordinates must "
+ "all be in range [0,1]");
}
// save control point data
x1 = px1;
y1 = py1;
x2 = px2;
y2 = py2;
// calc linearity/identity curve
isCurveLinear = ((x1 == y1) && (x2 == y2));
// make the array of x value samples
if (!isCurveLinear) {
for (int i = 0; i < SAMPLE_SIZE + 1; ++i) {
xSamples[i] = eval(i * SAMPLE_INCREMENT, x1, x2);
}
}
}
public Point2D getControl1() {
return new Point2D.Float(x1, y1);
}
public Point2D getControl2() {
return new Point2D.Float(x2, y2);
}
/**
* get the y-value of the cubic bezier curve that corresponds to the x
* input
*
* @param x is x-value of cubic bezier curve, in range [0,1]
* @return corresponding y-value of cubic bezier curve -- in range [0,1]
*/
@Override
public float interpolate(float x) {
// check user input for precondition
if (x < 0) {
x = 0;
} else if (x > 1) {
x = 1;
}
// check quick exit identity cases (linear curve or curve endpoints)
if (isCurveLinear || x == 0 || x == 1) {
return x;
}
// find the t parameter for a given x value, and use this t to calculate
// the corresponding y value
return eval(findTForX(x), y1, y2);
}
/**
* use Bernstein basis to evaluate 1D cubic Bezier curve (quicker and
* more numerically stable than power basis) -- 1D control coordinates
* are (0, p1, p2, 1), where p1 and p2 are in range [0,1], and there is
* no ordering constraint on p1 and p2, i.e., p1 <= p2 does not have to
* be true @param t is the pa
*
* ramaterized value in range [0,1] @param p1 is 1st control point
* coordinate in range [0,1] @param p2 is 2nd control point coor
*
* d
* inate in range [0,1] @return the value of the Bezier curve at
* parameter t
*/
private float eval(float t, float p1, float p2) {
// Use optimzied version of the normal Bernstein basis form of Bezier:
// (3*(1-t)*(1-t)*t*p1)+(3*(1-t)*t*t*p2)+(t*t*t), since p0=0, p3=1
// The above unoptimized version is best using -server, but since we are
// probably doing client-side animation, this is faster.
float compT = 1 - t;
return t * (3 * compT * (compT * p1 + t * p2) + (t * t));
}
/**
* evaluate Bernstein basis derivative of 1D cubic Bezier curve, where
* 1D control points are (0, p1, p2, 1), where p1 and p2 are in range
* [0,1], and there is no ordering constraint on p1 and p2, i.e., p1 <=
* p2 does not have to be true @param t is the paramaterized
*
* value in range [0,1] @param p1 is 1st control point coordinate in
* range [0,1] @param p2 is 2nd control point coo
*
* r
* dinate in range [0,1] @return the value of the Bezier curve at
* parameter t
*/
private float evalDerivative(float t, float p1, float p2) {
// use optimzed version of Berstein basis Bezier derivative:
// (3*(1-t)*(1-t)*p1)+(6*(1-t)*t*(p2-p1))+(3*t*t*(1-p2)), since p0=0, p3=1
// The above unoptimized version is best using -server, but since we are
// probably doing client-side animation, this is faster.
float compT = 1 - t;
return 3 * (compT * (compT * p1 + 2 * t * (p2 - p1)) + t * t * (1 - p2));
}
/**
* find an initial good guess for what parameter t might produce the
* x-value on the Bezier curve -- uses linear interpolation on the
* x-value sample array that was created on construction
*
* @param x is x-value of cubic bezier curve, in range [0,1]
* @return a good initial guess for parameter t (in range [0,1]) that
* gives x
*/
private float getInitialGuessForT(float x) {
// find which places in the array that x would be sandwiched between,
// and then linearly interpolate a reasonable value of t -- array values
// are ascending (or at least never descending) -- binary search is
// probably more trouble than it is worth here
for (int i = 1; i < SAMPLE_SIZE + 1; ++i) {
if (xSamples[i] >= x) {
float xRange = xSamples[i] - xSamples[i - 1];
if (xRange == 0) {
// no change in value between samples, so use earlier time
return (i - 1) * SAMPLE_INCREMENT;
} else {
// linearly interpolate the time value
return ((i - 1) + ((x - xSamples[i - 1]) / xRange))
* SAMPLE_INCREMENT;
}
}
}
// shouldn't get here since 0 <= x <= 1, and xSamples[0] == 0 and
// xSamples[SAMPLE_SIZE] == 1 (using power of 2 SAMPLE_SIZE for more
// exact increment arithmetic)
return 1;
}
/**
* find the parameter t that produces the given x-value for the curve --
* uses Newton-Raphson to refine the value as opposed to subdividing
* until we are within some tolerance
*
* @param x is x-value of cubic bezier curve, in range [0,1]
* @return the parameter t (in range [0,1]) that produces x
*/
private float findTForX(float x) {
// get an initial good guess for t
float t = getInitialGuessForT(x);
// use Newton-Raphson to refine the value for t -- for this constrained
// Bezier with float accuracy (7 digits), any value not converged by 4
// iterations is cycling between values, which can minutely affect the
// accuracy of the last digit
final int numIterations = 4;
for (int i = 0; i < numIterations; ++i) {
// stop if this value of t gives us exactly x
float xT = (eval(t, x1, x2) - x);
if (xT == 0) {
break;
}
// stop if derivative is 0
float dXdT = evalDerivative(t, x1, x2);
if (dXdT == 0) {
break;
}
// refine t
t -= xT / dXdT;
}
return t;
}
}
}
@@ -0,0 +1,68 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
import java.awt.Color;
import org.gephi.attribute.api.Column;
/**
*
* @author mbastian
*/
public interface Partition {
public Iterable getValues();
public int getElementCount();
public int count(Object value);
public Color getColor(Object value);
public void setColor(Object value, Color color);
public float percentage(Object value);
public int size();
public Column getColumn();
}
@@ -0,0 +1,51 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
/**
*
* @author mbastian
*/
public interface PartitionFunction extends AttributeFunction {
public Partition getPartition();
}
@@ -0,0 +1,59 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
/**
*
* @author mbastian
*/
public interface Ranking {
public Number getMinValue();
public Number getMaxValue();
public Interpolator getInterpolator();
public void setInterpolator(Interpolator interpolator);
public float normalize(Number value);
}
@@ -0,0 +1,51 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
/**
*
* @author mbastian
*/
public interface RankingFunction extends AttributeFunction {
public Ranking getRanking();
}
@@ -0,0 +1,49 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.api;
/**
*
* @author mbastian
*/
public interface SimpleFunction extends Function {
}
@@ -0,0 +1,54 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.spi;
import org.gephi.appearance.api.Partition;
import org.gephi.graph.api.Element;
/**
*
* @author mbastian
*/
public interface PartitionTransformer<E extends Element> extends Transformer {
public void transform(E element, Partition partition, Object value);
}
@@ -0,0 +1,54 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.spi;
import org.gephi.appearance.api.Ranking;
import org.gephi.graph.api.Element;
/**
*
* @author mbastian
*/
public interface RankingTransformer<E extends Element> extends Transformer {
public void transform(E element, Ranking ranking, Number value);
}
@@ -0,0 +1,53 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.spi;
import org.gephi.graph.api.Element;
/**
*
* @author mbastian
*/
public interface SimpleTransformer<E extends Element> extends Transformer {
public void transform(E element);
}
@@ -0,0 +1,53 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.spi;
/**
*
* @author mbastian
*/
public interface Transformer {
public boolean isNode();
public boolean isEdge();
}
@@ -0,0 +1,55 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.spi;
import javax.swing.Icon;
/**
*
* @author mbastian
*/
public interface TransformerCategory {
public String getDisplayName();
public Icon getIcon();
}
@@ -0,0 +1,68 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.spi;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.gephi.appearance.api.Function;
/**
*
* @author mbastian
*/
public interface TransformerUI<T extends Transformer> {
public TransformerCategory getCategory();
public JPanel getPanel(Function function);
public String getDisplayName();
public String getDescription();
public Icon getIcon();
public AbstractButton[] getControlButton();
public Class<? extends T> getTransformerClass();
}
@@ -1,4 +1,4 @@
Manifest-Version: 1.0
AutoUpdate-Essential-Module: true
OpenIDE-Module-Localizing-Bundle: org/gephi/graph/dhns/Bundle.properties
OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/api/Bundle.properties
OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version}
@@ -2,7 +2,7 @@
<nbm>
<!--
<moduleType>autoload</moduleType>
<codeNameBase>org.gephi.graph.dhns/1</codeNameBase>
<codeNameBase>org.gephi.appearance.api/1</codeNameBase>
<licenseName>Apache License, Version 2.0</licenseName>
<licenseFile>license.txt</licenseFile>
-->
@@ -0,0 +1,5 @@
OpenIDE-Module-Display-Category=Gephi Core
OpenIDE-Module-Long-Description=\
API for the visual appearance of elements
OpenIDE-Module-Name=Appearance API
OpenIDE-Module-Short-Description=API for the visual appearance of elements
@@ -5,20 +5,20 @@
<artifactId>gephi-parent</artifactId>
<groupId>org.gephi</groupId>
<version>0.9-SNAPSHOT</version>
<relativePath>../..</relativePath>
<relativePath>../..</relativePath>
</parent>
<groupId>org.gephi</groupId>
<artifactId>partition-plugin</artifactId>
<artifactId>appearance-plugin</artifactId>
<version>0.9-SNAPSHOT</version>
<packaging>nbm</packaging>
<name>PartitionPlugin</name>
<name>AppearancePlugin</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>partition-api</artifactId>
<artifactId>appearance-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
@@ -45,8 +45,8 @@
<artifactId>nbm-maven-plugin</artifactId>
<configuration>
<publicPackages>
<publicPackage>org.gephi.partition.plugin</publicPackage>
<publicPackage>org.gephi.partition.plugin.spi</publicPackage>
<publicPackage>org.gephi.appearance.plugin</publicPackage>
<publicPackage>org.gephi.appearance.plugin.palette</publicPackage>
</publicPackages>
</configuration>
</plugin>
@@ -0,0 +1,81 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin;
import java.awt.Color;
import org.gephi.appearance.api.Partition;
import org.gephi.appearance.plugin.palette.PaletteManager;
import org.gephi.appearance.spi.PartitionTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Element;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = Transformer.class)
public class PartitionElementColorTransformer implements PartitionTransformer<Element> {
@Override
public void transform(Element element, Partition partition, Object value) {
Color color = partition.getColor(value);
if (color == null) {
color = Color.BLACK;
}
element.setColor(color);
}
@Override
public boolean isNode() {
return true;
}
@Override
public boolean isEdge() {
return true;
}
public PaletteManager getPaletteManager() {
return PaletteManager.getInstance();
}
}
@@ -0,0 +1,189 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin;
import java.awt.Color;
import java.io.Serializable;
import java.util.Arrays;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Element;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = Transformer.class)
public class RankingElementColorTransformer implements RankingTransformer<Element> {
protected final LinearGradient linearGradient = new LinearGradient(new Color[]{Color.WHITE, Color.BLACK}, new float[]{0f, 1f});
@Override
public void transform(Element element, Ranking ranking, Number value) {
Color color = linearGradient.getValue(ranking.normalize(value));
element.setColor(color);
}
@Override
public boolean isNode() {
return true;
}
@Override
public boolean isEdge() {
return true;
}
public float[] getColorPositions() {
return linearGradient.getPositions();
}
public Color[] getColors() {
return linearGradient.getColors();
}
public void setColorPositions(float[] positions) {
linearGradient.setPositions(positions);
}
public void setColors(Color[] colors) {
linearGradient.setColors(colors);
}
public LinearGradient getLinearGradient() {
return linearGradient;
}
public static class LinearGradient implements Serializable, Cloneable {
private Color[] colors;
private float[] positions;
public LinearGradient(Color colors[], float[] positions) {
if (colors == null || positions == null) {
throw new NullPointerException();
}
if (colors.length != positions.length) {
throw new IllegalArgumentException();
}
this.colors = colors;
this.positions = positions;
}
public Color getValue(float pos) {
for (int a = 0; a < positions.length - 1; a++) {
if (positions[a] == pos) {
return colors[a];
}
if (positions[a] < pos && pos < positions[a + 1]) {
float v = (pos - positions[a]) / (positions[a + 1] - positions[a]);
return tween(colors[a], colors[a + 1], v);
}
}
if (pos <= positions[0]) {
return colors[0];
}
if (pos >= positions[positions.length - 1]) {
return colors[colors.length - 1];
}
return null;
}
private Color tween(Color c1, Color c2, float p) {
return new Color(
(int) (c1.getRed() * (1 - p) + c2.getRed() * (p)),
(int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)),
(int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)),
(int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p)));
}
public Color[] getColors() {
return colors;
}
public float[] getPositions() {
return positions;
}
public void setColors(Color[] colors) {
this.colors = colors;
}
public void setPositions(float[] positions) {
this.positions = positions;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final LinearGradient other = (LinearGradient) obj;
if (!Arrays.deepEquals(this.colors, other.colors)) {
return false;
}
if (!Arrays.equals(this.positions, other.positions)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 17 * hash + Arrays.deepHashCode(this.colors);
hash = 17 * hash + Arrays.hashCode(this.positions);
return hash;
}
@Override
protected Object clone() throws CloneNotSupportedException {
LinearGradient cl = new LinearGradient(colors, positions);
return cl;
}
}
}
@@ -0,0 +1,72 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin;
import java.awt.Color;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Element;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = Transformer.class)
public class RankingLabelColorTransformer extends RankingElementColorTransformer {
@Override
public void transform(Element element, Ranking ranking, Number value) {
Color color = linearGradient.getValue(ranking.normalize(value));
element.getTextProperties().setColor(color);
}
@Override
public boolean isNode() {
return true;
}
@Override
public boolean isEdge() {
return true;
}
}
@@ -0,0 +1,92 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Node;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = Transformer.class)
public class RankingNodeSizeTransformer implements RankingTransformer<Node> {
protected float minSize = 1f;
protected float maxSize = 4f;
@Override
public void transform(Node node, Ranking ranking, Number value) {
float rankingValue = ranking.normalize(value);
float size = rankingValue * (maxSize - minSize) + minSize;
node.setSize(size);
}
@Override
public boolean isNode() {
return true;
}
@Override
public boolean isEdge() {
return false;
}
public float getMaxSize() {
return maxSize;
}
public float getMinSize() {
return minSize;
}
public void setMaxSize(float maxSize) {
this.maxSize = maxSize;
}
public void setMinSize(float minSize) {
this.minSize = minSize;
}
}
@@ -0,0 +1,81 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin;
import java.awt.Color;
import org.gephi.appearance.spi.SimpleTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Element;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = Transformer.class)
public class UniqueElementColorTransformer implements SimpleTransformer<Element> {
private Color color = Color.BLACK;
@Override
public void transform(Element element) {
element.setColor(color);
}
@Override
public boolean isNode() {
return true;
}
@Override
public boolean isEdge() {
return true;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
@@ -0,0 +1,80 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin;
import org.gephi.appearance.spi.SimpleTransformer;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Node;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = Transformer.class)
public class UniqueNodeSizeTransformer implements SimpleTransformer<Node> {
private float size = 10f;
@Override
public void transform(Node node) {
node.setSize(size);
}
@Override
public boolean isNode() {
return true;
}
@Override
public boolean isEdge() {
return false;
}
public float getSize() {
return size;
}
public void setSize(float size) {
this.size = size;
}
}
@@ -0,0 +1,75 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin.palette;
import java.awt.Color;
/**
*
* @author mbastian
*/
public class Palette {
private final String name;
private final Color[] colors;
public Palette(Color[] colors) {
this(null, colors);
}
public Palette(String name, Color[] colors) {
this.colors = colors;
this.name = name;
}
public Color[] getColors() {
return colors;
}
public String getName() {
return name;
}
public int size() {
return colors.length;
}
}
@@ -0,0 +1,351 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin.palette;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
/**
*
* @author mbastian
*/
public class PaletteGenerator {
private static final float[] DEFAULT_FILTER = new float[]{0, 360, 0, 3, 0, 1.5f};
public static Color[] generatePalette(int colorsCount, int quality) {
return generatePalette(colorsCount, quality, false, null, null);
}
public static Color[] generatePalette(int colorsCount, int quality, float[] filter) {
return generatePalette(colorsCount, quality, false, null, filter);
}
public static Color[] generatePalette(int colorsCount, int quality, boolean ultraPrecision, Random random, float[] filter) {
if (filter == null) {
filter = DEFAULT_FILTER;
}
if (random == null) {
random = new Random();
}
double[][] kMeans = generateRandomKmeans(colorsCount, random, filter);
List<double[]> colorSamples = new ArrayList<double[]>();
if (ultraPrecision) {
for (double l = 0; l <= 1; l += 0.01) {
for (double a = -1; a <= 1; a += 0.05) {
for (double b = -1; b <= 1; b += 0.05) {
if (checkColor2(l, a, b, filter)) {
colorSamples.add(new double[]{l, a, b});
}
}
}
}
} else {
for (double l = 0; l <= 1; l += 0.05) {
for (double a = -1; a <= 1; a += 0.1) {
for (double b = -1; b <= 1; b += 0.1) {
if (checkColor2(l, a, b, filter)) {
colorSamples.add(new double[]{l, a, b});
}
}
}
}
}
// Steps
int[] samplesClosest = new int[colorSamples.size()];
int steps = quality;
while (steps-- > 0) {
// kMeans -> Samples Closest
for (int i = 0; i < colorSamples.size(); i++) {
double[] lab = colorSamples.get(i);
double minDistance = 1000000;
for (int j = 0; j < kMeans.length; j++) {
double[] kMean = kMeans[j];
double distance = Math.sqrt(Math.pow(lab[0] - kMean[0], 2) + Math.pow(lab[1] - kMean[1], 2) + Math.pow(lab[2] - kMean[2], 2));
if (distance < minDistance) {
minDistance = distance;
samplesClosest[i] = j;
}
}
}
// Samples -> kMeans
List<double[]> freeColorSamples = colorSamples;
for (int j = 0; j < kMeans.length; j++) {
int count = 0;
double[] candidateKMean = new double[]{0, 0, 0};
for (int i = 0; i < colorSamples.size(); i++) {
if (samplesClosest[i] == j) {
count++;
double[] colorSample = colorSamples.get(i);
candidateKMean[0] += colorSample[0];
candidateKMean[1] += colorSample[1];
candidateKMean[2] += colorSample[2];
}
}
if (count != 0) {
candidateKMean[0] /= count;
candidateKMean[1] /= count;
candidateKMean[2] /= count;
}
if (count != 0 && checkColor2(candidateKMean[0], candidateKMean[1], candidateKMean[2], filter)) {
kMeans[j] = candidateKMean;
} else {
// The candidate kMean is out of the boundaries of the color space, or unfound.
if (freeColorSamples.size() > 0) {
// We just search for the closest FREE color of the candidate kMean
double minDistance = 10000000000.0;
int closest = -1;
for (int i = 0; i < freeColorSamples.size(); i++) {
double distance = Math.sqrt(Math.pow(freeColorSamples.get(i)[0] - candidateKMean[0], 2) + Math.pow(freeColorSamples.get(i)[1] - candidateKMean[1], 2) + Math.pow(freeColorSamples.get(i)[2] - candidateKMean[2], 2));
if (distance < minDistance) {
minDistance = distance;
closest = i;
}
}
kMeans[j] = colorSamples.get(closest);
} else {
// Then we just search for the closest color of the candidate kMean
double minDistance = 10000000000.0;
int closest = -1;
for (int i = 0; i < colorSamples.size(); i++) {
double distance = Math.sqrt(Math.pow(colorSamples.get(i)[0] - candidateKMean[0], 2) + Math.pow(colorSamples.get(i)[1] - candidateKMean[1], 2) + Math.pow(colorSamples.get(i)[2] - candidateKMean[2], 2));
if (distance < minDistance) {
minDistance = distance;
closest = i;
}
}
kMeans[j] = colorSamples.get(closest);
}
}
List<double[]> newFreeColorSamples = new ArrayList<double[]>();
for (double[] color : freeColorSamples) {
double[] kMean = kMeans[j];
if (color[0] != kMean[0]
|| color[1] != kMean[1]
|| color[2] != kMean[2]) {
newFreeColorSamples.add(color);
}
}
freeColorSamples = newFreeColorSamples;
}
}
kMeans = sortColors(kMeans);
Color[] res = new Color[kMeans.length];
for (int i = 0; i < kMeans.length; i++) {
double[] kmean = kMeans[i];
int[] rgb = lab2rgb(kmean[0], kmean[1], kmean[2]);
res[i] = new Color(rgb[0], rgb[1], rgb[2]);
}
return res;
}
private static double[][] generateRandomKmeans(int colorsCount, Random random, float[] filter) {
double[][] kMeans = new double[colorsCount][];
for (int i = 0; i < colorsCount; i++) {
double[] lab = new double[]{random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1};
while (!checkColor2(lab, filter)) {
lab = new double[]{random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1};
}
kMeans[i] = lab;
}
return kMeans;
}
private static double[][] sortColors(double[][] colors) {
LinkedList<double[]> colorsToSort = new LinkedList<double[]>(Arrays.asList(colors));
List<double[]> diffColors = new ArrayList<double[]>();
diffColors.add(colorsToSort.pop());
while (colorsToSort.size() > 0) {
int index = -1;
double maxDistance = -1;
for (int candidate_index = 0; candidate_index < colorsToSort.size(); candidate_index++) {
double d = 1000000000;
for (int i = 0; i < diffColors.size(); i++) {
double[] colorA = colorsToSort.get(candidate_index);
double[] colorB = diffColors.get(i);
double dl = colorA[0] - colorB[0];
double da = colorA[1] - colorB[1];
double db = colorA[2] - colorB[2];
d = Math.min(d, Math.sqrt(Math.pow(dl, 2) + Math.pow(da, 2) + Math.pow(db, 2)));
}
if (d > maxDistance) {
maxDistance = d;
index = candidate_index;
}
}
double[] color = colorsToSort.get(index);
diffColors.add(color);
colorsToSort.remove(index);
}
double[][] res = new double[diffColors.size()][];
for (int i = 0; i < diffColors.size(); i++) {
res[i] = diffColors.get(i);
}
return res;
}
private static boolean checkColor2(double[] lab, float[] filter) {
return checkColor2(lab[0], lab[1], lab[2], filter);
}
private static boolean checkColor2(double l, double a, double b, float[] filter) {
int[] rgb = lab2rgb(l, a, b);
double[] hcl = lab2hcl(l, a, b);
// Check that a color is valid: it must verify our checkColor condition, but also be in the color space
return !Double.isNaN(rgb[0]) && rgb[0] >= 0 && rgb[1] >= 0
&& rgb[2] >= 0 && rgb[0] < 256 && rgb[1] < 256 && rgb[2] < 256
&& hcl[0] >= filter[0] && hcl[0] <= filter[1]
&& hcl[1] >= filter[2] && hcl[1] <= filter[3]
&& hcl[2] >= filter[4] && hcl[2] <= filter[5];
}
private static int[] lab2rgb(double l, double a, double b) {
double[] xyz = lab2xyz(l, a, b);
return xyz2rgb(xyz[0], xyz[1], xyz[2]);
}
private static double[] lab2xyz(double l, double a, double b) {
double sl = (l + 0.16) / 1.16;
double[] ill = new double[]{0.96421, 1.00000, 0.82519};
double y = ill[1] * finv(sl);
double x = ill[0] * finv(sl + (a / 5.0));
double z = ill[2] * finv(sl - (b / 2.0));
return new double[]{x, y, z};
}
private static int[] xyz2rgb(double x, double y, double z) {
double rl = 3.2406 * x - 1.5372 * y - 0.4986 * z;
double gl = -0.9689 * x + 1.8758 * y + 0.0415 * z;
double bl = 0.0557 * x - 0.2040 * y + 1.0570 * z;
boolean clip = Math.min(rl, Math.min(gl, bl)) < -0.001 || Math.max(rl, Math.max(gl, bl)) > 1.001;
if (clip) {
rl = rl < 0.0 ? 0.0 : rl > 1.0 ? 1.0 : rl;
gl = gl < 0.0 ? 0.0 : gl > 1.0 ? 1.0 : gl;
bl = bl < 0.0 ? 0.0 : bl > 1.0 ? 1.0 : bl;
}
int r = (int) Math.round(255.0 * correct1(rl));
int g = (int) Math.round(255.0 * correct1(gl));
int b = (int) Math.round(255.0 * correct1(bl));
return new int[]{r, g, b};
}
private static double[] rgb2lab(int r, int g, int b) {
double[] xyz = rgb2xyz(r, g, b);
return xyz2lab(xyz[0], xyz[1], xyz[2]);
}
private static double[] rgb2xyz(int r, int g, int b) {
double rl = correct2(r / 255.0);
double gl = correct2(g / 255.0);
double bl = correct2(b / 255.0);
double x = 0.4124 * rl + 0.3576 * gl + 0.1805 * bl;
double y = 0.2126 * rl + 0.7152 * gl + 0.0722 * bl;
double z = 0.0193 * rl + 0.1192 * gl + 0.9505 * bl;
return new double[]{x, y, z};
}
private static double[] xyz2lab(double x, double y, double z) {
double[] ill = new double[]{0.96421, 1.00000, 0.82519};
double l = 1.16 * flab(y / ill[1]) - 0.16;
double a = 5 * (flab(x / ill[0]) - flab(y / ill[1]));
double b = 2 * (flab(y / ill[1]) - flab(z / ill[2]));
return new double[]{l, a, b};
}
private static double[] lab2hcl(double l, double a, double b) {
l = (l - 0.09) / 0.61;
double r = Math.sqrt(a * a + b * b);
double s = r / (l * 0.311 + 0.125);
double TAU = 6.283185307179586476925287;
double angle = Math.atan2(a, b);
double c = (TAU / 6.0 - angle) / TAU;
c *= 360;
if (c < 0) {
c += 360;
}
return new double[]{c, s, l};
}
private static double finv(double t) {
if (t > (6.0 / 29.0)) {
return t * t * t;
} else {
return 3 * (6.0 / 29.0) * (6.0 / 29.0) * (t - 4.0 / 29.0);
}
}
private static double flab(double t) {
if (t > Math.pow(6.0 / 29.0, 3)) {
return Math.pow(t, 1.0 / 3.0);
} else {
return (1.0 / 3.0) * (29.0 / 6.0) * (29.0 / 6.0) * t + 4.0 / 29.0;
}
}
private static double correct1(double cl) {
double a = 0.055;
if (cl <= 0.0031308) {
return 12.92 * cl;
} else {
return (1 + a) * Math.pow(cl, 1.0 / 2.4) - a;
}
}
private static double correct2(double c) {
double a = 0.055;
if (c <= 0.04045) {
return c / 12.92;
} else {
return Math.pow((c + a) / (1.0 + a), 2.4);
}
}
}
@@ -0,0 +1,214 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin.palette;
import java.awt.Color;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.openide.util.Exceptions;
/**
*
* @author mbastian
*/
public class PaletteManager {
private static PaletteManager instance;
public synchronized static PaletteManager getInstance() {
if (instance == null) {
instance = new PaletteManager();
}
return instance;
}
private final static int RECENT_PALETTE_SIZE = 5;
private final List<Preset> presets;
private final Collection<Palette> whiteBackgroundPalette;
private final Collection<Palette> blackBackgroundPalette;
private final LinkedList<Palette> recentPalette;
public PaletteManager() {
presets = loadPresets();
whiteBackgroundPalette = loadWhiteBackgroundPalettes();
blackBackgroundPalette = loadBlackBackgroundPalettes();
recentPalette = new LinkedList<Palette>();
}
public Palette generatePalette(int colorCount) {
return generatePalette(colorCount, null);
}
public Palette generatePalette(int colorCount, Preset preset) {
int quality = 50;
if (colorCount > 50) {
quality = 25;
} else if (colorCount > 100) {
quality = 10;
} else if (colorCount > 200) {
quality = 5;
} else if (colorCount > 300) {
quality = 2;
}
Color[] cls = PaletteGenerator.generatePalette(colorCount, quality, preset.toArray());
return new Palette(cls);
}
public Collection<Preset> getPresets() {
return presets;
}
public Collection<Palette> getWhiteBackgroudPalette(int colorCount) {
List<Palette> palettes = new ArrayList<Palette>();
for (Palette p : whiteBackgroundPalette) {
if (p.size() >= colorCount) {
palettes.add(p);
}
}
return palettes;
}
public Collection<Palette> getBlackBackgroudPalette(int colorCount) {
List<Palette> palettes = new ArrayList<Palette>();
for (Palette p : blackBackgroundPalette) {
if (p.size() >= colorCount) {
palettes.add(p);
}
}
return palettes;
}
public void addRecentPalette(Palette palette) {
if (recentPalette.size() == RECENT_PALETTE_SIZE) {
recentPalette.removeLast();
}
recentPalette.addFirst(palette);
}
public Collection<Palette> getRecentPalettes() {
return recentPalette;
}
private List<Preset> loadPresets() {
List<Preset> presetList = new ArrayList<Preset>();
try {
LineNumberReader reader = new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream("palette_presets.csv")));
reader.readLine();
String line;
while ((line = reader.readLine()) != null) {
String[] split = line.split(",");
//name,dark,hmin,hmax,cmin,cmax,lmin,lmax
String name = split[0];
boolean dark = Boolean.parseBoolean(split[1]);
int hMin = Integer.parseInt(split[2]);
int hMax = Integer.parseInt(split[3]);
float cMin = Float.parseFloat(split[4]);
float cMax = Float.parseFloat(split[5]);
float lMin = Float.parseFloat(split[6]);
float lMax = Float.parseFloat(split[7]);
presetList.add(new Preset(name, dark, hMin, hMax, cMin, cMax, lMin, lMax));
}
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
return presetList;
}
private static Collection<Palette> loadWhiteBackgroundPalettes() {
try {
return loadPalettes("palette_white_background.csv");
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
return Collections.EMPTY_LIST;
}
private static Collection<Palette> loadBlackBackgroundPalettes() {
try {
return loadPalettes("palette_black_background.csv");
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
return Collections.EMPTY_LIST;
}
private static Collection<Palette> loadPalettes(String fileName) throws IOException {
List<List<Color>> palettes = new ArrayList<List<Color>>();
LineNumberReader reader = new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream(fileName)));
reader.readLine();
String line;
int maxPalette = 32;
while ((line = reader.readLine()) != null) {
String[] split = line.split(",");
for (int i = 0; i < split.length && i < maxPalette; i++) {
String colorStr = split[i];
if (!colorStr.isEmpty()) {
List<Color> palette;
if (palettes.size() <= i) {
palette = new ArrayList<Color>();
palettes.add(palette);
} else {
palette = palettes.get(i);
}
palette.add(parseHexColor(colorStr.trim()));
}
}
}
List<Palette> result = new ArrayList<Palette>();
for (List<Color> cls : palettes) {
Collections.reverse(cls);
Palette plt = new Palette(cls.toArray(new Color[0]));
result.add(plt);
}
return result;
}
private static Color parseHexColor(String hexColor) {
int rgb = Integer.parseInt(hexColor.replaceFirst("#", ""), 16);
return new Color(rgb);
}
}
@@ -0,0 +1,110 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.appearance.plugin.palette;
/**
*
* @author mbastian
*/
public class Preset {
private final String name;
private final boolean dark;
private final int hMin;
private final int hMax;
private final float cMin;
private final float cMax;
private final float lMin;
private final float lMax;
public Preset(String name, boolean dark, int hMin, int hMax, float cMin, float cMax, float lMin, float lMax) {
this.name = name;
this.dark = dark;
this.hMin = hMin;
this.hMax = hMax;
this.cMin = cMin;
this.cMax = cMax;
this.lMin = lMin;
this.lMax = lMax;
}
public String getName() {
return name;
}
public boolean isDark() {
return dark;
}
public int gethMin() {
return hMin;
}
public int gethMax() {
return hMax;
}
public float getcMin() {
return cMin;
}
public float getcMax() {
return cMax;
}
public float getlMin() {
return lMin;
}
public float getlMax() {
return lMax;
}
public float[] toArray() {
return new float[]{hMin, hMax, cMin, cMax, lMin, lMax};
}
@Override
public String toString() {
return name;
}
}
@@ -1,4 +1,4 @@
Manifest-Version: 1.0
AutoUpdate-Essential-Module: true
OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/partition/Bundle.properties
Manifest-Version: 1.0
AutoUpdate-Essential-Module: true
OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/plugin/Bundle.properties
OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version}
@@ -2,7 +2,7 @@
<nbm>
<!--
<moduleType>autoload</moduleType>
<codeNameBase>org.gephi.desktop.partition/1</codeNameBase>
<codeNameBase>org.gephi.appearance.plugin/1</codeNameBase>
<licenseName>Apache License, Version 2.0</licenseName>
<licenseFile>license.txt</licenseFile>
-->
@@ -1,5 +1,5 @@
OpenIDE-Module-Display-Category=Plugin
OpenIDE-Module-Name=Partition Plugin
OpenIDE-Module-Name=Appearance Plugin
OpenIDE-Module-Short-Description=Partition transformers implementations with UI
@@ -0,0 +1,101 @@
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
#82635C ,#597568,#56737C,#8B6685,#557849,#9C5F75,#A06074,#7779A3,#9C7095,#70833B,#AD7AAE,#908B36,#7D444B,#405863,#415F49,#A19A68,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A
,#976253 ,#737339,#68753C,#8B6584,#678644,#518550,#A07434,#618B4A,#8D7199,#589A5A,#A37DAB,#6A9141,#BE7533,#AE81B9,#A890CC,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137
,,#9E5E63 ,#9E5F48,#8C6835,#AB6C44,#554F39,#4B7F5C,#9F7536,#B3624F,#BA793E,#355E52,#528C9E,#569555,#CB8340,#C55B65,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C
,,,#4C7473 ,#4F7480,#61718C,#6A7193,#BB645A,#C2666A,#475D5E,#565363,#D06B7C,#D26D54,#C46C96,#619EB2,#415E6B,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4
,,,,#A55B5B ,#457768,#AB6247,#664F37,#5C849F,#488664,#5A9087,#C47846,#465A3E,#794638,#61A455,#5FAE62,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4
,,,,,#5C5030 ,#867631,#925D73,#497E6F,#61532F,#764F38,#569959,#A18336,#8C8B2C,#704A58,#C69133,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A
,,,,,,#4F7B77 ,#4D7078,#55505E,#BC6780,#465F3D,#5E8EAD,#8C84B7,#4A542D,#D16E68,#734B31,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4
,,,,,,,#697C36 ,#525832,#A47535,#6E8AB0,#515266,#C96D92,#D26763,#A59B3B,#61A3CA,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67
,,,,,,,,#804F43 ,#744C54,#8C8738,#785533,#504E64,#917EB4,#7F5637,#57A78F,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67
,,,,,,,,,#59859F ,#D46C63,#8A585E,#579473,#A08187,#5BA184,#95A736,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434
,,,,,,,,,,#B0697C ,#4B5E30,#744F27,#578FB3,#95908C,#DB7CAF,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C
,,,,,,,,,,,#6D9682 ,#AE7D68,#598D7E,#606729,#465F32,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF
,,,,,,,,,,,,#987F8B ,#A08054,#486078,#75506C,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E
,,,,,,,,,,,,,#6C4861 ,#7897D0,#C9908C,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574
,,,,,,,,,,,,,,#CB7599 ,#D17749,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484
,,,,,,,,,,,,,,,#949EA4 ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE
,,,,,,,,,,,,,,,,#4E3532 ,#4D3745,#423B4D,#29404C,#30321D,#553819,#28433F,#523A19,#6B2E31,#42211A,#66374F,#362837,#713753,#334632,#613C5E,#4D491A,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642
,,,,,,,,,,,,,,,,,#444020 ,#2F4625,#603225,#593243,#34445A,#673620,#574163,#34491D,#414867,#3B4E17,#2A5120,#3A4C16,#773137,#30541F,#584569,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A
,,,,,,,,,,,,,,,,,,#5C3423 ,#374220,#65391E,#364B1D,#6A374A,#2A4D43,#2E4961,#375022,#2F4A4F,#6C391E,#73371C,#5F430B,#833722,#703235,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A
,,,,,,,,,,,,,,,,,,,#56354F ,#2D414F,#233B31,#2A4E22,#384F1F,#664019,#713A57,#603E1A,#222913,#304A48,#573D5F,#1F2C2C,#182726,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14
,,,,,,,,,,,,,,,,,,,,#364F23 ,#57324A,#3D435F,#562D38,#2C4C42,#634017,#2E2B15,#71374F,#332B16,#3C1E21,#3F241B,#6F3B18,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C
,,,,,,,,,,,,,,,,,,,,,#622E2F ,#372228,#713326,#222930,#7A2F34,#693030,#284347,#481A1F,#25313A,#4C4319,#5B4547,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42
,,,,,,,,,,,,,,,,,,,,,,#403C18 ,#293947,#3C2C19,#273C42,#322536,#4B4A0C,#324A68,#73371C,#394669,#274D3E,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945
,,,,,,,,,,,,,,,,,,,,,,,#252E17 ,#533E5F,#3F2639,#2C4B31,#404766,#5C4115,#424913,#793139,#3B1B23,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C
,,,,,,,,,,,,,,,,,,,,,,,,#5C3445 ,#2E361F,#284968,#482220,#294A2E,#2F4B64,#1E2E0F,#24263B,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441
,,,,,,,,,,,,,,,,,,,,,,,,,#64403D ,#55456A,#2D4E39,#202A35,#513A1F,#322536,#2B4D1F,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37
,,,,,,,,,,,,,,,,,,,,,,,,,,#2C282A ,#594233,#533E5A,#633A45,#2B4D41,#693550,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905
,,,,,,,,,,,,,,,,,,,,,,,,,,,#46441F ,#713938,#212712,#663C19,#2E280F,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A
,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3B222B ,#2A4E23,#633944,#304A66,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#26544D ,#314B59,#284A51,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#394C2D ,#573D25,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3E3742 ,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#68334D,#68334D,#68334D,#68334D,#68334D
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E4A5F,#2E4A5F,#2E4A5F,#2E4A5F
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#43570A,#43570A,#43570A
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2F1507,#2F1507
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5D4913
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
2 #82635C #597568 #56737C #8B6685 #557849 #9C5F75 #A06074 #7779A3 #9C7095 #70833B #AD7AAE #908B36 #7D444B #405863 #415F49 #A19A68 #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A #B0959A
3 #976253 #737339 #68753C #8B6584 #678644 #518550 #A07434 #618B4A #8D7199 #589A5A #A37DAB #6A9141 #BE7533 #AE81B9 #A890CC #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137 #98C137
4 #9E5E63 #9E5F48 #8C6835 #AB6C44 #554F39 #4B7F5C #9F7536 #B3624F #BA793E #355E52 #528C9E #569555 #CB8340 #C55B65 #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C #D57B3C
5 #4C7473 #4F7480 #61718C #6A7193 #BB645A #C2666A #475D5E #565363 #D06B7C #D26D54 #C46C96 #619EB2 #415E6B #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4 #52BDA4
6 #A55B5B #457768 #AB6247 #664F37 #5C849F #488664 #5A9087 #C47846 #465A3E #794638 #61A455 #5FAE62 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4 #CD88D4
7 #5C5030 #867631 #925D73 #497E6F #61532F #764F38 #569959 #A18336 #8C8B2C #704A58 #C69133 #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A #E3666A
8 #4F7B77 #4D7078 #55505E #BC6780 #465F3D #5E8EAD #8C84B7 #4A542D #D16E68 #734B31 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4 #7E98D4
9 #697C36 #525832 #A47535 #6E8AB0 #515266 #C96D92 #D26763 #A59B3B #61A3CA #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67 #B99B67
10 #804F43 #744C54 #8C8738 #785533 #504E64 #917EB4 #7F5637 #57A78F #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67 #58BD67
11 #59859F #D46C63 #8A585E #579473 #A08187 #5BA184 #95A736 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434 #CEA434
12 #B0697C #4B5E30 #744F27 #578FB3 #95908C #DB7CAF #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C #D6719C
13 #6D9682 #AE7D68 #598D7E #606729 #465F32 #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF #6FABBF
14 #987F8B #A08054 #486078 #75506C #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E #8EA24E
15 #6C4861 #7897D0 #C9908C #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574 #CC8574
16 #CB7599 #D17749 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484 #85A484
17 #949EA4 #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE #BF97BE
18 #4E3532 #4D3745 #423B4D #29404C #30321D #553819 #28433F #523A19 #6B2E31 #42211A #66374F #362837 #713753 #334632 #613C5E #4D491A #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642 #053642
19 #444020 #2F4625 #603225 #593243 #34445A #673620 #574163 #34491D #414867 #3B4E17 #2A5120 #3A4C16 #773137 #30541F #584569 #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A #763B0A
20 #5C3423 #374220 #65391E #364B1D #6A374A #2A4D43 #2E4961 #375022 #2F4A4F #6C391E #73371C #5F430B #833722 #703235 #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A #91315A
21 #56354F #2D414F #233B31 #2A4E22 #384F1F #664019 #713A57 #603E1A #222913 #304A48 #573D5F #1F2C2C #182726 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14 #405A14
22 #364F23 #57324A #3D435F #562D38 #2C4C42 #634017 #2E2B15 #71374F #332B16 #3C1E21 #3F241B #6F3B18 #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C #2E130C
23 #622E2F #372228 #713326 #222930 #7A2F34 #693030 #284347 #481A1F #25313A #4C4319 #5B4547 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42 #075A42
24 #403C18 #293947 #3C2C19 #273C42 #322536 #4B4A0C #324A68 #73371C #394669 #274D3E #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945 #482945
25 #252E17 #533E5F #3F2639 #2C4B31 #404766 #5C4115 #424913 #793139 #3B1B23 #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C #08210C
26 #5C3445 #2E361F #284968 #482220 #294A2E #2F4B64 #1E2E0F #24263B #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441 #804441
27 #64403D #55456A #2D4E39 #202A35 #513A1F #322536 #2B4D1F #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37 #514E37
28 #2C282A #594233 #533E5A #633A45 #2B4D41 #693550 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905 #4C3905
29 #46441F #713938 #212712 #663C19 #2E280F #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A #4F515A
30 #3B222B #2A4E23 #633944 #304A66 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18 #5C2B18
31 #26544D #314B59 #284A51 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727 #1D1727
32 #394C2D #573D25 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870 #6F4870
33 #3E3742 #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A #14370A
34 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41 #5B3C41
35 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237 #732237
36 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59 #393C59
37 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13 #1B1A13
38 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731 #385731
39 #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F #2E2C0F
40 #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C #26585C
41 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53 #743C53
42 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66 #144C66
43 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127 #542127
44 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27 #833A27
45 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21 #0E3B21
46 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33 #892E33
47 #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A #3C202A
48 #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B #00453B
49 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607 #404607
50 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24 #524E24
51 #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C #1B262C
52 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922 #142922
53 #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B #60493B
54 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509 #5E3509
55 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017 #665017
56 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68 #594B68
57 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32 #693E32
58 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52 #1D5E52
59 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48 #172D48
60 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10 #402D10
61 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543 #5E2543
62 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00 #1A2A00
63 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701 #351701
64 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058 #503058
65 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60 #843A60
66 #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C #78491C
67 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551 #4E5551
68 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66 #3B4E66
69 #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D #221A1D
70 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948 #853948
71 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212 #3D1212
72 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706 #2E4706
73 #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C #1B4F2C
74 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101 #1A2101
75 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256 #6A3256
76 #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C #52490C
77 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227 #093227
78 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633 #1C3633
79 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738 #7E4738
80 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07 #392F07
81 #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D #67203D
82 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409 #734409
83 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36 #6D2B36
84 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044 #8B3044
85 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531 #7B2531
86 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124 #6A3124
87 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040 #4C5040
88 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30 #803F30
89 #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F #351F2F
90 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37 #092B37
91 #27564D #27564D #27564D #27564D #27564D #27564D #27564D #27564D #27564D #27564D #27564D
92 #1D2009 #1D2009 #1D2009 #1D2009 #1D2009 #1D2009 #1D2009 #1D2009 #1D2009 #1D2009
93 #6D4053 #6D4053 #6D4053 #6D4053 #6D4053 #6D4053 #6D4053 #6D4053 #6D4053
94 #3A223F #3A223F #3A223F #3A223F #3A223F #3A223F #3A223F #3A223F
95 #2D5834 #2D5834 #2D5834 #2D5834 #2D5834 #2D5834 #2D5834
96 #0F3E4D #0F3E4D #0F3E4D #0F3E4D #0F3E4D #0F3E4D
97 #68334D #68334D #68334D #68334D #68334D
98 #2E4A5F #2E4A5F #2E4A5F #2E4A5F
99 #43570A #43570A #43570A
100 #2F1507 #2F1507
101 #5D4913
@@ -0,0 +1,18 @@
name,dark,hmin,hmax,cmin,cmax,lmin,lmax
Default,FALSE,0,360,0,3,0,1.5
Fancy (light background),FALSE,0,360,0.4,1.2,1,1.5
Fancy (dark background),TRUE,0,360,0.2,1.2,0.1,0.6
Shades,FALSE,0,240,0,0.4,0,1.5
Tarnish,FALSE,0,360,0,0.4,0.4,1.1
Pastel,FALSE,0,360,0,0.9,1,1.5
Pimp,FALSE,0,360,0.9,3,0.4,1
Intense,FALSE,0,360,0.6,3,0.2,1.1
Fluo,TRUE,0,300,1,3,1.1,1.5
Red Roses,TRUE,330,20,0.3,3,0.5,1.5
Ochre Sand,TRUE,20,60,0.3,1.6,0.5,1.5
Yellow Lime,TRUE,60,90,0.3,3,0.5,1.5
Green Mint,TRUE,90,150,0.3,3,0.5,1.5
Ice Cube,TRUE,150,200,0,3,0.5,1.5
Blue Ocean,TRUE,220,260,0.2,2.5,0,0.8
Indigo Night,TRUE,260,290,1.2,3,0.5,1.5
Purple Wine,TRUE,290,330,0,3,0,0.6
1 name dark hmin hmax cmin cmax lmin lmax
2 Default FALSE 0 360 0 3 0 1.5
3 Fancy (light background) FALSE 0 360 0.4 1.2 1 1.5
4 Fancy (dark background) TRUE 0 360 0.2 1.2 0.1 0.6
5 Shades FALSE 0 240 0 0.4 0 1.5
6 Tarnish FALSE 0 360 0 0.4 0.4 1.1
7 Pastel FALSE 0 360 0 0.9 1 1.5
8 Pimp FALSE 0 360 0.9 3 0.4 1
9 Intense FALSE 0 360 0.6 3 0.2 1.1
10 Fluo TRUE 0 300 1 3 1.1 1.5
11 Red Roses TRUE 330 20 0.3 3 0.5 1.5
12 Ochre Sand TRUE 20 60 0.3 1.6 0.5 1.5
13 Yellow Lime TRUE 60 90 0.3 3 0.5 1.5
14 Green Mint TRUE 90 150 0.3 3 0.5 1.5
15 Ice Cube TRUE 150 200 0 3 0.5 1.5
16 Blue Ocean TRUE 220 260 0.2 2.5 0 0.8
17 Indigo Night TRUE 260 290 1.2 3 0.5 1.5
18 Purple Wine TRUE 290 330 0 3 0 0.6
@@ -0,0 +1,101 @@
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
#AECFAB ,#B8C7D5,#CFD172,#80DCCB,#F0A399,#8CE0A2,#C9C6A3,#D9B965,#9CD580,#88DC95,#CE9D54,#D58876,#C4AB52,#D7A2CF,#D18664,#D3DBA3,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632
,#BCD684 ,#D4B8D3,#DEC96A,#A4E18C,#ECACC6,#D1D062,#9ABCDA,#C1AED2,#D18C9D,#94B8D6,#6DDFC2,#A2ACD3,#D1DA60,#69D8E0,#D484B3,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC
,,#83DEC0 ,#D6B6D3,#C5C0E1,#E2B86E,#DEA6C0,#90D897,#DA9762,#7EBFD2,#95DB8A,#D4DD68,#78E3AD,#64A797,#AEDE7C,#699BAB,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B
,,,#A4E18C ,#7CDDC9,#7DDCD6,#76D9C1,#E59B81,#AECDB9,#D5D96A,#66E0C9,#B6ABD6,#D8897C,#DA8769,#D094BD,#D1953B,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766
,,,,#DDCD69 ,#B1C5E4,#9CC2DA,#6DD7CD,#5BDBB3,#D4D1B1,#D296BC,#D6D8A9,#D5D4A5,#D7D5B5,#CBD7C8,#A6DC5C,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A
,,,,,#CBDE70 ,#E19F6B,#C7CAB3,#DC939D,#D79064,#D6D864,#78C2D5,#81D6DA,#82A564,#709B65,#DC7468,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC
,,,,,,#98D988 ,#DCA7C7,#D0C75E,#BAABCF,#CEDFC1,#D6A257,#AFE07C,#74E4AF,#7DE2AB,#5EDEA1,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C
,,,,,,,#C1DA6A ,#73C2D2,#729F88,#D88473,#8DD98A,#D693B4,#C9A457,#8390A9,#899A49,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D
,,,,,,,,#C3B98D ,#6AE0CF,#A3A96C,#71A188,#81A365,#89A2C9,#A1917F,#6D9E7C,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61
,,,,,,,,,#A0A05B ,#69A390,#9B9E5A,#BFB0AE,#74D6DE,#D6CF93,#BA9092,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593
,,,,,,,,,,#C2A39F ,#C4BDBA,#6CA493,#D48897,#BC984B,#989DD2,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95
,,,,,,,,,,,#CE8EAA ,#E0DE61,#A59687,#DBD55C,#D1CED8,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40
,,,,,,,,,,,,#CD925B ,#BDE290,#D2838A,#7ADAD5,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E
,,,,,,,,,,,,,#C9C9D9 ,#54A29C,#C19366,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71
,,,,,,,,,,,,,,#BAC1E5 ,#DCD44D,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F
,,,,,,,,,,,,,,,#88D379 ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E
,,,,,,,,,,,,,,,,#D0E6BE ,#D3E99E,#E0DBDE,#E1E881,#E0E981,#E4E2B6,#E6E688,#BFEEB8,#F3D5AD,#EAE08A,#E8E589,#DFE4DE,#F0DB7A,#EAE37E,#6AF7F6,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB
,,,,,,,,,,,,,,,,,#C9E2E0 ,#DCE896,#DADBE6,#DFDBE6,#E2F07B,#EECEE8,#E7D6E7,#A1EBE3,#DFD2F5,#EDCEEC,#E0EB81,#DFD2F5,#E9CEF5,#ECE379,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A
,,,,,,,,,,,,,,,,,,#A3EED2 ,#9DEFD1,#9CECE0,#D9DBEA,#9EEFD6,#EAE37E,#C2F192,#89F0D3,#89F1CA,#85F3C4,#85F2C7,#8DF3BA,#E5D1EF,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9
,,,,,,,,,,,,,,,,,,,#DAE6AD ,#EDDDAD,#9EEFD6,#F6D4A8,#B8E8E5,#DCD4F0,#A3E4F3,#F3D4B0,#8CECE9,#E0E3C8,#E8E1C9,#A9F0A9,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5
,,,,,,,,,,,,,,,,,,,,#BAEFB0 ,#BCEFA0,#B6F0A0,#EDDEB0,#9FF1BC,#EDDCB3,#D0E7E6,#EDCEEC,#B7F09A,#98ECE8,#C1E8EA,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9
,,,,,,,,,,,,,,,,,,,,,#EBDF80 ,#C6E1EF,#87F1CE,#EAE37E,#BCEF9C,#91EAEE,#D9E8BA,#B8E6ED,#C2F192,#DEE7B8,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9
,,,,,,,,,,,,,,,,,,,,,,#DEE5C3 ,#CAF289,#D5E9BD,#EDDADC,#C2F192,#B4EFA3,#EAE1A5,#C9EDB7,#E8DED2,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499
,,,,,,,,,,,,,,,,,,,,,,,#C5ED9E ,#E0E2DC,#C9EADD,#BFEEB8,#F2D3B6,#C4EEBA,#BDDCF5,#85F2C7,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC
,,,,,,,,,,,,,,,,,,,,,,,,#E4E7A6 ,#C4EEBA,#C4DCF5,#BDDCF5,#84EEE7,#F6D4A8,#D0EF93,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B
,,,,,,,,,,,,,,,,,,,,,,,,,#E5EE79 ,#E3E6BB,#EAE095,#EED8D9,#ECD2DB,#BCEDCA,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B
,,,,,,,,,,,,,,,,,,,,,,,,,,#D8E6D5 ,#BEECDD,#DBEE84,#B6EBD2,#F2DA9F,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF
,,,,,,,,,,,,,,,,,,,,,,,,,,,#ADEEC7 ,#B6EBD2,#E4E7A6,#9DDEF6,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB
,,,,,,,,,,,,,,,,,,,,,,,,,,,,#96F2AC ,#D9E8E0,#97EBDF,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A3F0C7 ,#87EBF0,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#76EFDF ,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7D596,#C7D596,#C7D596,#C7D596,#C7D596
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DFCF81,#DFCF81,#DFCF81,#DFCF81
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEDA77,#DEDA77,#DEDA77
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEDACC,#DEDACC
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F5C8F4
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
2 #AECFAB #B8C7D5 #CFD172 #80DCCB #F0A399 #8CE0A2 #C9C6A3 #D9B965 #9CD580 #88DC95 #CE9D54 #D58876 #C4AB52 #D7A2CF #D18664 #D3DBA3 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632 #AA8632
3 #BCD684 #D4B8D3 #DEC96A #A4E18C #ECACC6 #D1D062 #9ABCDA #C1AED2 #D18C9D #94B8D6 #6DDFC2 #A2ACD3 #D1DA60 #69D8E0 #D484B3 #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC #6593BC
4 #83DEC0 #D6B6D3 #C5C0E1 #E2B86E #DEA6C0 #90D897 #DA9762 #7EBFD2 #95DB8A #D4DD68 #78E3AD #64A797 #AEDE7C #699BAB #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B #D2708B
5 #A4E18C #7CDDC9 #7DDCD6 #76D9C1 #E59B81 #AECDB9 #D5D96A #66E0C9 #B6ABD6 #D8897C #DA8769 #D094BD #D1953B #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766 #54A766
6 #DDCD69 #B1C5E4 #9CC2DA #6DD7CD #5BDBB3 #D4D1B1 #D296BC #D6D8A9 #D5D4A5 #D7D5B5 #CBD7C8 #A6DC5C #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A #7B7C6A
7 #CBDE70 #E19F6B #C7CAB3 #DC939D #D79064 #D6D864 #78C2D5 #81D6DA #82A564 #709B65 #DC7468 #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC #BB82BC
8 #98D988 #DCA7C7 #D0C75E #BAABCF #CEDFC1 #D6A257 #AFE07C #74E4AF #7DE2AB #5EDEA1 #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C #915E3C
9 #C1DA6A #73C2D2 #729F88 #D88473 #8DD98A #D693B4 #C9A457 #8390A9 #899A49 #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D #93A53D
10 #C3B98D #6AE0CF #A3A96C #71A188 #81A365 #89A2C9 #A1917F #6D9E7C #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61 #DA6F61
11 #A0A05B #69A390 #9B9E5A #BFB0AE #74D6DE #D6CF93 #BA9092 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593 #539593
12 #C2A39F #C4BDBA #6CA493 #D48897 #BC984B #989DD2 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95 #8A7B95
13 #CE8EAA #E0DE61 #A59687 #DBD55C #D1CED8 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40 #D37F40
14 #CD925B #BDE290 #D2838A #7ADAD5 #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E #97636E
15 #C9C9D9 #54A29C #C19366 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71 #B98F71
16 #BAC1E5 #DCD44D #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F #76823F
17 #88D379 #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E #55865E
18 #D0E6BE #D3E99E #E0DBDE #E1E881 #E0E981 #E4E2B6 #E6E688 #BFEEB8 #F3D5AD #EAE08A #E8E589 #DFE4DE #F0DB7A #EAE37E #6AF7F6 #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB #BBDBDB
19 #C9E2E0 #DCE896 #DADBE6 #DFDBE6 #E2F07B #EECEE8 #E7D6E7 #A1EBE3 #DFD2F5 #EDCEEC #E0EB81 #DFD2F5 #E9CEF5 #ECE379 #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A #FFE57A
20 #A3EED2 #9DEFD1 #9CECE0 #D9DBEA #9EEFD6 #EAE37E #C2F192 #89F0D3 #89F1CA #85F3C4 #85F2C7 #8DF3BA #E5D1EF #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9 #A9F2A9
21 #DAE6AD #EDDDAD #9EEFD6 #F6D4A8 #B8E8E5 #DCD4F0 #A3E4F3 #F3D4B0 #8CECE9 #E0E3C8 #E8E1C9 #A9F0A9 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5 #FBCBF5
22 #BAEFB0 #BCEFA0 #B6F0A0 #EDDEB0 #9FF1BC #EDDCB3 #D0E7E6 #EDCEEC #B7F09A #98ECE8 #C1E8EA #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9 #F1C7A9
23 #EBDF80 #C6E1EF #87F1CE #EAE37E #BCEF9C #91EAEE #D9E8BA #B8E6ED #C2F192 #DEE7B8 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9 #9AF5D9
24 #DEE5C3 #CAF289 #D5E9BD #EDDADC #C2F192 #B4EFA3 #EAE1A5 #C9EDB7 #E8DED2 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499 #C9D499
25 #C5ED9E #E0E2DC #C9EADD #BFEEB8 #F2D3B6 #C4EEBA #BDDCF5 #85F2C7 #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC #FDD8DC
26 #E4E7A6 #C4EEBA #C4DCF5 #BDDCF5 #84EEE7 #F6D4A8 #D0EF93 #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B #E1FB9B
27 #E5EE79 #E3E6BB #EAE095 #EED8D9 #ECD2DB #BCEDCA #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B #F2CE8B
28 #D8E6D5 #BEECDD #DBEE84 #B6EBD2 #F2DA9F #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF #D6F9CF
29 #ADEEC7 #B6EBD2 #E4E7A6 #9DDEF6 #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB #FAFAEB
30 #96F2AC #D9E8E0 #97EBDF #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8 #C7DBF8
31 #A3F0C7 #87EBF0 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7 #D0D4B7
32 #76EFDF #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4 #AEF5F4
33 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483 #D9D483
34 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9 #B1DFC9
35 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1 #92E2B1
36 #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA #E1E0EA
37 #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE #D8F6AE
38 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7 #F5F3B7
39 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0 #DDCDA0
40 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2 #FAF4A2
41 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0 #FCCBC0
42 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3 #DFD0C3
43 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6 #A7D4E6
44 #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC #8AF6EC
45 #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B #B2DC9B
46 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975 #D8D975
47 #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC #96DBBC
48 #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC #E8E1FC
49 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3 #E6EFD3
50 #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED #E0FBED
51 #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A #F3C99A
52 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092 #DDD092
53 #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E #BEF09E
54 #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE #94DECE
55 #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE #C7FCEE
56 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986 #C9D986
57 #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED #FCD2ED
58 #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB #F0C2CB
59 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686 #C7E686
60 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6 #F1D6B6
61 #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B #98DD9B
62 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1 #C1D5B1
63 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0 #A6D6D0
64 #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB #95E8AB
65 #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE #C5E7EE
66 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385 #E7D385
67 #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E #C9D48E
68 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9 #D1D5D9
69 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384 #FDE384
70 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0 #CBFED0
71 #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD #8FEFDD
72 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7 #DCCAC7
73 #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A #E8EE9A
74 #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC #D9D7CC
75 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6 #D8FAC6
76 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7 #E4ECC7
77 #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF #B0FBDF
78 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0 #F0C3E0
79 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8 #9BE0B8
80 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0 #BCD8D0
81 #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC #EAD4AC
82 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499 #D5D499
83 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0 #DEF1E0
84 #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD #A1ECBD
85 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8 #DCEFA8
86 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7 #A5D6D7
87 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9 #F6F2E9
88 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3 #B0EFF3
89 #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD #92ECCD
90 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7 #BCF5A7
91 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789 #CCD789
92 #F7E37B #F7E37B #F7E37B #F7E37B #F7E37B #F7E37B #F7E37B #F7E37B #F7E37B #F7E37B
93 #99E3A7 #99E3A7 #99E3A7 #99E3A7 #99E3A7 #99E3A7 #99E3A7 #99E3A7 #99E3A7
94 #DECDA5 #DECDA5 #DECDA5 #DECDA5 #DECDA5 #DECDA5 #DECDA5 #DECDA5
95 #EAD1AF #EAD1AF #EAD1AF #EAD1AF #EAD1AF #EAD1AF #EAD1AF
96 #F6F7EF #F6F7EF #F6F7EF #F6F7EF #F6F7EF #F6F7EF
97 #C7D596 #C7D596 #C7D596 #C7D596 #C7D596
98 #DFCF81 #DFCF81 #DFCF81 #DFCF81
99 #DEDA77 #DEDA77 #DEDA77
100 #DEDACC #DEDACC
101 #F5C8F4
@@ -5,15 +5,15 @@
<artifactId>gephi-parent</artifactId>
<groupId>org.gephi</groupId>
<version>0.9-SNAPSHOT</version>
<relativePath>../..</relativePath>
<relativePath>../..</relativePath>
</parent>
<groupId>org.gephi</groupId>
<artifactId>partition-plugin-ui</artifactId>
<artifactId>appearance-plugin-ui</artifactId>
<version>0.9-SNAPSHOT</version>
<packaging>nbm</packaging>
<name>PartitionPluginUI</name>
<name>AppearancePluginUI</name>
<dependencies>
<dependency>
@@ -25,17 +25,25 @@
<artifactId>org-openide-util</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>partition-api</artifactId>
<artifactId>org-openide-dialogs</artifactId>
<groupId>org.netbeans.api</groupId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>partition-plugin</artifactId>
<artifactId>appearance-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>appearance-plugin</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>utils</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ui-utils</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ui-components</artifactId>
@@ -53,6 +61,7 @@
<artifactId>nbm-maven-plugin</artifactId>
<configuration>
<publicPackages>
<publicPackage>org.gephi.ui.appearance.plugin.category</publicPackage>
</publicPackages>
</configuration>
</plugin>
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.6" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Properties>
<Property name="opaque" type="boolean" value="false"/>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-52,0,0,1,28"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="centerScrollPane">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="null" type="code"/>
</Property>
<Property name="opaque" type="boolean" value="false"/>
<Property name="viewportView" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
<ComponentRef name="null"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="4" insetsLeft="10" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="backPanel">
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="table">
<Properties>
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
<Table columnCount="0" rowCount="0"/>
</Property>
<Property name="opaque" type="boolean" value="false"/>
<Property name="rowHeight" type="int" value="18"/>
<Property name="rowMargin" type="int" value="4"/>
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
<JTableSelectionModel selectionMode="0"/>
</Property>
<Property name="showHorizontalLines" type="boolean" value="false"/>
<Property name="showVerticalLines" type="boolean" value="false"/>
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="null" type="code"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Form>
@@ -0,0 +1,428 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.AbstractCellEditor;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import net.java.dev.colorchooser.ColorChooser;
import org.gephi.appearance.api.PartitionFunction;
import org.gephi.appearance.plugin.palette.Palette;
import org.gephi.appearance.plugin.palette.PaletteManager;
import org.gephi.ui.appearance.plugin.palette.PaletteGeneratorPanel;
import org.gephi.ui.components.PaletteIcon;
import org.gephi.ui.utils.UIUtils;
import org.jdesktop.swingx.JXHyperlink;
import org.jdesktop.swingx.JXTitledSeparator;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.util.NbBundle;
/**
*
* @author Mathieu Bastian
*/
public class PartitionColorTransformerPanel extends javax.swing.JPanel {
private PalettePopupButton palettePopupButton;
private PartitionFunction function;
private List<Object> values;
public PartitionColorTransformerPanel() {
initComponents();
palettePopupButton = new PalettePopupButton();
if (UIUtils.isAquaLookAndFeel()) {
backPanel.setBackground(UIManager.getColor("NbExplorerView.background"));
}
}
public JButton getPaletteButton() {
return palettePopupButton;
}
public void setup(PartitionFunction function) {
this.function = function;
NumberFormat formatter = NumberFormat.getPercentInstance();
formatter.setMaximumFractionDigits(2);
values = new ArrayList();
for (Object value : function.getPartition().getValues()) {
values.add(value);
}
Collections.sort(values, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
float p1 = PartitionColorTransformerPanel.this.function.getPartition().percentage(o1);
float p2 = PartitionColorTransformerPanel.this.function.getPartition().percentage(o2);
return p1 > p2 ? -1 : p1 < p2 ? 1 : 0;
}
});
//Model
String[] columnNames = new String[]{"Color", "Partition", "Percentage"};
DefaultTableModel model = new DefaultTableModel(columnNames, values.size()) {
@Override
public boolean isCellEditable(int row, int column) {
return column == 0;
}
};
table.setModel(model);
TableColumn partCol = table.getColumnModel().getColumn(1);
partCol.setCellRenderer(new TextRenderer());
TableColumn percCol = table.getColumnModel().getColumn(2);
percCol.setCellRenderer(new TextRenderer());
percCol.setPreferredWidth(60);
percCol.setMaxWidth(60);
TableColumn colorCol = table.getColumnModel().getColumn(0);
colorCol.setCellEditor(new ColorChooserEditor());
colorCol.setCellRenderer(new ColorChooserRenderer());
colorCol.setPreferredWidth(16);
colorCol.setMaxWidth(16);
for (int j = 0; j < values.size(); j++) {
Object value = values.get(j);
String displayName = value == null ? "null" : value.toString();
float percentage = function.getPartition().percentage(value);
model.setValueAt(value, j, 0);
model.setValueAt(displayName, j, 1);
String perc = "(" + formatter.format(percentage) + ")";
model.setValueAt(perc, j, 2);
}
}
private void applyPalette(Palette palette) {
PaletteManager.getInstance().addRecentPalette(palette);
Color[] colors = palette.getColors();
for (int i = 0; i < values.size(); i++) {
Object val = values.get(i);
Color col = colors[i];
function.getPartition().setColor(val, col);
}
table.revalidate();
table.repaint();
}
private void applyColor(Color col) {
for (int i = 0; i < values.size(); i++) {
Object val = values.get(i);
function.getPartition().setColor(val, col);
}
table.revalidate();
table.repaint();
}
class ColorChooserRenderer extends JLabel implements TableCellRenderer {
public ColorChooserRenderer() {
setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Color c = function.getPartition().getColor(value);
setBackground(c);
return this;
}
}
class TextRenderer extends JLabel implements TableCellRenderer {
private EmptyIcon emptyIcon;
public TextRenderer() {
setFont(table.getFont());
emptyIcon = new EmptyIcon();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((String) value);
if (column == 1) {
setIcon(emptyIcon);
} else {
setIcon(null);
}
return this;
}
}
class EmptyIcon implements Icon {
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
}
@Override
public int getIconWidth() {
return 6;
}
@Override
public int getIconHeight() {
return 6;
}
}
class ColorChooserEditor extends AbstractCellEditor implements TableCellEditor {
private final ColorChooser delegate;
Object currentValue;
public ColorChooserEditor() {
delegate = new ColorChooser();
delegate.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(ColorChooser.PROP_COLOR)) {
function.getPartition().setColor(currentValue, (Color) evt.getNewValue());
}
}
});
}
@Override
public Object getCellEditorValue() {
return currentValue;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column) {
currentValue = value;
return delegate;
}
}
class PalettePopupButton extends JXHyperlink {
private final PaletteManager paletteManager;
public PalettePopupButton() {
setText(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.paletteButton"));
setClickedColor(new Color(0, 51, 255));
setFocusPainted(false);
setFocusable(false);
paletteManager = PaletteManager.getInstance();
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int size = function.getPartition().size();
JPopupMenu menu = createPopup(size);
menu.show(PalettePopupButton.this, 0, getHeight());
}
});
}
private JPopupMenu createPopup(final int colorsCount) {
JPopupMenu menu = new JPopupMenu();
menu.add(new JXTitledSeparator(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.recent")));
Collection<Palette> recentPalettes = paletteManager.getRecentPalettes();
if (recentPalettes.isEmpty()) {
menu.add("<html><i>" + NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.norecent") + "</i></html>");
} else {
for (Palette pl : recentPalettes) {
menu.add(new PaletteMenuItem(pl, colorsCount));
}
}
menu.add(new JXTitledSeparator(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.standard")));
JMenu lightPalette = new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.light"));
for (Palette pl : paletteManager.getWhiteBackgroudPalette(colorsCount)) {
lightPalette.add(new PaletteMenuItem(pl, colorsCount));
}
menu.add(lightPalette);
JMenu darkPalette = new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.dark"));
for (Palette pl : paletteManager.getBlackBackgroudPalette(colorsCount)) {
darkPalette.add(new PaletteMenuItem(pl, colorsCount));
}
menu.add(darkPalette);
JMenuItem allBlack = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allblack"));
allBlack.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
applyColor(Color.BLACK);
}
});
menu.add(allBlack);
JMenuItem allWhite = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allwhite"));
allWhite.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
applyColor(Color.WHITE);
}
});
menu.add(allWhite);
JMenuItem generate = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.generate"));
generate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PaletteGeneratorPanel pgn = new PaletteGeneratorPanel();
pgn.setup(colorsCount);
NotifyDescriptor nd = new NotifyDescriptor(pgn,
NbBundle.getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.generatePalettePanel.title"),
NotifyDescriptor.OK_CANCEL_OPTION,
NotifyDescriptor.DEFAULT_OPTION, null, null);
if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.OK_OPTION) {
Palette pl = pgn.getSelectedPalette();
if (pl != null) {
applyPalette(pl);
}
}
}
});
menu.add(generate);
return menu;
}
}
class PaletteMenuItem extends JMenuItem implements ActionListener {
private final Palette palette;
public PaletteMenuItem(Palette palette, int max) {
super(new PaletteIcon(palette.getColors(), max));
this.palette = palette;
addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
applyPalette(palette);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
centerScrollPane = new javax.swing.JScrollPane();
backPanel = new javax.swing.JPanel();
table = new javax.swing.JTable();
setOpaque(false);
setLayout(new java.awt.GridBagLayout());
centerScrollPane.setBorder(null);
centerScrollPane.setOpaque(false);
centerScrollPane.setViewportView(null);
backPanel.setLayout(new java.awt.GridBagLayout());
table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
table.setOpaque(false);
table.setRowHeight(18);
table.setRowMargin(4);
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
table.setTableHeader(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
backPanel.add(table, gridBagConstraints);
centerScrollPane.setViewportView(backPanel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 10, 0, 0);
add(centerScrollPane, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel backPanel;
private javax.swing.JScrollPane centerScrollPane;
private javax.swing.JTable table;
// End of variables declaration//GEN-END:variables
}
@@ -0,0 +1,107 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.PartitionFunction;
import org.gephi.appearance.plugin.PartitionElementColorTransformer;
import org.gephi.appearance.spi.PartitionTransformer;
import org.gephi.appearance.spi.TransformerCategory;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = TransformerUI.class, position = 200)
public class PartitionElementColorTransformerUI implements TransformerUI {
private PartitionColorTransformerPanel panel;
@Override
public TransformerCategory getCategory() {
return DefaultCategory.COLOR;
}
@Override
public String getDisplayName() {
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name");
}
@Override
public Icon getIcon() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public synchronized JPanel getPanel(Function function) {
if (panel == null) {
panel = new PartitionColorTransformerPanel();
}
panel.setup((PartitionFunction) function);
return panel;
}
@Override
public synchronized AbstractButton[] getControlButton() {
if (panel == null) {
panel = new PartitionColorTransformerPanel();
}
return new AbstractButton[]{panel.getPaletteButton()};
}
@Override
public Class<? extends PartitionTransformer> getTransformerClass() {
return PartitionElementColorTransformer.class;
}
}
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[225, 114]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="labelColor" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="gradientPanel" min="-2" pref="160" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="colorSwatchToolbar" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="colorSwatchToolbar" alignment="0" min="-2" pref="22" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="labelColor" min="-2" pref="20" max="-2" attributes="1"/>
<Component id="gradientPanel" min="-2" pref="17" max="-2" attributes="1"/>
</Group>
</Group>
</Group>
<EmptySpace pref="88" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="labelColor">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="RankingColorTransformerPanel.labelColor.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Container class="javax.swing.JPanel" name="gradientPanel">
<Properties>
<Property name="opaque" type="boolean" value="false"/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
</Container>
<Container class="javax.swing.JToolBar" name="colorSwatchToolbar">
<Properties>
<Property name="floatable" type="boolean" value="false"/>
<Property name="rollover" type="boolean" value="true"/>
<Property name="opaque" type="boolean" value="false"/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/>
<SubComponents>
<Component class="javax.swing.JButton" name="colorSwatchButton">
<Properties>
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
<Image iconType="3" name="/org/gephi/ui/appearance/plugin/resources/color-swatch.png"/>
</Property>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="iconTextGap" type="int" value="0"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[0, 0, 0, 0]"/>
</Property>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>
@@ -0,0 +1,340 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.appearance.api.RankingFunction;
import org.gephi.appearance.plugin.RankingElementColorTransformer;
import org.gephi.ui.components.PaletteIcon;
import org.gephi.ui.components.gradientslider.GradientSlider;
import org.gephi.utils.PaletteUtils;
import org.gephi.utils.PaletteUtils.Palette;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
/**
* @author Mathieu Bastian
*/
public class RankingColorTransformerPanel extends javax.swing.JPanel {
private RankingElementColorTransformer colorTransformer;
private GradientSlider gradientSlider;
private final RecentPalettes recentPalettes;
public RankingColorTransformerPanel() {
initComponents();
this.recentPalettes = new RecentPalettes();
}
public void setup(RankingFunction function) {
colorTransformer = (RankingElementColorTransformer) function.getTransformer();
final String POSITIONS = "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_positions";
final String COLORS = "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_colors";
float[] positionsStart = colorTransformer.getColorPositions();
Color[] colorsStart = colorTransformer.getColors();
try {
positionsStart = deserializePositions(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(POSITIONS, serializePositions(positionsStart)));
colorsStart = deserializeColors(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(COLORS, serializeColors(colorsStart)));
colorTransformer.setColorPositions(positionsStart);
colorTransformer.setColors(colorsStart);
} catch (Exception e) {
e.printStackTrace();
}
//Gradient
gradientSlider = new GradientSlider(GradientSlider.HORIZONTAL, positionsStart, colorsStart);
gradientSlider.putClientProperty("GradientSlider.includeOpacity", "false");
gradientSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Color[] colors = gradientSlider.getColors();
float[] positions = gradientSlider.getThumbPositions();
colorTransformer.setColors(Arrays.copyOf(colors, colors.length));
colorTransformer.setColorPositions(Arrays.copyOf(positions, positions.length));
try {
NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(POSITIONS, serializePositions(positions));
NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(COLORS, serializeColors(colors));
} catch (Exception ex) {
ex.printStackTrace();
}
// prepareGradientTooltip();
}
});
gradientPanel.add(gradientSlider, BorderLayout.CENTER);
// prepareGradientTooltip();
//Context
// setComponentPopupMenu(getPalettePopupMenu());
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
if (evt.isPopupTrigger()) {
JPopupMenu popupMenu = getPalettePopupMenu();
popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
@Override
public void mouseReleased(MouseEvent evt) {
if (evt.isPopupTrigger()) {
JPopupMenu popupMenu = getPalettePopupMenu();
popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
});
//Color Swatch
colorSwatchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
JPopupMenu popupMenu = getPalettePopupMenu();
popupMenu.show(colorSwatchToolbar, -popupMenu.getPreferredSize().width, 0);
}
});
}
// private void prepareGradientTooltip() {
// StringBuilder sb = new StringBuilder();
// final double min = ((Number) ranking.unNormalize(colorTransformer.getLowerBound())).doubleValue();
// final double max = ((Number) ranking.unNormalize(colorTransformer.getUpperBound())).doubleValue();
// final double range = max - min;
// float[] positions = gradientSlider.getThumbPositions();
// for (int i = 0; i < positions.length - 1; i++) {
// sb.append(min + range * positions[i]);
// sb.append(", ");
// }
// sb.append(min + range * positions[positions.length - 1]);
// gradientSlider.setToolTipText(sb.toString());
// }
private JPopupMenu getPalettePopupMenu() {
JPopupMenu popupMenu = new JPopupMenu();
JMenu defaultMenu = new JMenu(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.default"));
for (Palette p : PaletteUtils.getSequencialPalettes()) {
final Palette p3 = PaletteUtils.get3ClassPalette(p);
JMenuItem item = new JMenuItem(new PaletteIcon(p3.getColors()));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gradientSlider.setValues(p3.getPositions(), p3.getColors());
}
});
defaultMenu.add(item);
}
for (Palette p : PaletteUtils.getDivergingPalettes()) {
final Palette p3 = PaletteUtils.get3ClassPalette(p);
JMenuItem item = new JMenuItem(new PaletteIcon(p3.getColors()));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gradientSlider.setValues(p3.getPositions(), p3.getColors());
}
});
defaultMenu.add(item);
}
popupMenu.add(defaultMenu);
//Invert
JMenuItem invertItem = new JMenuItem(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.invert"));
invertItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gradientSlider.setValues(invert(gradientSlider.getThumbPositions()), invert(gradientSlider.getColors()));
}
});
popupMenu.add(invertItem);
//Recent
JMenu recentMenu = new JMenu(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.recent"));
for (final RankingElementColorTransformer.LinearGradient gradient : recentPalettes.getPalettes()) {
JMenuItem item = new JMenuItem(new PaletteIcon(gradient.getColors()));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gradientSlider.setValues(gradient.getPositions(), gradient.getColors());
}
});
recentMenu.add(item);
}
popupMenu.add(recentMenu);
return popupMenu;
}
private void addRecentPalette() {
RankingElementColorTransformer.LinearGradient gradient = colorTransformer.getLinearGradient();
recentPalettes.add(gradient);
}
private Color[] invert(Color[] source) {
int len = source.length;
Color[] res = new Color[len];
for (int i = 0; i < len; i++) {
res[i] = source[len - 1 - i];
}
return res;
}
private float[] invert(float[] source) {
int len = source.length;
float[] res = new float[len];
for (int i = 0; i < len; i++) {
res[i] = 1 - source[len - 1 - i];
}
return res;
}
private byte[] serializePositions(float[] positions) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(positions);
out.close();
return bos.toByteArray();
}
private float[] deserializePositions(byte[] positions) throws Exception {
ByteArrayInputStream bis = new ByteArrayInputStream(positions);
ObjectInputStream in = new ObjectInputStream(bis);
float[] array = (float[]) in.readObject();
in.close();
return array;
}
private byte[] serializeColors(Color[] colors) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(colors);
out.close();
return bos.toByteArray();
}
private Color[] deserializeColors(byte[] colors) throws Exception {
ByteArrayInputStream bis = new ByteArrayInputStream(colors);
ObjectInputStream in = new ObjectInputStream(bis);
Color[] array = (Color[]) in.readObject();
in.close();
return array;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
labelColor = new javax.swing.JLabel();
gradientPanel = new javax.swing.JPanel();
colorSwatchToolbar = new javax.swing.JToolBar();
colorSwatchButton = new javax.swing.JButton();
setPreferredSize(new java.awt.Dimension(225, 114));
labelColor.setText(org.openide.util.NbBundle.getMessage(RankingColorTransformerPanel.class, "RankingColorTransformerPanel.labelColor.text")); // NOI18N
gradientPanel.setOpaque(false);
gradientPanel.setLayout(new java.awt.BorderLayout());
colorSwatchToolbar.setFloatable(false);
colorSwatchToolbar.setRollover(true);
colorSwatchToolbar.setOpaque(false);
colorSwatchButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/color-swatch.png"))); // NOI18N
colorSwatchButton.setFocusable(false);
colorSwatchButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
colorSwatchButton.setIconTextGap(0);
colorSwatchButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
colorSwatchButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
colorSwatchToolbar.add(colorSwatchButton);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(labelColor)
.addGap(18, 18, 18)
.addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(88, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton colorSwatchButton;
private javax.swing.JToolBar colorSwatchToolbar;
private javax.swing.JPanel gradientPanel;
private javax.swing.JLabel labelColor;
// End of variables declaration//GEN-END:variables
}
@@ -0,0 +1,104 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.RankingFunction;
import org.gephi.appearance.plugin.RankingElementColorTransformer;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.TransformerCategory;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = TransformerUI.class, position = 200)
public class RankingElementColorTransformerUI implements TransformerUI {
private RankingColorTransformerPanel panel;
@Override
public TransformerCategory getCategory() {
return DefaultCategory.COLOR;
}
@Override
public Icon getIcon() {
return null;
}
@Override
public String getDisplayName() {
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name");
}
@Override
public String getDescription() {
return null;
}
@Override
public synchronized JPanel getPanel(Function function) {
if (panel == null) {
panel = new RankingColorTransformerPanel();
}
panel.setup((RankingFunction) function);
return panel;
}
@Override
public synchronized AbstractButton[] getControlButton() {
return null;
}
@Override
public Class<? extends RankingTransformer> getTransformerClass() {
return RankingElementColorTransformer.class;
}
}
@@ -0,0 +1,104 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.RankingFunction;
import org.gephi.appearance.plugin.RankingNodeSizeTransformer;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.TransformerCategory;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = TransformerUI.class, position = 300)
public class RankingElementSizeTransformerUI implements TransformerUI {
private RankingSizeTransformerPanel panel;
@Override
public TransformerCategory getCategory() {
return DefaultCategory.SIZE;
}
@Override
public Icon getIcon() {
return null;
}
@Override
public String getDisplayName() {
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name");
}
@Override
public String getDescription() {
return null;
}
@Override
public synchronized JPanel getPanel(Function function) {
if (panel == null) {
panel = new RankingSizeTransformerPanel();
}
panel.setup((RankingFunction) function);
return panel;
}
@Override
public synchronized AbstractButton[] getControlButton() {
return null;
}
@Override
public Class<? extends RankingTransformer> getTransformerClass() {
return RankingNodeSizeTransformer.class;
}
}
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[225, 114]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="labelMinSize" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
<Component id="minSize" min="-2" pref="55" max="-2" attributes="1"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="labelMaxSize" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="maxSize" min="-2" pref="55" max="-2" attributes="1"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="minSize" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="maxSize" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="labelMaxSize" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="labelMinSize" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="80" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="labelMinSize">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="RankingSizeTransformerPanel.labelMinSize.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JSpinner" name="minSize">
<Properties>
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
<SpinnerModel initial="1.0" minimum="0.1" numberType="java.lang.Float" stepSize="0.5" type="number"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="labelMaxSize">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="RankingSizeTransformerPanel.labelMaxSize.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JSpinner" name="maxSize">
<Properties>
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
<SpinnerModel initial="4.0" minimum="0.5" numberType="java.lang.Float" stepSize="0.5" type="number"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Form>
@@ -0,0 +1,148 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.appearance.api.RankingFunction;
import org.gephi.appearance.plugin.RankingNodeSizeTransformer;
import org.openide.util.NbPreferences;
/**
*
* @author Mathieu Bastian
*/
public class RankingSizeTransformerPanel extends javax.swing.JPanel {
private RankingNodeSizeTransformer sizeTransformer;
public RankingSizeTransformerPanel() {
initComponents();
}
public void setup(RankingFunction function) {
sizeTransformer = (RankingNodeSizeTransformer) function.getTransformer();
final String MIN_SIZE = "RankingSizeTransformerPanel_" + sizeTransformer.getClass().getSimpleName() + "_min";
final String MAX_SIZE = "RankingSizeTransformerPanel_" + sizeTransformer.getClass().getSimpleName() + "_max";
float minSizeStart = NbPreferences.forModule(RankingSizeTransformerPanel.class).getFloat(MIN_SIZE, sizeTransformer.getMinSize());
float maxSizeStart = NbPreferences.forModule(RankingSizeTransformerPanel.class).getFloat(MAX_SIZE, sizeTransformer.getMaxSize());
sizeTransformer.setMinSize(minSizeStart);
sizeTransformer.setMaxSize(maxSizeStart);
minSize.setValue(minSizeStart);
maxSize.setValue(maxSizeStart);
minSize.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
sizeTransformer.setMinSize((Float) minSize.getValue());
NbPreferences.forModule(RankingSizeTransformerPanel.class).putFloat(MIN_SIZE, (Float) minSize.getValue());
}
});
maxSize.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
sizeTransformer.setMaxSize((Float) maxSize.getValue());
NbPreferences.forModule(RankingSizeTransformerPanel.class).putFloat(MAX_SIZE, (Float) maxSize.getValue());
}
});
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
labelMinSize = new javax.swing.JLabel();
minSize = new javax.swing.JSpinner();
labelMaxSize = new javax.swing.JLabel();
maxSize = new javax.swing.JSpinner();
setPreferredSize(new java.awt.Dimension(225, 114));
labelMinSize.setText(org.openide.util.NbBundle.getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMinSize.text")); // NOI18N
minSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f)));
labelMaxSize.setText(org.openide.util.NbBundle.getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMaxSize.text")); // NOI18N
maxSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(4.0f), Float.valueOf(0.5f), null, Float.valueOf(0.5f)));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(labelMinSize)
.addGap(8, 8, 8)
.addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(labelMaxSize)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelMaxSize)
.addComponent(labelMinSize))
.addContainerGap(80, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel labelMaxSize;
private javax.swing.JLabel labelMinSize;
private javax.swing.JSpinner maxSize;
private javax.swing.JSpinner minSize;
// End of variables declaration//GEN-END:variables
}
@@ -0,0 +1,182 @@
/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2011 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2011 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import java.awt.Color;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.gephi.appearance.plugin.RankingElementColorTransformer.LinearGradient;
import org.openide.util.NbPreferences;
/**
*
* @author Mathieu Bastian
*/
public class RecentPalettes {
protected static String DEFAULT_NODE_NAME = "prefs";
public static final String COLORS = "PaletteColors";
public static final String POSITIONS = "PalettePositions";
private List<LinearGradient> gradients;
private int maxSize;
protected String nodeName = null;
public RecentPalettes() {
nodeName = "recentpalettes";
maxSize = 14;
gradients = new ArrayList<LinearGradient>(maxSize);
retrieve();
}
public void add(LinearGradient gradient) {
//Remove the old
gradients.remove(gradient);
// add to the top
gradients.add(0, gradient);
while (gradients.size() > maxSize) {
gradients.remove(gradients.size() - 1);
}
store();
}
public LinearGradient[] getPalettes() {
return gradients.toArray(new LinearGradient[0]);
}
protected void store() {
Preferences prefs = getPreferences();
// clear the backing store
try {
prefs.clear();
} catch (BackingStoreException ex) {
}
for (int i = 0; i < gradients.size(); i++) {
LinearGradient gradient = gradients.get(i);
try {
prefs.putByteArray(COLORS + i, serializeColors(gradient.getColors()));
prefs.putByteArray(POSITIONS + i, serializePositions(gradient.getPositions()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void retrieve() {
gradients.clear();
Preferences prefs = getPreferences();
for (int i = 0; i < maxSize; i++) {
byte[] cols = prefs.getByteArray(COLORS + i, null);
byte[] poss = prefs.getByteArray(POSITIONS + i, null);
if (cols != null && poss != null) {
try {
Color[] colors = deserializeColors(cols);
float[] posisitons = deserializePositions(poss);
LinearGradient linearGradient = new LinearGradient(colors, posisitons);
gradients.add(linearGradient);
} catch (Exception e) {
e.printStackTrace();
}
} else {
break;
}
}
}
/**
* Return the backing store Preferences
*
* @return Preferences
*/
protected final Preferences getPreferences() {
String name = DEFAULT_NODE_NAME;
if (nodeName != null) {
name = nodeName;
}
Preferences prefs = NbPreferences.forModule(this.getClass()).node("options").node(name);
return prefs;
}
private byte[] serializePositions(float[] positions) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(positions);
out.close();
return bos.toByteArray();
}
private float[] deserializePositions(byte[] positions) throws Exception {
ByteArrayInputStream bis = new ByteArrayInputStream(positions);
ObjectInputStream in = new ObjectInputStream(bis);
float[] array = (float[]) in.readObject();
in.close();
return array;
}
private byte[] serializeColors(Color[] colors) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(colors);
out.close();
return bos.toByteArray();
}
private Color[] deserializeColors(byte[] colors) throws Exception {
ByteArrayInputStream bis = new ByteArrayInputStream(colors);
ObjectInputStream in = new ObjectInputStream(bis);
Color[] array = (Color[]) in.readObject();
in.close();
return array;
}
}
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.4" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="colorChooser" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="colorLabel" min="-2" pref="380" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="colorLabel" min="-2" max="-2" attributes="0"/>
<Component id="colorChooser" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="278" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="net.java.dev.colorchooser.ColorChooser" name="colorChooser">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[14, 14]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[14, 14]"/>
</Property>
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="UniqueColorTransformerPanel.colorChooser.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="12" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<EmptySpace min="0" pref="12" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
</Container>
<Component class="javax.swing.JLabel" name="colorLabel">
</Component>
</SubComponents>
</Form>
@@ -0,0 +1,136 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.gephi.appearance.api.SimpleFunction;
import org.gephi.appearance.plugin.UniqueElementColorTransformer;
/**
*
* @author mbastian
*/
public class UniqueColorTransformerPanel extends javax.swing.JPanel {
private UniqueElementColorTransformer transformer;
/**
* Creates new form UniqueNodeColorTransformerPanel
*/
public UniqueColorTransformerPanel() {
initComponents();
colorChooser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
transformer.setColor(colorChooser.getColor());
colorLabel.setText(getHex(colorChooser.getColor()));
}
});
}
public void setup(SimpleFunction function) {
transformer = (UniqueElementColorTransformer) function.getTransformer();
colorChooser.setColor(transformer.getColor());
colorLabel.setText(getHex(transformer.getColor()));
}
private String getHex(Color color) {
return "#" + String.format("%06x", color.getRGB() & 0x00FFFFFF);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
colorChooser = new net.java.dev.colorchooser.ColorChooser();
colorLabel = new javax.swing.JLabel();
colorChooser.setMinimumSize(new java.awt.Dimension(14, 14));
colorChooser.setPreferredSize(new java.awt.Dimension(14, 14));
colorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(UniqueColorTransformerPanel.class, "UniqueColorTransformerPanel.colorChooser.toolTipText")); // NOI18N
javax.swing.GroupLayout colorChooserLayout = new javax.swing.GroupLayout(colorChooser);
colorChooser.setLayout(colorChooserLayout);
colorChooserLayout.setHorizontalGroup(
colorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 12, Short.MAX_VALUE)
);
colorChooserLayout.setVerticalGroup(
colorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 12, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(colorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(colorLabel)
.addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(278, 278, 278))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private net.java.dev.colorchooser.ColorChooser colorChooser;
private javax.swing.JLabel colorLabel;
// End of variables declaration//GEN-END:variables
}
@@ -0,0 +1,104 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.SimpleFunction;
import org.gephi.appearance.plugin.UniqueElementColorTransformer;
import org.gephi.appearance.spi.SimpleTransformer;
import org.gephi.appearance.spi.TransformerCategory;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = TransformerUI.class, position = 100)
public class UniqueElementColorTransformerUI implements TransformerUI {
private UniqueColorTransformerPanel panel;
@Override
public String getDisplayName() {
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Unique.name");
}
@Override
public TransformerCategory getCategory() {
return DefaultCategory.COLOR;
}
@Override
public String getDescription() {
return null;
}
@Override
public Icon getIcon() {
return null;
}
@Override
public synchronized JPanel getPanel(Function function) {
if (panel == null) {
panel = new UniqueColorTransformerPanel();
}
panel.setup((SimpleFunction) function);
return panel;
}
@Override
public synchronized AbstractButton[] getControlButton() {
return null;
}
@Override
public Class<? extends SimpleTransformer> getTransformerClass() {
return UniqueElementColorTransformer.class;
}
}
@@ -0,0 +1,104 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JPanel;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.SimpleFunction;
import org.gephi.appearance.plugin.UniqueNodeSizeTransformer;
import org.gephi.appearance.spi.SimpleTransformer;
import org.gephi.appearance.spi.TransformerCategory;
import org.gephi.appearance.spi.TransformerUI;
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
/**
*
* @author mbastian
*/
@ServiceProvider(service = TransformerUI.class, position = 100)
public class UniqueNodeSizeTransformerUI implements TransformerUI {
private UniqueSizeTransformerPanel panel;
@Override
public String getDisplayName() {
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Unique.name");
}
@Override
public TransformerCategory getCategory() {
return DefaultCategory.SIZE;
}
@Override
public String getDescription() {
return null;
}
@Override
public Icon getIcon() {
return null;
}
@Override
public synchronized JPanel getPanel(Function function) {
if (panel == null) {
panel = new UniqueSizeTransformerPanel();
}
panel.setup((SimpleFunction) function);
return panel;
}
@Override
public synchronized AbstractButton[] getControlButton() {
return null;
}
@Override
public Class<? extends SimpleTransformer> getTransformerClass() {
return UniqueNodeSizeTransformer.class;
}
}
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="sizeSpinner" min="-2" max="-2" attributes="1"/>
<EmptySpace pref="294" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="sizeSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="266" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="jLabel1">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="UniqueSizeTransformerPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JSpinner" name="sizeSpinner">
<Properties>
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
<SpinnerModel initial="1.0" minimum="0.1" numberType="java.lang.Float" stepSize="0.5" type="number"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Form>
@@ -0,0 +1,114 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.appearance.api.SimpleFunction;
import org.gephi.appearance.plugin.UniqueNodeSizeTransformer;
/**
*
* @author mbastian
*/
public class UniqueSizeTransformerPanel extends javax.swing.JPanel {
private UniqueNodeSizeTransformer transformer;
public UniqueSizeTransformerPanel() {
initComponents();
sizeSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
transformer.setSize((Float) sizeSpinner.getValue());
}
});
}
public void setup(SimpleFunction function) {
transformer = (UniqueNodeSizeTransformer) function.getTransformer();
sizeSpinner.setValue(transformer.getSize());
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
sizeSpinner = new javax.swing.JSpinner();
jLabel1.setText(org.openide.util.NbBundle.getMessage(UniqueSizeTransformerPanel.class, "UniqueSizeTransformerPanel.jLabel1.text")); // NOI18N
sizeSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f)));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(294, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(266, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
private javax.swing.JSpinner sizeSpinner;
// End of variables declaration//GEN-END:variables
}
@@ -0,0 +1,87 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin.category;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.gephi.appearance.spi.TransformerCategory;
import org.openide.util.NbBundle;
/**
*
* @author mbastian
*/
public class DefaultCategory {
public static TransformerCategory SIZE = new TransformerCategory() {
@Override
public String getDisplayName() {
return NbBundle.getMessage(DefaultCategory.class, "Category.Size.name");
}
@Override
public Icon getIcon() {
return new ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/size.png"));
}
@Override
public String toString() {
return "SIZE";
}
};
public static TransformerCategory COLOR = new TransformerCategory() {
@Override
public String getDisplayName() {
return NbBundle.getMessage(DefaultCategory.class, "Category.Color.name");
}
@Override
public Icon getIcon() {
return new ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/color.png"));
}
@Override
public String toString() {
return "COLOR";
}
};
}
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.6" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="centerScrollPanel" max="32767" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<Component id="presetCombo" min="-2" pref="216" max="-2" attributes="0"/>
<EmptySpace pref="73" max="32767" attributes="0"/>
<Component id="generateButton" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="labelColorCount" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="colorCountLabel" min="-2" max="-2" attributes="0"/>
</Group>
<Component id="labelPreset" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="labelColorCount" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="colorCountLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="labelPreset" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="presetCombo" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="generateButton" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
<Component id="centerScrollPanel" pref="208" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="labelColorCount">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/palette/Bundle.properties" key="PaletteGeneratorPanel.labelColorCount.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="colorCountLabel">
</Component>
<Component class="javax.swing.JLabel" name="labelPreset">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/palette/Bundle.properties" key="PaletteGeneratorPanel.labelPreset.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JComboBox" name="presetCombo">
<Properties>
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
<StringArray count="0"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JButton" name="generateButton">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/gephi/ui/appearance/plugin/palette/Bundle.properties" key="PaletteGeneratorPanel.generateButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
</Component>
<Container class="javax.swing.JScrollPane" name="centerScrollPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="null" type="code"/>
</Property>
<Property name="opaque" type="boolean" value="false"/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="centerPanel">
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="colorTable">
<Properties>
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
<Table columnCount="0" rowCount="0"/>
</Property>
<Property name="opaque" type="boolean" value="false"/>
<Property name="rowHeight" type="int" value="22"/>
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
<JTableSelectionModel selectionMode="0"/>
</Property>
<Property name="showHorizontalLines" type="boolean" value="false"/>
<Property name="showVerticalLines" type="boolean" value="false"/>
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="null" type="code"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Form>
@@ -0,0 +1,246 @@
/*
Copyright 2008-2013 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2013 Gephi Consortium. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"
If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.
Contributor(s):
Portions Copyrighted 2013 Gephi Consortium.
*/
package org.gephi.ui.appearance.plugin.palette;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import org.gephi.appearance.plugin.palette.Palette;
import org.gephi.appearance.plugin.palette.PaletteManager;
import org.gephi.appearance.plugin.palette.Preset;
/**
*
* @author mbastian
*/
public class PaletteGeneratorPanel extends javax.swing.JPanel {
private Preset selectedPreset;
private Palette selectedPalette;
public PaletteGeneratorPanel() {
initComponents();
//Preset Model
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (Preset preset : PaletteManager.getInstance().getPresets()) {
model.addElement(preset);
}
selectedPreset = (Preset) model.getElementAt(0);
presetCombo.setModel(model);
presetCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (presetCombo.getSelectedItem() != selectedPreset) {
selectedPreset = (Preset) presetCombo.getSelectedItem();
}
}
});
//Generate
generateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
generate();
}
});
}
private void generate() {
int colorCount = Integer.parseInt(colorCountLabel.getText());
selectedPalette = PaletteManager.getInstance().generatePalette(colorCount, selectedPreset);
String[] columnNames = new String[]{"Color"};
DefaultTableModel model = new DefaultTableModel(columnNames, colorCount) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
colorTable.setModel(model);
TableColumn colorCol = colorTable.getColumnModel().getColumn(0);
colorCol.setCellRenderer(new ColorCellRenderer());
int row = 0;
for (Color c : selectedPalette.getColors()) {
model.setValueAt(c, row++, 0);
}
}
public void setup(int colorsCount) {
colorCountLabel.setText(String.valueOf(colorsCount));
}
public Palette getSelectedPalette() {
return selectedPalette;
}
class ColorCellRenderer extends JLabel implements TableCellRenderer {
public ColorCellRenderer() {
setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Color c = (Color) value;
setBackground(c);
return this;
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
labelColorCount = new javax.swing.JLabel();
colorCountLabel = new javax.swing.JLabel();
labelPreset = new javax.swing.JLabel();
presetCombo = new javax.swing.JComboBox();
generateButton = new javax.swing.JButton();
centerScrollPanel = new javax.swing.JScrollPane();
centerPanel = new javax.swing.JPanel();
colorTable = new javax.swing.JTable();
labelColorCount.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelColorCount.text")); // NOI18N
labelPreset.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelPreset.text")); // NOI18N
generateButton.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.generateButton.text")); // NOI18N
centerScrollPanel.setBorder(null);
centerScrollPanel.setOpaque(false);
centerPanel.setLayout(new java.awt.GridBagLayout());
colorTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
colorTable.setOpaque(false);
colorTable.setRowHeight(22);
colorTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
colorTable.setShowHorizontalLines(false);
colorTable.setShowVerticalLines(false);
colorTable.setTableHeader(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
centerPanel.add(colorTable, gridBagConstraints);
centerScrollPanel.setViewportView(centerPanel);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(centerScrollPanel)
.addGroup(layout.createSequentialGroup()
.addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 73, Short.MAX_VALUE)
.addComponent(generateButton))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(labelColorCount)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(colorCountLabel))
.addComponent(labelPreset))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelColorCount)
.addComponent(colorCountLabel))
.addGap(18, 18, 18)
.addComponent(labelPreset)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(generateButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(centerScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel centerPanel;
private javax.swing.JScrollPane centerScrollPanel;
private javax.swing.JLabel colorCountLabel;
private javax.swing.JTable colorTable;
private javax.swing.JButton generateButton;
private javax.swing.JLabel labelColorCount;
private javax.swing.JLabel labelPreset;
private javax.swing.JComboBox presetCombo;
// End of variables declaration//GEN-END:variables
}
@@ -1,4 +1,4 @@
Manifest-Version: 1.0
AutoUpdate-Essential-Module: true
OpenIDE-Module-Localizing-Bundle: org/gephi/partition/plugin/Bundle.properties
OpenIDE-Module-Localizing-Bundle: org/gephi/ui/appearance/plugin/Bundle.properties
OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version}
@@ -2,7 +2,7 @@
<nbm>
<!--
<moduleType>autoload</moduleType>
<codeNameBase>org.gephi.partition.api/1</codeNameBase>
<codeNameBase>org.gephi.ui.appearance.plugin/1</codeNameBase>
<licenseName>Apache License, Version 2.0</licenseName>
<licenseFile>license.txt</licenseFile>
-->
@@ -0,0 +1,28 @@
Unique.name = Unique
Attribute.name = Attribute
ColorTransformerUI.name = Color
SizeTransformerUI.name = Size
LabelColorTransformerUI.name = Label Color
LabelSizeTransformerUI.name = Label Size
RankingColorTransformerPanel.labelColor.text=Color:
RankingSizeTransformerPanel.labelMaxSize.text=Max size:
RankingSizeTransformerPanel.labelMinSize.text=Min size:
PalettePopup.light=Light
PalettePopup.dark=Dark
PalettePopup.default=Default
PalettePopup.generate=Generate...
PalettePopup.invert=Invert
PalettePopup.standard=Standard
PalettePopup.recent=Recent
PalettePopup.norecent=No recent palette
PalettePopup.allblack=All black
PalettePopup.allwhite=All white
UniqueColorTransformerPanel.colorChooser.toolTipText=Set Color
UniqueSizeTransformerPanel.jLabel1.text=Size:
PartitionColorTransformerPanel.paletteButton=Palette...
PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=Hrana dovnit\u0159<- Barva
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=Color de arista Entrante <-
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=Couleur de lien ENTRANT<-
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=\u6d41\u5165\u8fba<-\u8272
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=Cor da aresta de entrada <-
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0432\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440
@@ -0,0 +1,2 @@
UniqueColorTransformerPanel.colorChooser.toolTipText=\u8fb9 IN<- \u989c\u8272
@@ -0,0 +1,2 @@
Category.Size.name = Size
Category.Color.name = Color
@@ -0,0 +1,3 @@
PaletteGeneratorPanel.labelColorCount.text=Colors count:
PaletteGeneratorPanel.generateButton.text=Generate
PaletteGeneratorPanel.labelPreset.text=Presets
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 359 B

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais