Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-12-28 18:42:51 +0300
committerTon Roosendaal <ton@blender.org>2005-12-28 18:42:51 +0300
commit9df1460777cceed839721ea99fd9623aedbb26f5 (patch)
treef4ad7ebfb6294be13c01a3dba67e55354973818e
parent7837866b1e226925b2a50041e3f0f56ac9e82021 (diff)
Christmas coding work!
********* Node editor work: - To enable Nodes for Materials, you have to set the "Use Nodes" button, in the new Material buttons "Nodes" Panel or in header of the Node editor. Doing this will disable Material-Layers. - Nodes now execute materials ("shaders"), but still only using the previewrender code. - Nodes have (optional) previews for rendered images. - Node headers allow to hide buttons and/or preview image - Nodes can be dragged larger/smaller (right-bottom corner) - Nodes can be hidden (minimized) with hotkey H - CTRL+click on an Input Socket gives a popup with default values. - Changing Material/Texture or Mix node will adjust Node title. - Click-drag outside of a Node changes cursor to "Knife' and allows to draw a rect where to cut Links. - Added new node types RGBtoBW, Texture, In/Output, ColorRamp - Material Nodes have options to ouput diffuse or specular, or to use a negative normal. The input socket 'Normal' will force the material to use that normal, otherwise it uses the normal from the Material that has the node tree. - When drawing a link between two not-matching sockets, Blender inserts a converting node (now only for value/rgb combos) - When drawing a link to an input socket that's already in use, the old link will either disappear or flip to another unused socket. - A click on a Material Node will activate it, and show all its settings in the Material Buttons. Active Material Nodes draw the material icon in red. - A click on any node will show its options in the Node Panel in the Material buttons. - Multiple Output Nodes can be used, to sample contents of a tree, but only one Output is the real one, which is indicated in a different color and red material icon. - Added ThemeColors for node types - ALT+C will convert existing Material-Layers to Node... this currently only adds the material/mix nodes and connects them. Dunno if this is worth a lot of coding work to make perfect? - Press C to call another "Solve order", which will show all possible cyclic conflicts (if there are). - Technical: nodes now use "Type" structs which define the structure of nodes and in/output sockets. The Type structs store all fixed info, callbacks, and allow to reconstruct saved Nodes to match what is required by Blender. - Defining (new) nodes now is as simple as filling in a fixed Type struct, plus code some callbacks. A doc will be made! - Node preview images are by default float ********* Icon drawing: - Cleanup of how old icons were implemented in new system, making them 16x16 too, correctly centered *and* scaled. - Made drawing Icons use float coordinates - Moved BIF_calcpreview_image() into interface_icons.c, renamed it icon_from_image(). Removed a lot of unneeded Imbuf magic here! :) - Skipped scaling and imbuf copying when icons are OK size ********* Preview render: - Huge cleanup of code.... - renaming BIF_xxx calls that only were used internally - BIF_previewrender() now accepts an argument for rendering method, so it supports icons, buttonwindow previewrender and node editor - Only a single BIF_preview_changed() call now exists, supporting all signals as needed for buttos and node editor ********* More stuff: - glutil.c, glaDrawPixelsSafe() and glaDrawPixelsTex() now accept format argument for GL_FLOAT rects - Made the ColorBand become a built-in button for interface.c Was a load of cleanup work in buttons_shading.c... - removed a load of unneeded glBlendFunc() calls - Fixed bug in calculating text length for buttons (ancient!)
-rw-r--r--source/blender/blenkernel/BKE_node.h107
-rw-r--r--source/blender/blenkernel/BKE_texture.h2
-rw-r--r--source/blender/blenkernel/intern/material.c29
-rw-r--r--source/blender/blenkernel/intern/node.c440
-rw-r--r--source/blender/blenkernel/intern/node_shaders.c518
-rw-r--r--source/blender/blenkernel/intern/texture.c34
-rw-r--r--source/blender/blenloader/intern/readfile.c88
-rw-r--r--source/blender/blenloader/intern/writefile.c37
-rw-r--r--source/blender/include/BIF_glutil.h6
-rw-r--r--source/blender/include/BIF_interface.h1
-rw-r--r--source/blender/include/BIF_interface_icons.h4
-rw-r--r--source/blender/include/BIF_previewrender.h33
-rw-r--r--source/blender/include/BIF_resources.h12
-rw-r--r--source/blender/include/BSE_node.h23
-rw-r--r--source/blender/include/blendef.h3
-rw-r--r--source/blender/include/butspace.h40
-rw-r--r--source/blender/include/interface.h2
-rw-r--r--source/blender/makesdna/DNA_material_types.h6
-rw-r--r--source/blender/makesdna/DNA_node_types.h62
-rw-r--r--source/blender/makesdna/DNA_space_types.h8
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h7
-rw-r--r--source/blender/render/extern/include/render.h1
-rw-r--r--source/blender/render/extern/include/render_types.h3
-rw-r--r--source/blender/render/intern/source/ray.c4
-rw-r--r--source/blender/render/intern/source/rendercore.c9
-rw-r--r--source/blender/render/intern/source/texture.c2
-rw-r--r--source/blender/src/blenderbuttons.c2852
-rw-r--r--source/blender/src/butspace.c24
-rw-r--r--source/blender/src/buttons_shading.c758
-rw-r--r--source/blender/src/drawimage.c8
-rw-r--r--source/blender/src/drawnode.c634
-rw-r--r--source/blender/src/drawseq.c2
-rw-r--r--source/blender/src/drawview.c2
-rw-r--r--source/blender/src/edit.c95
-rw-r--r--source/blender/src/editnode.c723
-rw-r--r--source/blender/src/editview.c4
-rw-r--r--source/blender/src/glutil.c32
-rw-r--r--source/blender/src/header_buttonswin.c4
-rw-r--r--source/blender/src/header_info.c2
-rw-r--r--source/blender/src/header_ipo.c2
-rw-r--r--source/blender/src/header_node.c44
-rw-r--r--source/blender/src/headerbuttons.c21
-rw-r--r--source/blender/src/interface.c176
-rw-r--r--source/blender/src/interface_draw.c183
-rw-r--r--source/blender/src/interface_icons.c120
-rw-r--r--source/blender/src/interface_panel.c15
-rw-r--r--source/blender/src/outliner.c5
-rw-r--r--source/blender/src/previewrender.c532
-rw-r--r--source/blender/src/renderwin.c14
-rw-r--r--source/blender/src/resources.c31
-rw-r--r--source/blender/src/space.c8
-rw-r--r--source/blender/src/usiblender.c23
52 files changed, 4831 insertions, 2964 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 4146ebc71a0..83087204567 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -37,40 +37,113 @@ struct bNodeTree;
struct bNode;
struct bNodeLink;
struct bNodeSocket;
+struct bNodeStack;
+struct uiBlock;
+struct rctf;
struct ListBase;
#define SOCK_IN 1
#define SOCK_OUT 2
+/* ************** NODE TYPE DEFINITIONS ***** */
-/* ************** GENERIC API *************** */
+typedef struct bNodeSocketType {
+ int type, limit;
+ char *name;
+ float val1, val2, val3, val4; /* default alloc value for inputs */
+ float min, max; /* default range for inputs */
+
+ /* after this line is used internal only */
+ struct bNodeSocket *sock; /* to verify */
+
+} bNodeSocketType;
-void nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
-void nodeFreeTree(struct bNodeTree *ntree);
+typedef struct bNodeType {
+ int type;
+ char *name;
+ float width, minwidth, maxwidth;
+ short nclass, flag;
+
+ bNodeSocketType *inputs, *outputs;
+
+ char storagename[64]; /* struct name for DNA */
+
+ void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **);
+
+ /* after this line is set on startup of blender */
+ int (*butfunc)(struct uiBlock *, struct bNode *, rctf *);
-struct bNode *nodeAddNode(struct bNodeTree *ntree, char *name);
-struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
+} bNodeType;
+
+/* nodetype->nclass, also for themes */
+#define NODE_CLASS_INPUT 0
+#define NODE_CLASS_OUTPUT 1
+#define NODE_CLASS_GENERATOR 2
+#define NODE_CLASS_OPERATOR 3
+
+/* ************** GENERIC API, TREES *************** */
+
+struct bNodeTree *ntreeAddTree(int type);
+void ntreeInitTypes(struct bNodeTree *ntree);
+void ntreeFreeTree(struct bNodeTree *ntree);
+struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree, int internal_select);
+
+void ntreeSolveOrder(struct bNodeTree *ntree);
+
+void ntreeBeginExecTree(struct bNodeTree *ntree, int xsize, int ysize);
+void ntreeExecTree(struct bNodeTree *ntree);
+void ntreeEndExecTree(struct bNodeTree *ntree);
+void ntreeClearPixelTree(struct bNodeTree *, int, int);
+
+/* ************** GENERIC API, NODES *************** */
+
+void nodeAddToPreview(struct bNode *, float *, int, int);
+
+struct bNode *nodeAddNodeType(struct bNodeTree *ntree, int type);
+void nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
struct bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node);
-struct bNodeSocket *nodeAddSocket(struct bNode *node, int type, int where, int limit, char *name);
+struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
+void nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
struct bNodeLink *nodeFindLink(struct bNodeTree *ntree, struct bNodeSocket *from, struct bNodeSocket *to);
int nodeCountSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
-
-void nodeSolveOrder(struct bNodeTree *ntree);
-void nodeExecTree(struct bNodeTree *ntree);
+struct bNode *nodeGetActive(struct bNodeTree *ntree);
+struct bNode *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
/* ************** SHADER NODES *************** */
-/* types are needed to restore callbacks */
-#define SH_NODE_TEST 0
-#define SH_NODE_RGB 1
-#define SH_NODE_VALUE 2
-#define SH_NODE_MIX_RGB 3
-#define SH_NODE_SHOW_RGB 4
+struct ShadeInput;
+struct ShadeResult;
+
+/* note: types are needed to restore callbacks, don't change values */
+#define SH_NODE_INPUT 0
+#define SH_NODE_OUTPUT 1
+
+#define SH_NODE_MATERIAL 100
+#define SH_NODE_RGB 101
+#define SH_NODE_VALUE 102
+#define SH_NODE_MIX_RGB 103
+#define SH_NODE_VALTORGB 104
+#define SH_NODE_RGBTOBW 105
+#define SH_NODE_TEXTURE 106
+
+/* custom defines: options for Material node */
+#define SH_NODE_MAT_DIFF 1
+#define SH_NODE_MAT_SPEC 2
+#define SH_NODE_MAT_NEG 4
+
+/* the type definitions array */
+extern bNodeType *node_all_shaders[];
+
+/* API */
+struct bNode *nodeShaderAdd(struct bNodeTree *ntree, int type);
+void nodeShaderSetExecfunc(struct bNode *node);
+
+void ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
-struct bNode *node_shader_add(struct bNodeTree *ntree, int type);
-void node_shader_set_execfunc(struct bNode *node);
+ /* switch material render loop */
+void set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
#endif
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 23c31564a66..4db98599206 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -50,7 +50,7 @@ int test_dlerr(const char *name, const char *symbol);
void open_plugin_tex(struct PluginTex *pit);
struct PluginTex *add_plugin_tex(char *str);
void free_plugin_tex(struct PluginTex *pit);
-struct ColorBand *add_colorband(void);
+struct ColorBand *add_colorband(int rangetype);
int do_colorband(struct ColorBand *coba, float in, float out[4]);
void default_tex(struct Tex *tex);
struct Tex *add_texture(char *name);
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 47b3f1e34ea..5054774f339 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -40,6 +40,7 @@
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meta_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
@@ -55,6 +56,7 @@
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
+#include "BKE_node.h"
#include "BKE_utildefines.h"
#include "BPY_extern.h"
@@ -84,6 +86,10 @@ void free_material(Material *ma)
if(ml->mat) ml->mat->id.us--;
BLI_freelistN(&ma->layers);
+
+ if(ma->nodetree)
+ ntreeFreeTree(ma->nodetree);
+
}
void init_material(Material *ma)
@@ -169,6 +175,10 @@ Material *copy_material(Material *ma)
for(ml= man->layers.first; ml; ml= ml->next)
id_us_plus((ID *)ml->mat);
+ if(ma->nodetree) {
+ man->nodetree= ntreeCopyTree(ma->nodetree, 0); /* 0 == full new tree */
+ }
+
return man;
}
@@ -567,16 +577,25 @@ void new_material_to_objectdata(Object *ob)
ob->actcol= ob->totcol;
}
+/* will be renamed... now easy to re-use for nodes! */
Material *get_active_matlayer(Material *ma)
{
- MaterialLayer *ml;
if(ma==NULL) return NULL;
- for(ml= ma->layers.first; ml; ml= ml->next)
- if(ml->flag & ML_ACTIVE) break;
- if(ml)
- return ml->mat;
+ if(ma->use_nodes) {
+ bNode *node= nodeGetActiveID(ma->nodetree, ID_MA);
+ if(node && node->id) {
+ return (Material *)node->id;
+ }
+ }
+ else {
+ MaterialLayer *ml;
+ for(ml= ma->layers.first; ml; ml= ml->next)
+ if(ml->flag & ML_ACTIVE) break;
+ if(ml)
+ return ml->mat;
+ }
return ma;
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 3d568e4e391..fbaa0b35c5e 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -28,33 +28,197 @@
*/
#include <stdlib.h>
+#include <string.h>
#include "DNA_ID.h"
#include "DNA_node_types.h"
#include "BKE_blender.h"
#include "BKE_node.h"
+#include "BKE_utildefines.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
#include "MEM_guardedalloc.h"
+/* ************** Type stuff ********** */
+
+static bNodeType *nodeGetType(bNodeTree *ntree, int type)
+{
+ bNodeType **typedefs= ntree->alltypes;
+
+ while( *typedefs && (*typedefs)->type!=type)
+ typedefs++;
+
+ return *typedefs;
+}
+
+void ntreeInitTypes(bNodeTree *ntree)
+{
+ bNode *node;
+
+ if(ntree->type==NTREE_SHADER)
+ ntree->alltypes= node_all_shaders;
+ else {
+ ntree->alltypes= NULL;
+ printf("Error: no type definitions for nodes\n");
+ }
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ node->typeinfo= nodeGetType(ntree, node->type);
+ if(node->typeinfo==NULL)
+ printf("Error: no typeinfo for node %s\n", node->name);
+ }
+
+ ntree->init |= NTREE_TYPE_INIT;
+}
+
+/* only used internal... we depend on type definitions! */
+static bNodeSocket *node_add_socket_type(ListBase *lb, bNodeSocketType *stype)
+{
+ bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
+
+ BLI_strncpy(sock->name, stype->name, NODE_MAXSTR);
+ if(stype->limit==0) sock->limit= 0xFFF;
+ else sock->limit= stype->limit;
+ sock->type= stype->type;
+
+ sock->ns.vec[0]= stype->val1;
+ sock->ns.vec[1]= stype->val2;
+ sock->ns.vec[2]= stype->val3;
+ sock->ns.vec[3]= stype->val4;
+
+ if(lb)
+ BLI_addtail(lb, sock);
+
+ return sock;
+}
+
+static void node_rem_socket(bNodeTree *ntree, ListBase *lb, bNodeSocket *sock)
+{
+ bNodeLink *link, *next;
+
+ for(link= ntree->links.first; link; link= next) {
+ next= link->next;
+ if(link->fromsock==sock || link->tosock==sock) {
+ nodeRemLink(ntree, link);
+ }
+ }
+
+ BLI_remlink(lb, sock);
+ MEM_freeN(sock);
+}
+
+static bNodeSocket *verify_socket(ListBase *lb, bNodeSocketType *stype)
+{
+ bNodeSocket *sock;
+
+ for(sock= lb->first; sock; sock= sock->next) {
+ if(strncmp(sock->name, stype->name, NODE_MAXSTR)==0)
+ break;
+ }
+ if(sock) {
+ sock->type= stype->type; /* in future, read this from tydefs! */
+ if(stype->limit==0) sock->limit= 0xFFF;
+ else sock->limit= stype->limit;
+ BLI_remlink(lb, sock);
+ return sock;
+ }
+ else {
+ return node_add_socket_type(NULL, stype);
+ }
+}
+
+static void verify_socket_list(bNodeTree *ntree, ListBase *lb, bNodeSocketType *stype_first)
+{
+ bNodeSocketType *stype;
+
+ /* no inputs anymore? */
+ if(stype_first==NULL) {
+ while(lb->first)
+ node_rem_socket(ntree, lb, lb->first);
+ }
+ else {
+ /* step by step compare */
+ stype= stype_first;
+ while(stype->type != -1) {
+ stype->sock= verify_socket(lb, stype);
+ stype++;
+ }
+ /* leftovers are removed */
+ while(lb->first)
+ node_rem_socket(ntree, lb, lb->first);
+ /* and we put back the verified sockets */
+ stype= stype_first;
+ while(stype->type != -1) {
+ BLI_addtail(lb, stype->sock);
+ stype++;
+ }
+ }
+}
+
+void ntreeVerifyTypes(bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeType *ntype;
+
+ if((ntree->init & NTREE_TYPE_INIT)==0)
+ ntreeInitTypes(ntree);
+
+ /* check inputs and outputs, and remove or insert them */
+ for(node= ntree->nodes.first; node; node= node->next) {
+ ntype= node->typeinfo;
+ if(ntype) {
+ /* might add some other verify stuff here */
+
+ verify_socket_list(ntree, &node->inputs, ntype->inputs);
+ verify_socket_list(ntree, &node->outputs, ntype->outputs);
+ }
+ }
+}
+
+
+
/* ************** Add stuff ********** */
/* not very important, but the stack solver likes to know a maximum */
#define MAX_SOCKET 64
-bNode *nodeAddNode(struct bNodeTree *ntree, char *name)
+bNode *nodeAddNodeType(bNodeTree *ntree, int type)
{
- bNode *node= MEM_callocN(sizeof(bNode), "new node");
+ bNode *node;
+ bNodeType *ntype= nodeGetType(ntree, type);
+ bNodeSocketType *stype;
+ node= MEM_callocN(sizeof(bNode), "new node");
BLI_addtail(&ntree->nodes, node);
- BLI_strncpy(node->name, name, NODE_MAXSTR);
+ node->typeinfo= ntype;
+
+ BLI_strncpy(node->name, ntype->name, NODE_MAXSTR);
+ node->type= ntype->type;
+ node->flag= NODE_SELECT|ntype->flag;
+ node->width= ntype->width;
+
+ if(ntype->inputs) {
+ stype= ntype->inputs;
+ while(stype->type != -1) {
+ node_add_socket_type(&node->inputs, stype);
+ stype++;
+ }
+ }
+ if(ntype->outputs) {
+ stype= ntype->outputs;
+ while(stype->type != -1) {
+ node_add_socket_type(&node->outputs, stype);
+ stype++;
+ }
+ }
return node;
}
-/* keep listorder identical, for copying links */
+/* keep socket listorder identical, for copying links */
+/* ntree is the target tree */
bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
{
bNode *nnode= MEM_callocN(sizeof(bNode), "dupli node");
@@ -67,8 +231,13 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
if(nnode->id)
nnode->id->us++;
- node->flag= NODE_SELECT;
-
+ if(nnode->storage)
+ nnode->storage= MEM_dupallocN(nnode->storage);
+
+ node->new= nnode;
+ nnode->new= NULL;
+ nnode->preview= NULL;
+
return nnode;
}
@@ -85,19 +254,22 @@ bNodeLink *nodeAddLink(bNodeTree *ntree, bNode *fromnode, bNodeSocket *fromsock,
return link;
}
-bNodeSocket *nodeAddSocket(bNode *node, int type, int where, int limit, char *name)
+void nodeRemLink(bNodeTree *ntree, bNodeLink *link)
{
- bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
+ BLI_remlink(&ntree->links, link);
+ if(link->tosock)
+ link->tosock->link= NULL;
+ MEM_freeN(link);
+}
+
+
+bNodeTree *ntreeAddTree(int type)
+{
+ bNodeTree *ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
+ ntree->type= type;
- BLI_strncpy(sock->name, name, NODE_MAXSTR);
- sock->limit= limit;
- sock->type= type;
- if(where==SOCK_IN)
- BLI_addtail(&node->inputs, sock);
- else
- BLI_addtail(&node->outputs, sock);
-
- return sock;
+ ntreeInitTypes(ntree);
+ return ntree;
}
/* ************** Free stuff ********** */
@@ -125,8 +297,7 @@ static void node_unlink_node(bNodeTree *ntree, bNode *node)
break;
}
if(sock) {
- BLI_remlink(&ntree->links, link);
- MEM_freeN(link);
+ nodeRemLink(ntree, link);
}
}
}
@@ -144,10 +315,18 @@ void nodeFreeNode(bNodeTree *ntree, bNode *node)
BLI_freelistN(&node->inputs);
BLI_freelistN(&node->outputs);
+ if(node->preview) {
+ if(node->preview->rect)
+ MEM_freeN(node->preview->rect);
+ MEM_freeN(node->preview);
+ }
+ if(node->storage)
+ MEM_freeN(node->storage);
+
MEM_freeN(node);
}
-void nodeFreeTree(bNodeTree *ntree)
+void ntreeFreeTree(bNodeTree *ntree)
{
bNode *node, *next;
@@ -156,12 +335,64 @@ void nodeFreeTree(bNodeTree *ntree)
nodeFreeNode(NULL, node); /* NULL -> no unlinking needed */
}
BLI_freelistN(&ntree->links);
- BLI_freelistN(&ntree->inputs);
- BLI_freelistN(&ntree->outputs);
MEM_freeN(ntree);
}
+bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
+{
+ bNodeTree *newtree;
+ bNode *node, *nnode, *last;
+ bNodeLink *link, *nlink;
+ bNodeSocket *sock;
+ int a;
+
+ if(ntree==NULL) return NULL;
+
+ if(internal_select==0) {
+ newtree= MEM_dupallocN(ntree);
+ newtree->nodes.first= newtree->nodes.last= NULL;
+ newtree->links.first= newtree->links.last= NULL;
+ }
+ else
+ newtree= ntree;
+
+ last= ntree->nodes.last;
+ for(node= ntree->nodes.first; node; node= node->next) {
+
+ node->new= NULL;
+ if(internal_select==0 || (node->flag & NODE_SELECT)) {
+ nnode= nodeCopyNode(newtree, node); /* sets node->new */
+ if(internal_select) {
+ node->flag &= ~NODE_SELECT;
+ nnode->flag |= NODE_SELECT;
+ }
+ node->flag &= ~NODE_ACTIVE;
+ }
+ if(node==last) break;
+ }
+
+ /* check for copying links */
+ for(link= ntree->links.first; link; link= link->next) {
+ if(link->fromnode->new && link->tonode->new) {
+ nlink= nodeAddLink(newtree, link->fromnode->new, NULL, link->tonode->new, NULL);
+ /* sockets were copied in order */
+ for(a=0, sock= link->fromnode->outputs.first; sock; sock= sock->next, a++) {
+ if(sock==link->fromsock)
+ break;
+ }
+ nlink->fromsock= BLI_findlink(&link->fromnode->new->outputs, a);
+
+ for(a=0, sock= link->tonode->inputs.first; sock; sock= sock->next, a++) {
+ if(sock==link->tosock)
+ break;
+ }
+ nlink->tosock= BLI_findlink(&link->tonode->new->inputs, a);
+ }
+ }
+ return newtree;
+}
+
/* ************ find stuff *************** */
bNodeLink *nodeFindLink(bNodeTree *ntree, bNodeSocket *from, bNodeSocket *to)
@@ -189,6 +420,31 @@ int nodeCountSocketLinks(bNodeTree *ntree, bNodeSocket *sock)
return tot;
}
+bNode *nodeGetActive(bNodeTree *ntree)
+{
+ bNode *node;
+
+ if(ntree==NULL) return NULL;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->flag & NODE_ACTIVE)
+ break;
+ return node;
+}
+
+bNode *nodeGetActiveID(bNodeTree *ntree, short idtype)
+{
+ bNode *node;
+
+ if(ntree==NULL) return NULL;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->id && GS(node->id->name)==idtype)
+ if(node->flag & NODE_ACTIVE_ID)
+ break;
+ return node;
+}
+
/* ************** dependency stuff *********** */
/* node is guaranteed to be not checked before */
@@ -220,7 +476,7 @@ static int node_recurs_check(bNode *node, bNode ***nsort, int level)
return 0xFFF;
}
-void nodeSolveOrder(bNodeTree *ntree)
+void ntreeSolveOrder(bNodeTree *ntree)
{
bNode *node, **nodesort, **nsort;
bNodeSocket *sock;
@@ -266,78 +522,164 @@ void nodeSolveOrder(bNodeTree *ntree)
MEM_freeN(nodesort);
+ /* find the active outputs, tree type dependant, might become handler */
+ if(ntree->type==NTREE_SHADER) {
+ /* shader nodes only accepts one output */
+ int output= 0;
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
+ if(output==0)
+ node->flag |= NODE_DO_OUTPUT;
+ else
+ node->flag &= ~NODE_DO_OUTPUT;
+ output= 1;
+ }
+ }
+ }
+
+ /* here we could recursively set which nodes have to be done,
+ might be different for editor or for "real" use... */
+
+
+
}
+/* *************** preview *********** */
+
+/* if node->preview, then we assume the rect to exist */
+
+static void nodeInitPreview(bNode *node, int xsize, int ysize)
+{
+ /* signal we don't do anything, preview writing is protected */
+ if(xsize==0 || ysize==0)
+ return;
+
+ /* sanity checks & initialize */
+ if(node->preview) {
+ if(node->preview->xsize!=xsize && node->preview->ysize!=ysize) {
+ MEM_freeN(node->preview->rect);
+ node->preview->rect= NULL;
+ }
+ }
+
+ if(node->preview==NULL) {
+ node->preview= MEM_callocN(sizeof(bNodePreview), "node preview");
+ }
+ if(node->preview->rect==NULL) {
+ node->preview->rect= MEM_callocN(4*xsize + xsize*ysize*sizeof(float)*4, "node preview rect");
+ node->preview->xsize= xsize;
+ node->preview->ysize= ysize;
+ }
+}
+
+void nodeAddToPreview(bNode *node, float *col, int x, int y)
+{
+ bNodePreview *preview= node->preview;
+ if(preview) {
+ if(x>=0 && y>=0) {
+ if(x<preview->xsize && y<preview->ysize) {
+ float *tar= preview->rect+ 4*((preview->xsize*y) + x);
+ QUATCOPY(tar, col);
+ }
+ else printf("prv out bound x y %d %d\n", x, y);
+ }
+ else printf("prv out bound x y %d %d\n", x, y);
+ }
+}
+
+
+
/* ******************* executing ************* */
-void nodeBeginExecTree(bNodeTree *ntree)
+void ntreeBeginExecTree(bNodeTree *ntree, int xsize, int ysize)
{
bNode *node;
bNodeSocket *sock;
int index= 0;
- if((ntree->init & NTREE_EXEC_SET)==0) {
- for(node= ntree->nodes.first; node; node= node->next) {
- if(ntree->type==NTREE_SHADER)
- node_shader_set_execfunc(node);
- }
- ntree->init |= NTREE_EXEC_SET;
- }
+ if((ntree->init & NTREE_TYPE_INIT)==0)
+ ntreeInitTypes(ntree);
- /* create indices for stack */
+ /* create indices for stack, check preview */
for(node= ntree->nodes.first; node; node= node->next) {
-
for(sock= node->outputs.first; sock; sock= sock->next) {
sock->stack_index= index++;
}
+
+ if(node->typeinfo->flag & NODE_PREVIEW) /* hrms, check for closed nodes? */
+ nodeInitPreview(node, xsize, ysize);
+
}
if(index) {
- ntree->stack= MEM_callocN(index*sizeof(bNodeStack), "node stack");
+ bNodeStack *ns;
+ int a;
+
+ ns=ntree->stack= MEM_callocN(index*sizeof(bNodeStack), "node stack");
+ for(a=0; a<index; a++, ns++) ns->hasinput= 1;
}
+
+ ntree->init |= NTREE_EXEC_INIT;
}
-void nodeEndExecTree(bNodeTree *ntree)
+void ntreeEndExecTree(bNodeTree *ntree)
{
if(ntree->stack) {
MEM_freeN(ntree->stack);
ntree->stack= NULL;
}
+
+ ntree->init &= ~NTREE_EXEC_INIT;
}
-static void node_get_stack(bNode *node, bNodeStack *stack, bNodeStack **spp)
+static void node_get_stack(bNode *node, bNodeStack *stack, bNodeStack **in, bNodeStack **out)
{
- static bNodeStack empty= {{1.0f, 1.0f, 1.0f, 1.0f}, NULL};
bNodeSocket *sock;
/* build pointer stack */
for(sock= node->inputs.first; sock; sock= sock->next) {
if(sock->link)
- *(spp++)= stack + sock->link->fromsock->stack_index;
+ *(in++)= stack + sock->link->fromsock->stack_index;
else
- *(spp++)= &empty; /* input is not written into */
+ *(in++)= &sock->ns;
}
for(sock= node->outputs.first; sock; sock= sock->next) {
- *(spp++)= stack + sock->stack_index;
+ *(out++)= stack + sock->stack_index;
}
}
/* nodes are presorted, so exec is in order of list */
-void nodeExecTree(bNodeTree *ntree)
+void ntreeExecTree(bNodeTree *ntree)
{
bNode *node;
- bNodeStack *ns[MAX_SOCKET]; /* arbitrary... watch this */
+ bNodeStack *nsin[MAX_SOCKET]; /* arbitrary... watch this */
+ bNodeStack *nsout[MAX_SOCKET]; /* arbitrary... watch this */
- nodeBeginExecTree(ntree);
+ /* only when initialized */
+ if(ntree->init & NTREE_EXEC_INIT) {
- for(node= ntree->nodes.first; node; node= node->next) {
- if(node->execfunc) {
- node_get_stack(node, ntree->stack, ns);
- node->execfunc(node, ns);
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->typeinfo->execfunc) {
+ node_get_stack(node, ntree->stack, nsin, nsout);
+ node->typeinfo->execfunc(ntree->data, node, nsin, nsout);
+ }
}
}
-
- nodeEndExecTree(ntree);
}
+/* clear one pixel in all the preview images */
+void ntreeClearPixelTree(bNodeTree *ntree, int x, int y)
+{
+ bNode *node;
+ float vec[4]= {0.0f, 0.0f, 0.0f, 0.0f};
+
+ /* only when initialized */
+ if(ntree->init & NTREE_EXEC_INIT) {
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->preview)
+ nodeAddToPreview(node, vec, x, y);
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/node_shaders.c b/source/blender/blenkernel/intern/node_shaders.c
index 74728abac9c..f2ece280d58 100644
--- a/source/blender/blenkernel/intern/node_shaders.c
+++ b/source/blender/blenkernel/intern/node_shaders.c
@@ -30,10 +30,13 @@
#include <stdlib.h>
#include "DNA_ID.h"
+#include "DNA_material_types.h"
#include "DNA_node_types.h"
+#include "DNA_texture_types.h"
#include "BKE_blender.h"
#include "BKE_node.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BLI_arithb.h"
@@ -41,186 +44,443 @@
#include "MEM_guardedalloc.h"
-/* **************** testnode ************ */
+#include "render.h" /* <- shadeinput/output */
-static void blendcolor(float *col1, float *col2, float *output, float fac)
+/* ********* exec data struct, remains internal *********** */
+
+typedef struct ShaderCallData {
+ ShadeInput *shi;
+ ShadeResult *shr;
+} ShaderCallData;
+
+
+/* **************** call to switch lamploop for material node ************ */
+
+static void (*node_shader_lamp_loop)(ShadeInput *, ShadeResult *);
+
+void set_node_shader_lamp_loop(void (*lamp_loop_func)(ShadeInput *, ShadeResult *))
{
- output[0]= (1.0f-fac)*col1[0] + (fac)*col2[0];
- output[1]= (1.0f-fac)*col1[1] + (fac)*col2[1];
- output[2]= (1.0f-fac)*col1[2] + (fac)*col2[2];
+ node_shader_lamp_loop= lamp_loop_func;
}
-static void node_shader_exec_test(bNode *node, bNodeStack **ns)
+/* **************** input node ************ */
+
+static void node_shader_exec_input(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
-
- blendcolor(ns[0]->vec, ns[1]->vec, ns[2]->vec, 0.5);
+ if(data) {
+ ShadeResult *shr= ((ShaderCallData *)data)->shr;
+ ShadeInput *shi= ((ShaderCallData *)data)->shi;
+ float col[4];
+
+ /* stack order output sockets: color, alpha, normal */
+ VecAddf(col, shr->diff, shr->spec);
+ col[3]= shr->alpha;
+
+ VECCOPY(out[0]->vec, col);
+ out[1]->vec[0]= shr->alpha;
+ VECCOPY(out[2]->vec, shi->vn);
+
+ if(shi->do_preview)
+ nodeAddToPreview(node, col, shi->xs, shi->ys);
+
+ }
+}
-// printvecf(node->name, ns[2]->vec);
+
+/* **************** output node ************ */
+
+static void node_shader_exec_output(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ if(data) {
+ ShadeInput *shi= ((ShaderCallData *)data)->shi;
+ float col[4];
+
+ /* stack order input sockets: col, alpha, normal */
+ VECCOPY(col, in[0]->vec);
+ col[3]= in[1]->vec[0];
+
+ if(shi->do_preview) {
+ nodeAddToPreview(node, col, shi->xs, shi->ys);
+ node->lasty= shi->ys;
+ }
+
+ if(node->flag & NODE_DO_OUTPUT) {
+ ShadeResult *shr= ((ShaderCallData *)data)->shr;
+
+ VECCOPY(shr->diff, col);
+ col[0]= col[1]= col[2]= 0.0f;
+ VECCOPY(shr->spec, col);
+ shr->alpha= col[3];
+
+ // VECCOPY(shr->nor, in[3]->vec);
+ }
+ }
}
-static bNode *node_shader_add_test(bNodeTree *ntree)
+/* **************** material node ************ */
+
+static void node_shader_exec_material(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- bNode *node= nodeAddNode(ntree, "TestNode");
- static int tot= 0;
+ if(data && node->id) {
+ ShadeResult shrnode;
+ ShadeInput *shi;
+ float col[4], *nor;
- sprintf(node->name, "Testnode%d", tot++);
- node->type= SH_NODE_TEST;
- node->width= 80.0f;
-
- /* add sockets */
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Col");
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Spec");
- nodeAddSocket(node, SOCK_RGBA, SOCK_OUT, 0xFFF, "Diffuse");
-
- return node;
+ shi= ((ShaderCallData *)data)->shi;
+
+ shi->mat= (Material *)node->id;
+
+ /* retrieve normal */
+ if(in[0]->hasinput)
+ nor= in[0]->vec;
+ else
+ nor= shi->vno;
+
+ if(node->custom1 & SH_NODE_MAT_NEG) {
+ shi->vn[0]= -nor[0];
+ shi->vn[1]= -nor[1];
+ shi->vn[2]= -nor[2];
+ }
+ else {
+ VECCOPY(shi->vn, nor);
+ }
+
+ node_shader_lamp_loop(shi, &shrnode);
+
+ if(node->custom1 & SH_NODE_MAT_DIFF) {
+ VECCOPY(col, shrnode.diff);
+ if(node->custom1 & SH_NODE_MAT_SPEC) {
+ VecAddf(col, col, shrnode.spec);
+ }
+ }
+ else if(node->custom1 & SH_NODE_MAT_SPEC) {
+ VECCOPY(col, shrnode.spec);
+ }
+ else
+ col[0]= col[1]= col[2]= 0.0f;
+
+ col[3]= shrnode.alpha;
+
+ if(shi->do_preview)
+ nodeAddToPreview(node, col, shi->xs, shi->ys);
+
+ /* stack order output: color, alpha, normal */
+ VECCOPY(out[0]->vec, col);
+ out[1]->vec[0]= shrnode.alpha;
+
+ if(node->custom1 & SH_NODE_MAT_NEG) {
+ shi->vn[0]= -shi->vn[0];
+ shi->vn[1]= -shi->vn[1];
+ shi->vn[2]= -shi->vn[2];
+ }
+ VECCOPY(out[2]->vec, shi->vn);
+ }
}
-/* **************** value node ************ */
+/* **************** texture node ************ */
-static void node_shader_exec_value(bNode *node, bNodeStack **ns)
+static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- /* no input node! */
- ns[0]->vec[0]= node->ns.vec[0];
-// printf("%s %f\n", node->name, ns[0]->vec[0]);
+ if(data && node->id) {
+ ShadeInput *shi;
+
+ shi= ((ShaderCallData *)data)->shi;
+
+ multitex_ext((Tex *)node->id, shi->co, out[0]->vec, out[1]->vec, out[1]->vec+1, out[1]->vec+2, out[1]->vec+3);
+
+ if(shi->do_preview)
+ nodeAddToPreview(node, out[1]->vec, shi->xs, shi->ys);
+
+ }
}
-static bNode *node_shader_add_value(bNodeTree *ntree)
+/* **************** value node ************ */
+
+static void node_shader_exec_value(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- bNode *node= nodeAddNode(ntree, "Value");
-
- node->type= SH_NODE_VALUE;
- node->width= 80.0f;
- node->prv_h= 20.0f;
+ bNodeSocket *sock= node->outputs.first;
- /* add sockets */
- nodeAddSocket(node, SOCK_VALUE, SOCK_OUT, 0xFFF, "");
-
- return node;
+ out[0]->vec[0]= sock->ns.vec[0];
}
/* **************** rgba node ************ */
-static void node_shader_exec_rgb(bNode *node, bNodeStack **ns)
+static void node_shader_exec_rgb(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- /* no input node! */
- QUATCOPY(ns[0]->vec, node->ns.vec);
+ bNodeSocket *sock= node->outputs.first;
-// printvecf(node->name, ns[0]->vec);
+ VECCOPY(out[0]->vec, sock->ns.vec);
}
+
+
+/* **************** mix rgb node ************ */
-static bNode *node_shader_add_rgb(bNodeTree *ntree)
+static void node_shader_exec_mix_rgb(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- bNode *node= nodeAddNode(ntree, "RGB");
+ /* stack order in: fac, col1, col2 */
+ /* stack order out: col */
+ float col[3];
- node->type= SH_NODE_RGB;
- node->width= 100.0f;
- node->prv_h= 100.0f;
- node->ns.vec[3]= 1.0f; /* alpha init */
-
- /* add sockets */
- nodeAddSocket(node, SOCK_RGBA, SOCK_OUT, 0xFFF, "");
+ VECCOPY(col, in[1]->vec);
+ ramp_blend(node->custom1, col, col+1, col+2, in[0]->vec[0], in[2]->vec);
+ VECCOPY(out[0]->vec, col);
+}
+
+/* **************** val to rgb node ************ */
+
+static void node_shader_exec_valtorgb(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ /* stack order in: fac */
+ /* stack order out: col, alpha */
- return node;
+ if(node->storage) {
+ do_colorband(node->storage, in[0]->vec[0], out[0]->vec);
+ out[1]->vec[0]= out[0]->vec[3];
+ }
}
-/* **************** mix rgba node ************ */
+/* **************** rgb to bw node ************ */
-static void node_shader_exec_mix_rgb(bNode *node, bNodeStack **ns)
+static void node_shader_exec_rgbtobw(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- /* stack order is fac, col1, col2, out */
- blendcolor(ns[1]->vec, ns[2]->vec, ns[3]->vec, ns[0]->vec[0]);
+ /* stack order out: bw */
+ /* stack order in: col */
+
+ out[0]->vec[0]= in[0]->vec[0]*0.35f + in[0]->vec[1]*0.45f + in[0]->vec[2]*0.2f;
}
-static bNode *node_shader_add_mix_rgb(bNodeTree *ntree)
+
+/* ******************* execute ************ */
+
+void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
{
- bNode *node= nodeAddNode(ntree, "Mix RGB");
+ ShaderCallData scd;
- node->type= SH_NODE_MIX_RGB;
- node->width= 80.0f;
- node->prv_h= 0.0f;
+ /* convert caller data to struct */
+ scd.shi= shi;
+ scd.shr= shr;
+ ntree->data= &scd;
- /* add sockets */
- nodeAddSocket(node, SOCK_VALUE, SOCK_IN, 1, "Fac");
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Color1");
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Color2");
- nodeAddSocket(node, SOCK_RGBA, SOCK_OUT, 0xFFF, "Color");
+ ntreeExecTree(ntree);
- return node;
}
-/* **************** show rgba node ************ */
+/* ******************************************************** */
+/* ********* Shader Node type definitions ***************** */
+/* ******************************************************** */
-static void node_shader_exec_show_rgb(bNode *node, bNodeStack **ns)
-{
- /* only input node! */
- QUATCOPY(node->ns.vec, ns[0]->vec);
+/* SocketType syntax:
+ socket type, max connections (0 is no limit), name, 4 values for default, 2 values for range */
+
+/* Verification rule: If name changes, a saved socket and its links will be removed! Type changes are OK */
+
+/* *************** INPUT ********************* */
+static bNodeSocketType sh_node_input_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_input= {
+ /* type code */ SH_NODE_INPUT,
+ /* name */ "Input",
+ /* width+range */ 80, 60, 200,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_PREVIEW,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_input_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_input,
-// printvecf(node->name, ns[0]->vec);
-}
+};
-static bNode *node_shader_add_show_rgb(bNodeTree *ntree)
-{
- bNode *node= nodeAddNode(ntree, "Show RGB");
+/* **************** OUTPUT ******************** */
+static bNodeSocketType sh_node_output_in[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 1, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 1, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_output= {
+ /* type code */ SH_NODE_OUTPUT,
+ /* name */ "Output",
+ /* width+range */ 80, 60, 200,
+ /* class+opts */ NODE_CLASS_OUTPUT, NODE_PREVIEW,
+ /* input sock */ sh_node_output_in,
+ /* output sock */ NULL,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_output,
- node->type= SH_NODE_SHOW_RGB;
- node->width= 80.0f;
- node->prv_h= 0.0f;
- node->ns.vec[3]= 1.0f; /* alpha init */
+};
+
+/* **************** MATERIAL ******************** */
+static bNodeSocketType sh_node_material_in[]= {
+ { SOCK_VECTOR, 1, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketType sh_node_material_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_material= {
+ /* type code */ SH_NODE_MATERIAL,
+ /* name */ "Material",
+ /* width+range */ 120, 60, 200,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS|NODE_PREVIEW,
+ /* input sock */ sh_node_material_in,
+ /* output sock */ sh_node_material_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_material,
- /* add sockets */
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "");
+};
+
+/* **************** TEXTURE ******************** */
+static bNodeSocketType sh_node_texture_out[]= {
+ { SOCK_VALUE, 0, "Value", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_RGBA , 0, "Color", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_texture= {
+ /* type code */ SH_NODE_TEXTURE,
+ /* name */ "Texture",
+ /* width+range */ 120, 60, 200,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS|NODE_PREVIEW,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_texture_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_texture,
- return node;
-}
+};
+
+/* **************** VALUE ******************** */
+static bNodeSocketType sh_node_value_out[]= {
+ { SOCK_VALUE, 0, "Value", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeType sh_node_value= {
+ /* type code */ SH_NODE_VALUE,
+ /* name */ "Value",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_value_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_value,
+
+};
-/* **************** API for add ************** */
+/* **************** RGB ******************** */
+static bNodeSocketType sh_node_rgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
-bNode *node_shader_add(bNodeTree *ntree, int type)
-{
- bNode *node= NULL;
-
- switch(type) {
- case SH_NODE_TEST:
- node= node_shader_add_test(ntree);
- break;
- case SH_NODE_VALUE:
- node= node_shader_add_value(ntree);
- break;
- case SH_NODE_RGB:
- node= node_shader_add_rgb(ntree);
- break;
- case SH_NODE_SHOW_RGB:
- node= node_shader_add_show_rgb(ntree);
- break;
- case SH_NODE_MIX_RGB:
- node= node_shader_add_mix_rgb(ntree);
- break;
- }
- return node;
-}
+static bNodeType sh_node_rgb= {
+ /* type code */ SH_NODE_RGB,
+ /* name */ "RGB",
+ /* width+range */ 100, 60, 140,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_rgb_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_rgb,
+
+};
-/* ******************* set the callbacks, called from UI, loader ***** */
+/* **************** MIX RGB ******************** */
+static bNodeSocketType sh_node_mix_rgb_in[]= {
+ { SOCK_VALUE, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "Color1", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "Color2", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType sh_node_mix_rgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_mix_rgb= {
+ /* type code */ SH_NODE_MIX_RGB,
+ /* name */ "Mix",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_OPERATOR, NODE_OPTIONS,
+ /* input sock */ sh_node_mix_rgb_in,
+ /* output sock */ sh_node_mix_rgb_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_mix_rgb,
+
+};
+
+
+/* **************** VALTORGB ******************** */
+static bNodeSocketType sh_node_valtorgb_in[]= {
+ { SOCK_VALUE, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType sh_node_valtorgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_valtorgb= {
+ /* type code */ SH_NODE_VALTORGB,
+ /* name */ "ColorRamp",
+ /* width+range */ 240, 200, 300,
+ /* class+opts */ NODE_CLASS_OPERATOR, NODE_OPTIONS,
+ /* input sock */ sh_node_valtorgb_in,
+ /* output sock */ sh_node_valtorgb_out,
+ /* storage */ "ColorBand",
+ /* execfunc */ node_shader_exec_valtorgb,
+
+};
+
+
+/* **************** RGBTOBW ******************** */
+static bNodeSocketType sh_node_rgbtobw_in[]= {
+ { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType sh_node_rgbtobw_out[]= {
+ { SOCK_VALUE, 0, "Val", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_rgbtobw= {
+ /* type code */ SH_NODE_RGBTOBW,
+ /* name */ "RGB to BW",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_OPERATOR, 0,
+ /* input sock */ sh_node_rgbtobw_in,
+ /* output sock */ sh_node_rgbtobw_out,
+ /* storage */ "ColorBand",
+ /* execfunc */ node_shader_exec_rgbtobw,
+
+};
+
+
+/* ****************** types array for all shaders ****************** */
+
+bNodeType *node_all_shaders[]= {
+ &sh_node_input,
+ &sh_node_output,
+ &sh_node_material,
+ &sh_node_value,
+ &sh_node_rgb,
+ &sh_node_mix_rgb,
+ &sh_node_valtorgb,
+ &sh_node_rgbtobw,
+ &sh_node_texture,
+ NULL
+};
-void node_shader_set_execfunc(bNode *node)
-{
- switch(node->type) {
- case SH_NODE_TEST:
- node->execfunc= node_shader_exec_test;
- break;
- case SH_NODE_VALUE:
- node->execfunc= node_shader_exec_value;
- break;
- case SH_NODE_RGB:
- node->execfunc= node_shader_exec_rgb;
- break;
- case SH_NODE_SHOW_RGB:
- node->execfunc= node_shader_exec_show_rgb;
- break;
- case SH_NODE_MIX_RGB:
- node->execfunc= node_shader_exec_mix_rgb;
- break;
- }
-}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 7873340f7d8..123298c723a 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -199,25 +199,39 @@ void free_plugin_tex(PluginTex *pit)
/* ****************** COLORBAND ******************* */
-ColorBand *add_colorband()
+ColorBand *add_colorband(int rangetype)
{
ColorBand *coba;
int a;
coba= MEM_callocN( sizeof(ColorBand), "colorband");
- coba->data[0].r= 0.0;
- coba->data[0].g= 0.0;
- coba->data[0].b= 0.0;
- coba->data[0].a= 0.0;
coba->data[0].pos= 0.0;
-
- coba->data[1].r= 0.0;
- coba->data[1].g= 1.0;
- coba->data[1].b= 1.0;
- coba->data[1].a= 1.0;
coba->data[1].pos= 1.0;
+ if(rangetype==0) {
+ coba->data[0].r= 0.0;
+ coba->data[0].g= 0.0;
+ coba->data[0].b= 0.0;
+ coba->data[0].a= 0.0;
+
+ coba->data[1].r= 0.0;
+ coba->data[1].g= 1.0;
+ coba->data[1].b= 1.0;
+ coba->data[1].a= 1.0;
+ }
+ else {
+ coba->data[0].r= 0.0;
+ coba->data[0].g= 0.0;
+ coba->data[0].b= 0.0;
+ coba->data[0].a= 1.0;
+
+ coba->data[1].r= 1.0;
+ coba->data[1].g= 1.0;
+ coba->data[1].b= 1.0;
+ coba->data[1].a= 1.0;
+ }
+
for(a=2; a<MAXCOLORBAND; a++) {
coba->data[a].r= 0.5;
coba->data[a].g= 0.5;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index bf6928b7b20..295ebc15a68 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -76,6 +76,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_object_fluidsim.h" // NT
@@ -1205,6 +1206,61 @@ static void test_pointer_array(FileData *fd, void **mat)
}
}
+/* ************ READ NODE TREE *************** */
+
+/* ntree is not NULL */
+static void lib_link_nodetree(FileData *fd, ID *id, bNodeTree *ntree)
+{
+ bNode *node;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ node->id= newlibadr_us(fd, id->lib, node->id);
+}
+
+static bNodeTree *direct_link_nodetree(FileData *fd, bNodeTree *ntree)
+{
+ /* note: writing and reading goes in sync, for speed */
+ if(ntree) {
+ ntree= newdataadr(fd, ntree);
+
+ if(ntree) {
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link;
+
+ ntree->init= 0; /* to set callbacks */
+ ntree->data= NULL; /* safety only */
+
+ link_list(fd, &ntree->nodes);
+ for(node= ntree->nodes.first; node; node= node->next) {
+ node->storage= newdataadr(fd, node->storage);
+ link_list(fd, &node->inputs);
+ link_list(fd, &node->outputs);
+ }
+ link_list(fd, &ntree->links);
+
+ /* and we connect the rest */
+ for(node= ntree->nodes.first; node; node= node->next) {
+ node->preview= NULL;
+ node->lasty= 0;
+ for(sock= node->inputs.first; sock; sock= sock->next)
+ sock->link= newdataadr(fd, sock->link);
+ }
+ for(link= ntree->links.first; link; link= link->next) {
+ link->fromnode= newdataadr(fd, link->fromnode);
+ link->tonode= newdataadr(fd, link->tonode);
+ link->fromsock= newdataadr(fd, link->fromsock);
+ link->tosock= newdataadr(fd, link->tosock);
+ }
+ /* right after read file, the save-undo will need it */
+ /* verify also does a full type checking. This is relative slow... so we
+ might move this later to the do_versions, and put ntreeInitTypes() only here */
+ ntreeVerifyTypes(ntree);
+ }
+ }
+ return ntree;
+}
+
/* ************ READ PACKEDFILE *************** */
static PackedFile *direct_link_packedfile(FileData *fd, PackedFile *oldpf)
@@ -1993,7 +2049,7 @@ static void lib_link_material(FileData *fd, Main *main)
ma->ipo= newlibadr_us(fd, ma->id.lib, ma->ipo);
ma->group= newlibadr_us(fd, ma->id.lib, ma->group);
-
+
for(a=0; a<MAX_MTEX; a++) {
mtex= ma->mtex[a];
if(mtex) {
@@ -2005,7 +2061,10 @@ static void lib_link_material(FileData *fd, Main *main)
for (ml=ma->layers.first; ml; ml=ml->next)
ml->mat= newlibadr_us(fd, ma->id.lib, ml->mat);
-
+
+ if(ma->nodetree)
+ lib_link_nodetree(fd, &ma->id, ma->nodetree);
+
ma->id.flag -= LIB_NEEDLINK;
}
ma= ma->id.next;
@@ -2026,7 +2085,8 @@ static void direct_link_material(FileData *fd, Material *ma)
direct_link_scriptlink(fd, &ma->scriptlink);
link_list(fd, &ma->layers);
-
+
+ ma->nodetree= direct_link_nodetree(fd, ma->nodetree);
}
/* ************ READ MESH ***************** */
@@ -2994,6 +3054,13 @@ void lib_link_screen_restore(Main *newmain, Scene *curscene)
ssound->sound= restore_pointer_by_name(newmain, (ID *)ssound->sound, 1);
}
+ else if(sl->spacetype==SPACE_NODE) {
+ SpaceNode *snode= (SpaceNode *)sl;
+
+ snode->nodetree= NULL;
+ snode->block= NULL;
+ snode->flag |= SNODE_DO_PREVIEW;
+ }
}
sa= sa->next;
}
@@ -3088,6 +3155,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
SpaceNode *snode= (SpaceNode *)sl;
snode->nodetree= NULL;
snode->block= NULL;
+ snode->flag |= SNODE_DO_PREVIEW;
}
}
@@ -5115,11 +5183,8 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ma->strand_sta= ma->strand_end= 1.0f;
ma->mode |= MA_TANGENT_STR;
}
- /* remove this test before 2.40 too! pad is set to denote check was done */
- if(ma->pad==0) {
- if(ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF;
- ma->pad= 1;
- }
+ if(ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF;
+
/* orange stuff, so should be done for 2.40 too */
if(ma->layers.first==NULL) {
ma->ml_flag= ML_RENDER;
@@ -5379,6 +5444,13 @@ static void expand_material(FileData *fd, Main *mainvar, Material *ma)
if(ml->mat)
expand_doit(fd, mainvar, ml->mat);
}
+
+ if(ma->nodetree) {
+ bNode *node;
+ for(node= ma->nodetree->nodes.first; node; node= node->next)
+ if(node->id)
+ expand_doit(fd, mainvar, node->id);
+ }
}
static void expand_lamp(FileData *fd, Main *mainvar, Lamp *la)
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 23d9d04ce3b..704215aaa7e 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -124,6 +124,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "DNA_material_types.h"
#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_oops_types.h"
@@ -153,6 +154,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "BKE_global.h" // for G
#include "BKE_library.h" // for set_listbasepointers
#include "BKE_main.h" // G.main
+#include "BKE_node.h"
#include "BKE_packedFile.h" // for packAll
#include "BKE_screen.h" // for waitcursor
#include "BKE_scene.h" // for do_seq
@@ -317,7 +319,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
BHead bh;
short *sp;
- if(adr==0 || nr==0) return;
+ if(adr==NULL || nr==0) return;
/* init BHead */
bh.code= filecode;
@@ -326,7 +328,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
bh.SDNAnr= dna_findstruct_nr(wd->sdna, structname);
if(bh.SDNAnr== -1) {
- printf("error: can't find SDNA code %s\n", structname);
+ printf("error: can't find SDNA code <%s>\n", structname);
return;
}
sp= wd->sdna->structs[bh.SDNAnr];
@@ -360,6 +362,33 @@ static void writedata(WriteData *wd, int filecode, int len, void *adr) /* do not
if(len) mywrite(wd, adr, len);
}
+/* this is only direct data */
+static void write_nodetree(WriteData *wd, bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link;
+
+ writestruct(wd, DATA, "bNodeTree", 1, ntree);
+
+ /* for link_list() speed, we write per list */
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ writestruct(wd, DATA, "bNode", 1, node);
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->storage)
+ writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage);
+ for(sock= node->inputs.first; sock; sock= sock->next)
+ writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ for(sock= node->outputs.first; sock; sock= sock->next)
+ writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ }
+
+ for(link= ntree->links.first; link; link= link->next)
+ writestruct(wd, DATA, "bNodeLink", 1, link);
+}
+
static void write_scriptlink(WriteData *wd, ScriptLink *slink)
{
writedata(wd, DATA, sizeof(void *)*slink->totscript, slink->scripts);
@@ -1014,7 +1043,9 @@ static void write_materials(WriteData *wd, ListBase *idbase)
for (ml=ma->layers.first; ml; ml=ml->next)
writestruct(wd, DATA, "MaterialLayer", 1, ml);
-
+
+ if(ma->nodetree)
+ write_nodetree(wd, ma->nodetree);
}
ma= ma->id.next;
}
diff --git a/source/blender/include/BIF_glutil.h b/source/blender/include/BIF_glutil.h
index 43fa758d3cf..b585f91ec3e 100644
--- a/source/blender/include/BIF_glutil.h
+++ b/source/blender/include/BIF_glutil.h
@@ -125,7 +125,7 @@ void glaRasterPosSafe2f (float x, float y, float known_good_x, float known_good
* to use the glScissor functionality if images are to be drawn
* with an inset view matrix.
*/
-void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, void *rect);
+void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, int format, void *rect);
/**
* Functions like a limited glDrawPixels, but actually draws the
@@ -135,11 +135,11 @@ void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, void *rect);
* pixel unpacking parameters are _not_ respected.
* @attention This routine makes many assumptions: the rect data
- * is expected to be in RGBA unsigned byte format, and the
+ * is expected to be in RGBA byte or float format, and the
* modelview and projection matrices are assumed to define a
* 1-to-1 mapping to screen space.
*/
-void glaDrawPixelsTex (float x, float y, int img_w, int img_h, void *rect);
+void glaDrawPixelsTex (float x, float y, int img_w, int img_h, int format, void *rect);
/* 2D Drawing Assistance */
diff --git a/source/blender/include/BIF_interface.h b/source/blender/include/BIF_interface.h
index 70a7de4a84c..9ddab3305c8 100644
--- a/source/blender/include/BIF_interface.h
+++ b/source/blender/include/BIF_interface.h
@@ -153,6 +153,7 @@ struct ScrArea;
#define PULLDOWN (27<<9)
#define ROUNDBOX (28<<9)
#define CHARTAB (29<<9)
+#define BUT_COLORBAND (30<<9)
#define BUTTYPE (31<<9)
diff --git a/source/blender/include/BIF_interface_icons.h b/source/blender/include/BIF_interface_icons.h
index 2ec14b53cf2..ba5a119df7e 100644
--- a/source/blender/include/BIF_interface_icons.h
+++ b/source/blender/include/BIF_interface_icons.h
@@ -47,8 +47,8 @@ void BIF_icons_init(int first_dyn_id);
int BIF_icon_get_width(int icon_id);
int BIF_icon_get_height(int icon_id);
void BIF_icon_set_aspect(int icon_id, float aspect);
-void BIF_icon_draw(int x, int y, int icon_id);
-void BIF_icon_draw_blended(int x, int y, int icon_id, int colorid, int shade);
+void BIF_icon_draw(float x, float y, int icon_id);
+void BIF_icon_draw_blended(float x, float y, int icon_id, int colorid, int shade);
void BIF_icons_free();
void BIF_icons_free_drawinfo(void *drawinfo);
diff --git a/source/blender/include/BIF_previewrender.h b/source/blender/include/BIF_previewrender.h
index cb8041832b5..b8ed73505f5 100644
--- a/source/blender/include/BIF_previewrender.h
+++ b/source/blender/include/BIF_previewrender.h
@@ -35,6 +35,8 @@ struct RenderInfo;
struct Image;
struct ScrArea;
+#define PREVIEW_RENDERSIZE 140
+
typedef void (*VectorDrawFunc)(int x, int y, int w, int h, float alpha);
/* stores rendered preview - is also used for icons */
@@ -45,22 +47,23 @@ typedef struct RenderInfo {
short cury;
} RenderInfo;
-/* Set the previewrect for drawing */
-void BIF_set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short pr_rectx, short pr_recty);
-void BIF_end_previewrect(void);
-
-void BIF_all_preview_changed(void);
-void BIF_preview_changed (struct SpaceButs *sbuts);
-void BIF_previewrender_buts (struct SpaceButs *sbuts);
/* Render the preview
- * a) into the ri->rect
- * b) draw it in the area using the block UIMat
- if doDraw is false, the preview is not drawn and the function is not dynamic,
- so no events are processed. Hopefully fast enough for 64x64 rendering or
- at least 32x32 */
-void BIF_previewrender (struct ID* id, struct RenderInfo *ri, struct ScrArea *area, int doDraw);
+pr_method:
+- PR_DRAW_RENDER: preview is rendered and drawn, as indicated by called context (buttons panel)
+- PR_ICON_RENDER: the preview is not drawn and the function is not dynamic,
+ so no events are processed. Hopefully fast enough for at least 32x32
+- PR_DO_RENDER: preview is rendered, not drawn, but events are processed for afterqueue,
+ in use for node editor now.
+*/
+
+#define PR_DRAW_RENDER 0
+#define PR_ICON_RENDER 1
+#define PR_DO_RENDER 2
+
+void BIF_previewrender (struct ID *id, struct RenderInfo *ri, struct ScrArea *area, int pr_method);
+void BIF_previewrender_buts (struct SpaceButs *sbuts);
void BIF_previewdraw (void);
-void BIF_previewdraw_render(struct RenderInfo* ri, struct ScrArea* area);
+void BIF_preview_changed(short id_code);
+
-void BIF_calcpreview_image(struct Image* img, struct RenderInfo* ri, unsigned int w, unsigned int h);
diff --git a/source/blender/include/BIF_resources.h b/source/blender/include/BIF_resources.h
index 933c619f11f..3e366710992 100644
--- a/source/blender/include/BIF_resources.h
+++ b/source/blender/include/BIF_resources.h
@@ -182,8 +182,8 @@ typedef enum {
ICON_CHECKBOX_HLT,
ICON_LINK,
ICON_INLINK,
- ICON_BEVELBUT_HLT,
- ICON_BEVELBUT_DEHLT,
+ ICON_BLANK12,
+ ICON_BLANK13,
ICON_PASTEDOWN,
ICON_COPYDOWN,
ICON_CONSTANT,
@@ -456,7 +456,13 @@ enum {
TH_STRIP,
TH_STRIP_SELECT,
- TH_LAMP
+ TH_LAMP,
+
+ TH_NODE,
+ TH_NODE_IN_OUT,
+ TH_NODE_OPERATOR,
+ TH_NODE_GENERATOR,
+ TH_NODE_FREE,
};
/* XXX WARNING: previous is saved in file, so do not change order! */
diff --git a/source/blender/include/BSE_node.h b/source/blender/include/BSE_node.h
index 0cb8018c0d0..458887c91d1 100644
--- a/source/blender/include/BSE_node.h
+++ b/source/blender/include/BSE_node.h
@@ -30,27 +30,36 @@
#ifndef BSE_NODE_H
#define BSE_NODE_H
+/* ********** drawing sizes *********** */
#define NODE_DY 20
#define NODE_DYS 10
-#define NODE_SOCK 5
+#define NODE_SOCKSIZE 5
+#define BASIS_RAD 8.0f
+#define HIDDEN_RAD 15.0f
+
struct SpaceNode;
struct bNode;
-
-/* ************* button events *********** */
-
-#define B_NODE_EXEC 1
+struct Material;
/* ************* API for editnode.c *********** */
+void snode_tag_dirty(struct SpaceNode *snode);
+
+void snode_set_context(struct SpaceNode *snode);
void node_deselectall(struct SpaceNode *snode, int swap);
void node_transform_ext(int mode, int unused);
+void node_shader_default(struct Material *ma);
-/* ************* Shader nodes ***************** */
+/* ************* drawnode.c *************** */
+void node_draw_link(struct SpaceNode *snode, struct bNodeLink *link);
+
+void init_node_butfuncs(void);
-void node_shader_set_drawfunc(struct bNode *node);
+/* ************* Shader nodes ***************** */
+struct bNode *node_add_shadernode(struct SpaceNode *snode, int type, float locx, float locy);
#endif
diff --git a/source/blender/include/blendef.h b/source/blender/include/blendef.h
index 5963d5e3e14..e0061dc3403 100644
--- a/source/blender/include/blendef.h
+++ b/source/blender/include/blendef.h
@@ -374,7 +374,8 @@
#define B_NLAHOME 801
/* NODE: 851-900 */
-#define B_NODEHOME 851
+#define B_NODEHOME 851
+#define B_NODE_USEMAT 852
/* FREE 901 - 999 */
diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h
index 713f9abf488..7dae5af58e3 100644
--- a/source/blender/include/butspace.h
+++ b/source/blender/include/butspace.h
@@ -37,7 +37,9 @@
struct Base;
struct Object;
struct ID;
-
+struct ColorBand;
+struct uiBlock;
+struct rctf;
/* buts->scaflag */
#define BUTS_SENS_SEL 1
@@ -87,6 +89,7 @@ extern void do_armbuts(unsigned short event);
extern char *get_vertexgroup_menustr(struct Object *ob); // used in object buttons
/* shading */
+extern void draw_colorband_buts_small(struct uiBlock *block, struct ColorBand *coba, rctf *rct, int event);
extern void material_panels(void);
extern void do_matbuts(unsigned short event);
extern void lamp_panels(void);
@@ -122,6 +125,7 @@ void test_matpoin_but(char *name, struct ID **idpp);
void test_scriptpoin_but(char *name, struct ID **idpp);
void test_actionpoin_but(char *name, ID **idpp);
void test_grouppoin_but(char *name, ID **idpp);
+void test_texpoin_but(char *name, ID **idpp);
void test_idbutton_cb(void *namev, void *arg2_unused);
@@ -169,20 +173,25 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
#define B_ACTCOL 1204
#define B_MATFROM 1205
#define B_MATPRV 1206
-#define B_MTEXCOL 1207
-#define B_TEXCLEAR 1208
-#define B_MATPRV_DRAW 1209
-#define B_MTEXPASTE 1210
-#define B_MTEXCOPY 1211
-#define B_MATLAY 1212
-#define B_MATHALO 1213
-#define B_MATZTRANSP 1214
-#define B_MATRAYTRANSP 1215
-#define B_MATCOLORBAND 1216
-/* yafray: material preset menu event */
-#define B_MAT_YF_PRESET 1217
-
-#define B_MAT_LAYERBROWSE 1218
+#define B_LAMPPRV 1207
+#define B_WORLDPRV 1208
+#define B_TEXPRV 1209
+#define B_MTEXCOL 1210
+#define B_TEXCLEAR 1211
+#define B_MTEXPASTE 1212
+#define B_MTEXCOPY 1213
+#define B_MATLAY 1214
+#define B_MATHALO 1215
+#define B_MATZTRANSP 1216
+#define B_MATRAYTRANSP 1217
+#define B_MATCOLORBAND 1218
+ /* yafray: material preset menu event */
+#define B_MAT_YF_PRESET 1219
+
+#define B_MAT_LAYERBROWSE 1220
+#define B_MAT_USENODES 1221
+ /* also handled in editnode.c */
+#define B_NODE_EXEC 1222
/* *********************** */
#define B_TEXBUTS 1400
@@ -207,7 +216,6 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
#define B_REDRAWCBAND 1318
#define B_BANDCOL 1319
#define B_LOADTEXIMA1 1320
-#define B_TEXPRV 1321
#define B_PLUGBUT 1325
/* B_PLUGBUT reserves 24 buttons at least! */
diff --git a/source/blender/include/interface.h b/source/blender/include/interface.h
index 1c26a714c51..526f24e704e 100644
--- a/source/blender/include/interface.h
+++ b/source/blender/include/interface.h
@@ -223,6 +223,8 @@ extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, flo
extern void ui_set_embossfunc(uiBut *but, int drawtype);
extern void ui_draw_but(uiBut *but);
extern void ui_rasterpos_safe(float x, float y, float aspect);
+extern void ui_draw_tria_icon(float x, float y, float aspect, char dir);
+extern void ui_draw_anti_x(float x1, float y1, float x2, float y2);
#endif
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 79d73ff2b99..6d8527d5896 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -47,6 +47,7 @@ struct Ipo;
struct Material;
struct ColorBand;
struct Group;
+struct bNodeTree;
typedef struct MaterialLayer {
struct MaterialLayer *next, *prev;
@@ -88,7 +89,7 @@ typedef struct Material {
float sbias; /* shadow bias */
/* for buttons and render*/
- char rgbsel, texact, pr_type, pad;
+ char rgbsel, texact, pr_type, use_nodes;
short pr_back, pr_lamp, septex, ml_flag; /* ml_flag is for disable base material */
/* shaders */
@@ -109,8 +110,9 @@ typedef struct Material {
struct MTex *mtex[10];
ListBase layers;
+ struct bNodeTree *nodetree;
struct Ipo *ipo;
- struct Group *group;
+ struct Group *group; /* light group */
/* dynamic properties */
float friction, fh, reflect;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index db118d706b3..3c350e5c559 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -36,17 +36,28 @@
struct ID;
struct SpaceNode;
struct bNodeLink;
+struct bNodeType;
#define NODE_MAXSTR 32
+
+typedef struct bNodeStack {
+ float vec[4];
+ float min, max; /* min/max for values (UI writes it, execute might use it) */
+ void *data;
+ short hasinput, pad; /* hasinput tagged for executing */
+ int pad1;
+} bNodeStack;
+
typedef struct bNodeSocket {
struct bNodeSocket *next, *prev;
char name[32];
+ bNodeStack ns; /* custom data for inputs, only UI writes in this */
short type, flag, limit, stack_index;
float locx, locy;
- struct bNodeLink *link; /* input link to parent, max one! */
+ struct bNodeLink *link; /* input link to parent, max one! set in nodeSolveOrder() */
} bNodeSocket;
@@ -57,11 +68,13 @@ typedef struct bNodeSocket {
#define SOCK_IMAGE 3
/* sock->flag, first bit is select */
+#
+#
+typedef struct bNodePreview {
+ float *rect;
+ char xsize, ysize;
+} bNodePreview;
-typedef struct bNodeStack {
- float vec[4];
- void *data;
-} bNodeStack;
/* limit data in bNode to what we want to see saved? */
typedef struct bNode {
@@ -69,23 +82,32 @@ typedef struct bNode {
char name[32];
short type, flag, done, level;
+ short lasty, pad, pad1, pad2;
ListBase inputs, outputs;
- struct ID *id; /* optional link to libdata */
- bNodeStack ns; /* builtin data, for UI to write into */
+ struct ID *id; /* optional link to libdata */
+ void *storage; /* custom data, must be struct, for storage in file */
- float locx, locy; /* root offset for drawing */
- float width, prv_h;
- rctf tot; /* entire boundbox */
- rctf prv; /* optional preview area */
+ float locx, locy; /* root offset for drawing */
+ float width;
+ short custom1, custom2; /* to be abused for buttons */
+ rctf totr; /* entire boundbox */
+ rctf butr; /* optional buttons area */
+ rctf prvr; /* optional preview area */
+ bNodePreview *preview; /* optional preview image */
- void (*drawfunc)(struct SpaceNode *, struct bNode *);
- void (*execfunc)(struct bNode *, struct bNodeStack **);
+ struct bNodeType *typeinfo; /* lookup of callbacks and defaults */
} bNode;
/* node->flag */
-#define NODE_SELECT 1
+#define NODE_SELECT 1
+#define NODE_OPTIONS 2
+#define NODE_PREVIEW 4
+#define NODE_HIDDEN 8
+#define NODE_ACTIVE 16
+#define NODE_ACTIVE_ID 32
+#define NODE_DO_OUTPUT 64
typedef struct bNodeLink {
struct bNodeLink *next, *prev;
@@ -99,10 +121,11 @@ typedef struct bNodeLink {
typedef struct bNodeTree {
ListBase nodes, links;
- ListBase inputs, outputs; /* default inputs and outputs, for solving tree */
- bNodeStack *stack;
+ void *data; /* custom data, set by execute caller, no read/write handling */
+ bNodeStack *stack; /* stack is only while executing */
- int type, init;
+ int type, init; /* set init on fileread */
+ struct bNodeType **alltypes; /* type definitions, set on fileread */
} bNodeTree;
@@ -111,9 +134,8 @@ typedef struct bNodeTree {
#define NTREE_COMPOSIT 1
/* ntree->init, flag */
-#define NTREE_EXEC_SET 1
-#define NTREE_DRAW_SET 2
-
+#define NTREE_TYPE_INIT 1
+#define NTREE_EXEC_INIT 2
#endif
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 4ae9445dca1..902e0805aaa 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -300,17 +300,19 @@ typedef struct SpaceNode {
View2D v2d;
- struct ID *from;
- int flag;
+ struct ID *id, *from; /* context, no need to save in file? well... pinning... */
+ short flag, menunr; /* menunr: browse id block in header */
float aspect;
void *curfont;
struct uiBlock *block;
struct bNodeTree *nodetree;
+ int treetype, pad; /* treetype: same nodetree->type */
} SpaceNode;
-
+/* snode->flag */
+#define SNODE_DO_PREVIEW 1
#
#
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index f1441e7b720..f5cc2ce4810 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -85,7 +85,7 @@ typedef struct ThemeSpace {
char edge[4], edge_select[4];
char edge_seam[4], edge_facesel[4];
char face[4], face_select[4]; // solid faces
- char face_dot[4]; // selected color
+ char face_dot[4]; // selected color
char normal[4];
char bone_solid[4], bone_pose[4];
char strip[4], strip_select[4];
@@ -93,8 +93,8 @@ typedef struct ThemeSpace {
char vertex_size, facedot_size;
char bpad[2];
- char syntaxl[4], syntaxn[4], syntaxb[4]; //syn-
- char syntaxv[4], syntaxc[4]; //tax
+ char syntaxl[4], syntaxn[4], syntaxb[4]; // syntax for textwindow and nodes
+ char syntaxv[4], syntaxc[4];
} ThemeSpace;
@@ -119,6 +119,7 @@ typedef struct bTheme {
ThemeSpace text;
ThemeSpace toops;
ThemeSpace ttime;
+ ThemeSpace tnode;
} bTheme;
diff --git a/source/blender/render/extern/include/render.h b/source/blender/render/extern/include/render.h
index 5f8ceb45b15..c0eced8ad3a 100644
--- a/source/blender/render/extern/include/render.h
+++ b/source/blender/render/extern/include/render.h
@@ -190,6 +190,7 @@ void do_specular_ramp(ShadeInput *shi, float is, float t, float *spec);
void ramp_spec_result(float *specr, float *specg, float *specb, ShadeInput *shi);
void matlayer_blend(struct MaterialLayer *ml, float blendfac, struct ShadeResult *target, struct ShadeResult *src);
+void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col);
/* --------------------------------------------------------------------- */
/* ray.c (2) */
diff --git a/source/blender/render/extern/include/render_types.h b/source/blender/render/extern/include/render_types.h
index dc2f5616f29..ed3a54975ce 100644
--- a/source/blender/render/extern/include/render_types.h
+++ b/source/blender/render/extern/include/render_types.h
@@ -102,7 +102,8 @@ typedef struct ShadeInput
float dxrefract[3], dyrefract[3];
float dxstrand, dystrand;
- float xs, ys; /* pixel to be rendered */
+ int xs, ys; /* pixel to be rendered */
+ short do_preview, pr_type; /* for nodes, in previewrender */
short osatex, puno;
int mask;
int depth;
diff --git a/source/blender/render/intern/source/ray.c b/source/blender/render/intern/source/ray.c
index 30973b0891b..a91219846de 100644
--- a/source/blender/render/intern/source/ray.c
+++ b/source/blender/render/intern/source/ray.c
@@ -2071,7 +2071,7 @@ void ray_ao(ShadeInput *shi, World *wrld, float *shadfac)
nrm= shi->facenor;
}
- vec= sphere_sampler(wrld->aomode, wrld->aosamp, floor(shi->xs+0.5), floor(shi->ys+0.5) );
+ vec= sphere_sampler(wrld->aomode, wrld->aosamp, shi->xs, shi->ys);
// warning: since we use full sphere now, and dotproduct is below, we do twice as much
tot= 2*wrld->aosamp*wrld->aosamp;
@@ -2202,7 +2202,7 @@ void ray_shadow(ShadeInput *shi, LampRen *lar, float *shadfac)
else shadfac[3]= 1.0; // 1.0=full light
fac= 0.0;
- jitlamp= give_jitter_plane(lar, floor(shi->xs+0.5), floor(shi->ys+0.5));
+ jitlamp= give_jitter_plane(lar, shi->xs, shi->ys);
a= lar->ray_totsamp;
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 890a0b26674..acac0d48e2c 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -2198,7 +2198,7 @@ void shade_input_set_coords(ShadeInput *shi, float u, float v, int i1, int i2, i
}
if(texco & TEXCO_REFL) {
/* mirror reflection colour textures (and envmap) */
- calc_R_ref(shi);
+ calc_R_ref(shi); /* wrong location for normal maps! XXXXXXXXXXXXXX */
}
if(texco & TEXCO_STRESS) {
float *s1, *s2, *s3;
@@ -2279,9 +2279,10 @@ void *shadepixel(float x, float y, int z, int facenr, int mask, float *col, floa
return NULL;
}
/* currently in use for dithering (soft shadow) and detecting thread */
- shi.xs= x;
- shi.ys= y;
-
+ shi.xs= (int)(x+0.5f);
+ shi.ys= (int)(y+0.5f);
+ shi.do_preview= 0;
+
/* mask is used to indicate amount of samples (ray shad/mir and AO) */
shi.mask= mask;
shi.depth= 0; // means first hit, not raytracing
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index f792a07e307..9b38a65a4b9 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -2352,7 +2352,7 @@ void render_realtime_texture(ShadeInput *shi)
tex2.type= TEX_IMAGE;
}
- if(((int)(shi->ys+0.5)) & 1) tex= &tex1; else tex= &tex2; // threadsafe
+ if(shi->ys & 1) tex= &tex1; else tex= &tex2; // threadsafe
ima = shi->vlr->tface->tpage;
if(ima) {
diff --git a/source/blender/src/blenderbuttons.c b/source/blender/src/blenderbuttons.c
index e8a31711523..0ac27df840c 100644
--- a/source/blender/src/blenderbuttons.c
+++ b/source/blender/src/blenderbuttons.c
@@ -1,1442 +1,1430 @@
/* DataToC output of file <blenderbuttons> */
-int datatoc_blenderbuttons_size= 49463;
+int datatoc_blenderbuttons_size= 49081;
char datatoc_blenderbuttons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1,
- 0, 8, 2, 0, 0, 0, 74,242, 89, 48, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0,
- 0, 0, 4,103, 65, 77, 65, 0, 0,192,153,201, 12,156,227, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,110, 39, 0, 0,115,175, 0,
- 0,246,112, 0, 0,129,232, 0, 0,107,215, 0, 0,226,170, 0, 0, 48,131, 0, 0, 21, 42,251,118,133,113, 0, 0,192,173, 73,
- 68, 65, 84,120,218, 98,244,137,169,101, 24, 5,163, 96, 20,140,130, 81, 48,242, 0, 64, 0, 49,141, 6,193, 40, 24, 5,163, 96,
- 20,140, 76, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0,
- 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64, 44,112,
-150,175,173, 12,241,218, 54, 31,126,130,204, 29,213, 59, 8,245,162,105,167,186,189, 7, 14, 28,112,112,112, 24, 13,231, 81,189,
-163,122, 7,185, 94, 60, 0, 32,128, 88,134, 71, 61,150,158,158, 14,103,207,156, 57,115, 64,108,159, 49, 99, 6, 35, 35,227,176,
-111, 50,192,131, 58, 50, 50,114,205,154, 53, 16,118, 72, 72,200,104, 99,106,248, 69, 52,253,179,210, 40,160, 51, 0, 8, 32, 22,
- 90,164,128,219,183,111,247,244,244, 64,216, 37, 37, 37,170,170,170,116,240,201,255,255,255,129, 36,253,139, 96, 96, 40, 61,120,
-240, 0,200, 80, 80, 80, 24,144,234, 7,107, 45,136,213, 37,192, 54, 59,126, 19,150, 47, 95,142,223,253, 64, 43, 86,173, 90, 5,
- 97,175, 95,191,222,213,213, 21,194, 6,214, 4,180,171, 3,140,141,141,129,228,217,179,103,201,144, 29,153,224,222,189,123,157,
-157,157,112,110,121,121,185,146,146,210, 32,175, 54, 6,208,205, 35, 25, 0, 4, 16, 11,158, 66, 28, 66,146, 90,124, 67,138,161,
-198, 85, 45, 60,178,252, 95, 30,127,172, 15,171, 25,216, 98,145,214, 0,232, 53, 96,209,255, 0, 12,118,236,216, 65,255,118, 19,
- 36,192,103,130, 1,144,221,213,213, 5,228,150,149,149, 97, 85, 28, 24, 24, 8, 97,252,249,243,247,215,239,159,191,126,254,130,
-128, 63,127,254,224,210,130,181,244, 71, 3,192,154,128,166,117, 0,158,218, 11, 82, 1,140, 2, 92,237, 0, 32,128, 20,172,116,
- 72,150, 16,171,201,200, 2, 3,232,230, 17, 14, 0, 2, 8,103, 5, 0,108,194,175,170,173, 10,107,110, 35, 41, 14,128, 17, 9,
- 41,250,129,236, 55,223,222, 50, 8, 51, 84,238,109,248,116,239,125,122, 42,253,138, 69,204,196, 68,107,171,225,117,128,135,135,
- 7,144, 4,178,233,233,217,253,251,247, 3, 25,142,142,142,104,117, 0, 30, 0, 44,238,127,253,250,253,235, 23, 74,233,127,230,
-204, 25, 19, 19, 19,130, 54,134,133,133, 65, 24,145,145,145,187,119,239,134, 87, 0,100, 68, 16,145,161, 4,108,221, 3, 75,127,
- 55, 55, 55,100,193, 93,187,118, 1,251, 43, 16, 54,214,169,136, 17, 94,250, 35,135, 45, 25,229, 50,217, 90,200,232, 7, 80,203,
-205,163,128, 12, 0, 16, 64, 44,184,154,255,106,106,106,170, 60,124, 36,117, 2,224,165, 63,176,232,111,119,110,128, 8, 38,110,
-204, 98, 16, 99, 8,236, 10, 35, 24,151,152, 5, 55,121,101,247,227,199,143,129,164,172,172, 44,156, 1, 49,153,186,135, 94,160,
-121, 7, 94, 7,252,254,253,103,198,140, 25,148, 55,130,136,209,142, 86,250,195, 53, 98, 13, 73,148,210,255, 55,176,244,255,249,
- 19, 92, 9,192, 75,255,255,255,254, 19, 83,250, 3, 85, 66,216,189,189,189,240, 38, 63,124, 50,128,120, 55,163, 57,155,120, 0,
- 47,250,129, 53,144,161,161,225,104, 30, 70, 30, 69,193,154,120,224, 73, 2,168,128,224,184, 10,188, 67, 9, 73,195,112, 46, 49,
-205, 32,204,162,156, 96, 70, 64,115, 51,176, 73,193,200,200,232,226,226, 66,146,155, 33, 32, 57, 57,121,238,220,185,163,201,128,
- 36, 0, 16, 64, 76,184,154,255, 45,225, 33, 63, 94,191, 46,209,214,128,143,230,227, 7,144, 33, 35,120,233, 95, 82, 82, 2,140,
- 66, 32, 57,223,127, 26, 80, 92, 64, 93, 4,174, 6, 15, 40,155,122, 11,136,178,123,174,199, 55, 95, 9,170,188, 64,170,103,158,
- 60,121,130,167, 74,160,110,233, 15, 44,235, 49,139,108, 96, 29, 0, 44, 82,205,205,204, 72, 53, 13, 50,186, 2, 4,251, 97, 0,
-127, 33, 14, 47, 73, 29,193, 0, 51,195,227, 46,253,255,130,138,253,159,160,193, 31,228,210,255,239,223,191, 95,191,127, 37,232,
- 84, 72, 47, 1,185,163,176, 6, 12,136, 28,252, 1,185, 25,105, 36, 7,200, 38,232, 77,172,165, 63,176,232, 7,246,114, 32,165,
- 63, 43, 11,235,104, 54, 38, 56,108, 2, 17, 68, 30,100,199, 95,148,147,215, 2,131, 40, 70, 46,253,113, 53,236,176,186, 25, 88,
-250, 3,211,210,234,213,171,247,236,217, 67,170,155,129,165, 63, 11, 11, 11,144, 28, 77, 6, 36, 1,128, 0, 98,194,211,252,255,
-246,226,185,167,161, 17, 49, 5, 55,164,206, 0, 54,255,129, 12, 72,233, 15,233, 52, 0, 73, 72, 29,240,228,211, 51,163, 50, 11,
-130,117,201,215,239,192, 98,232,239,243,183, 63,159,190,254,241,248,229, 15, 34,139, 78, 72, 10,195, 85,250,211, 14, 96,214, 1,
- 64,240,227,215,207, 31, 63,126, 16,111, 8,164, 28,135,140,173,139,138,138,194,155,198,248,115, 14,114, 59, 26,179,227,140, 39,
-223,130,198,253,129,197, 63,184,241, 15, 47,253,127,255,254,253,245,235,215,207,159, 62,211,122,116, 98,213,170,213, 48, 30, 35,
- 24, 50, 0, 69,136,175, 3,224,165, 63,164,232,103, 98, 98,226,224,224,224,230,225, 26,205,198, 52,234,215, 18,217,167,196, 90,
-121,160,141, 8, 17,163, 23,222,143, 4,214, 1, 36, 57, 27, 82,250,131, 6, 52, 70,235, 0, 18, 1, 64, 0,118,205, 94, 7, 65,
- 24,136,227, 36,208,224,238, 32,239, 64,124,156,250, 8,142, 60, 15,137, 3, 59, 60,150,176, 16,135,106, 75, 33, 90,130, 7, 37,
- 23, 98,180,158,137, 35, 55, 53, 13,133,210,143,223,221,253,219,224, 45,202, 79,199,121, 16,155,242,108,147, 0, 74, 32, 96,195,
-127,203,125,172,196,242,118, 31,125,125,131,106,123,169,205,173, 49, 87,101,132, 52,148, 31,120,185,252,131,193, 62, 22, 32,133,
- 20, 66,252,119,212,210, 52,197,131, 95, 84,252, 97,149, 67,125,215,182,116, 7, 0, 77,178, 44, 43,171,138,249,254, 46,138,144,
-254, 73,146,196,113,236,216, 54,240, 69,120, 12,125,192, 50, 47,113,159, 64,220, 39,254, 63, 70,250,247,150,254,224, 13,180,214,
- 74, 41, 41, 73, 14, 0, 37, 32,107,244,216, 63, 47,114,111,240, 46,117, 61,206,154,157,179, 97, 24,125, 64, 81, 28, 56,167, 44,
-176, 37,253, 25, 99, 97, 24,110, 38, 35,246,124, 53,138, 2,249, 9,220,116, 45,200,161, 8,185,141,115,110,209,255,211,109, 2,
-164,255, 76,180, 32,128,200,102,213,130,136,246, 20, 64, 76, 88, 71,114, 76,148, 85,127,188,126, 13, 44,253,129,108, 59,112,179,
-148,152, 78,192,189, 43,119,144, 13, 65, 99,191,189,252,130,160, 9,164,150,254,240,162, 31, 88, 13,200,202,202,194, 5,127,195,
- 0,176,232, 7,182,109,223,189,123, 71,221, 80,131, 88,186, 99,199, 14,120, 63, 0, 82,250,235,233,233,253, 0,214, 0,223,191,
-195,107, 38,252, 89,110,234,180,169, 64, 71,202, 72, 75,255,254,251, 23,173,244, 39,152,109, 32,117, 0,114,131, 11,178, 26, 21,
-107,191, 4,165, 2,248,245, 27, 82,250,159, 62,117,250,219,247,239,192,210,243,227,199,143,192,128,122,255,254, 61,241, 33, 0,
- 25, 5, 34,126,232, 31,148, 0,222,188,125,251,246,205,155,183,239, 64, 52,152, 9, 20,212,208,212,124, 7,102, 16,211,252, 7,
-146,192,210, 31,218,240,231,230,230,225,225,229,229,225, 5, 50, 70,179, 49,174,210,156,248, 6, 56,100, 5, 1,156,129,139, 77,
-146,237,104, 35, 66, 4,117,185,184,184, 0,235, 0, 96,233,239,234,234, 74,124,159, 3, 88,214, 3, 75,124, 56,119,180,244, 39,
- 9, 0, 4, 16, 19,102,243,127, 85,109, 21,144,241,237,197,115,184, 32, 49, 51, 1, 37, 37, 37, 83, 83, 39, 50,128,103,125,129,
-138,225,171, 72,129,108,215,197, 1, 64,246,185,174, 19, 64, 53,212,117, 61, 60,109, 61,121,242, 4,210,228,135,148,251,208,238,
-203,215,175,192,210, 13,216, 30,231,226,162,254, 40, 1,208,234,140,140, 12,144,141,127,254, 92,187,118,237,252,185,115,250,122,
-250, 63,126,128, 59, 0,223,191, 47, 89,188, 24, 34,139, 39,185,247,246,246,106,105,106, 1, 93, 11, 12,165, 63,191,127, 61,125,
-242,148,108,239, 51,192,102, 32, 24,192,219, 17,240,245, 0,126,255,252,243, 23, 52,242,115,242,228,137,175,223,191,126,249,252,
- 9, 88,250,191, 7,149,254,239, 72,170, 38, 33,253, 0,146, 90,106,135, 14, 29,250, 12, 2,159,192,228,103, 17, 97, 97, 96,233,
-127,227,250,245,131,135, 14, 17,163, 29,210,252,103, 97, 97, 5,198, 38, 15,176,236, 7, 98, 30, 46, 78, 46,206, 23, 47, 94,140,
-102, 99, 8, 40, 47, 47,135,151,191,240,201, 85, 8, 3, 34, 8, 81, 64,100,179, 29,255,184, 16,254,210,159,248,182, 63,154,155,
-129,117, 0,176,244, 39,201,205,200,117,192,104,233, 79, 42, 0, 8, 32, 44, 67, 64,194,247, 31,188, 3, 15,254,192, 69,128,157,
-128, 30,134, 27,248, 13,130, 12,245,220, 56,123, 77, 64, 93, 4, 88,226,247,196, 66, 43, 12, 72,233, 15,105,254, 19, 92, 77,180,
-174,221,128,188,246,248,245,235,215, 33, 41, 0,121, 52,128, 21, 12, 94,191,126,237,229,229, 69,139,176,131,148,185,192,134,191,
-153,153,217,143,159, 63,191,255,248, 14,110,253,127, 7, 49,126,252,152, 50,101, 10,174,156, 3, 89,169,249,247,239,223,179,103,
-207,177,178, 48, 67, 66,230,254,131, 7, 79,159, 62, 93,190,124, 69,100,100, 4, 80, 4,222, 15,192,154,193,224,131, 78,104, 45,
- 56,130, 43, 80, 33,109,255,227,199,143,127,253,242, 13, 82, 65,126,250,252,233,211,167,143,159, 62,125, 33,126, 32, 5,210,252,
-135,239, 4, 38,166, 26, 0, 42,134,179, 21, 21, 20,128, 69, 63, 40,181, 92,191,126, 31,220,107, 65,150,197, 3, 44,173, 44,217,
-217,216, 57, 57, 57,129, 61, 0,118,118,118, 96,228, 82,125,122,127, 72, 3,228,213, 50,240,197, 51,240,154, 0, 77, 1,254, 66,
- 28,235, 80, 62, 73, 61, 15, 34,171, 13,106,185, 25, 82, 7,140,150,254,164, 2,128, 0, 98,193, 28,255,113, 94,178, 12,171, 82,
-130,235, 65, 33,205, 7,163, 50, 11, 97, 93, 9, 72,185, 15, 31,252, 1, 54,255, 9,166, 6,242, 22,252, 66, 44,213,212,212,188,
-124,249, 50,188, 8,195, 28,244, 7, 42, 35,254,124, 12, 82,109, 71, 22, 89,178,120, 9,176,244,135,236,176,194,186, 30, 31,121,
-157,254,191,127,127,245,244,141, 46, 94,188,116,253,218, 53, 22, 86, 86, 96,201,248,228,233, 19, 96, 83,151,153,153, 57, 44, 44,
- 12, 88, 7, 48, 48,240, 99,154, 0,212, 14,201, 93, 16,219,209,246, 1,224,119, 48,176,244, 63,122,244,232, 23, 32, 0,205,250,
-126, 2,151,254, 64,226,243,151,207, 95,190,126,251, 70,208,179,192,162,255, 12, 24, 48, 96, 44, 3,197, 95, 13, 56, 56, 56, 32,
- 7, 20,164,220, 63,127,254, 60, 3, 17,219,143,141,193, 0,200,224,225,226,225, 0, 21,254, 28,108,108,108, 76, 76, 76,163,165,
- 63,250, 24, 44, 82,185,185,122,245,106, 96,107,154, 1,117, 66,149,152, 37,149,200,109, 11, 82, 87, 51,147, 49,238, 79, 21, 55,
-195,235,128,209, 52, 64, 42, 0, 8, 32, 22,180, 86, 60,133,219, 46,224, 41, 0, 82, 13, 64,138,126, 6, 26,111,197,130, 88,170,
-171,171,123,250,244,105, 96,123, 31, 81,241,188, 5,205, 72,199,198,198,210, 52, 4,145,189,246,255,255,255,152,216,152, 41, 83,
-166,130,199,217,255,240,243,243, 19,172,231,110,221,186, 5,108,209, 66,244, 2,217,104,202,238,225,168,180,144,235, 0,200,108,
- 48,100, 73, 40,254,112,134, 44,159,183,182,182,166,196,179,240, 53,160,164,158, 5, 4,212,123,224,192,129,229, 96,128,220, 51,
- 32, 50,109, 0,171,144,223,127,126,255,254,252,123,116,202, 23, 23, 32,184, 98, 18,168,128,200,208,134,239, 3, 32, 47, 51, 18,
-175,145,138,110, 30, 5,100, 0,128, 0,162,254, 97,112,192,216, 2, 13,253,119,209,245, 44, 32, 72,178, 51, 53, 53,221,182,109,
- 27,164,220,167,188,111, 65,222, 96, 20,124, 47, 46,214,210,159, 42, 0,243,204, 6,200,178, 81,130, 77, 54,170,132, 3,220, 16,
- 96,105, 78,234,217, 15, 14, 96, 64,170,141,163,231,252,144,209, 22,161,127,226, 39,207,198, 65,226,230, 17, 11, 0, 2,136, 38,
-167,129, 82,222,147, 32,187, 14,160,209,112, 63,237, 50, 0,229,134,143,230,150, 81, 48,228,146,241, 40, 24, 36, 0, 32,128, 24,
-169,123, 64,194, 40, 24, 5,163, 96, 20,140,130,161, 2, 0, 2,104,244, 70,176, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70,
- 43,128, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48,
- 10, 70,193, 40, 24,161, 0, 32,128, 70, 47,133, 31,213, 59,170,151,230,122,113, 45,207,165,181,222,209, 56, 26,213,139, 31, 0,
- 4,208,104, 15, 96, 20,140, 2,218, 2,200,233,246, 16,146, 84, 64,204,145,250,163, 0, 43,184,121,243,230,104, 32, 16, 4, 0,
- 1, 52, 90, 1, 12, 36,184,118,237, 90, 58, 18, 0,114, 7,191,222, 81, 64, 18,184,119,239, 30,228, 96, 3, 32,137,124,236, 1,
-241,165, 63,228, 88, 89,178,207,228,193, 37, 66, 69,189,240, 59, 57,200, 3,180,168,222,128,165,127,127,127,255,104,242, 35, 8,
- 0, 2,136,101,248,121,233,240,225,195,182,182,182,131,223,157,144,116,223,219,219, 11, 23, 41, 46, 46,102, 32,250, 50, 72, 32,
-249,111,165, 32,162, 38, 15,159, 72, 7,189,163,128, 84,128,124,212, 1, 73,167, 26, 32,151,254, 64,146,145,145,145,248, 35, 22,
- 40,217, 45, 72,134, 94,200, 57,254,120,156, 7,236,253, 64, 14,249,193,227, 89, 76,189, 4,117,225, 47,253,255,253,251, 55,107,
-214,172,165, 75,151, 70, 71, 71,143,166, 67, 92, 0, 32,128,134, 97, 15, 96, 9,142,195,236, 6, 91,233,159,159,159,143, 92,250,
- 67, 42, 3,160, 32, 49, 13,174, 5,185,220,200, 37, 56,164, 64, 7, 10,210, 84,239,199,143, 31, 51, 51, 51,225,183,208,188,120,
-241, 2,168,165,181,181,181,185,185,185,170,170, 10,114, 94, 63, 46,192,246,241,171,110,230,124,158,253,247, 33,220, 63, 47,254,
- 92, 77,255,113,169,149,237, 72,179,224,230, 42,249,115,187,164,135,107, 6, 35,227, 60,125,180,210, 31, 2, 72,234, 7,208,185,
- 7, 0, 57,199, 31,162,114, 15, 24,160,149,227,248,111,248,130,235,197,212, 69, 70,231, 0, 94,250, 3,155, 83,192,210,255,200,
-145, 35,163,165, 60, 30, 0, 16, 64,195,173, 2, 0, 54,255,129,109,165, 65, 30,235,144, 33, 23, 57, 57, 57,120,195, 31,210,246,
-135, 11,226, 25,147,129, 72,197,217,176,193, 26,239,239,129, 8,194,134, 8,210, 72, 47, 16,156, 60,121,146,131,131,227,248,241,
-227,136,212,195,196, 84, 93, 93, 93, 91, 91, 27, 31, 31,191,117,235, 86, 60,122, 37, 78, 94,251,207,193,202,117,252, 17, 92,132,
-145,233,191, 94,245, 47,155,218,247,230,241,175, 78,111,149, 30,205,138,152,165, 63, 35, 12, 16, 89, 7, 32, 79, 24,164,163, 2,
- 6, 66,211, 9,148,232,133,215, 1,239,222,185,204,156,249,158,164,210, 31,107,253, 1,215, 69,106,175, 20, 88,250,247,245,245,
- 1, 67, 12,152, 50,207,156, 57, 3, 44, 13, 70,147, 19,126, 0, 16, 64, 76,248, 11, 83, 50, 66,144,194,241,101,160,141, 16,141,
-228, 69, 30,176,249, 63, 99,198, 52,178, 59, 1,244, 73, 49, 19, 39, 78,132,183,253,129, 69,127, 47, 24,192,235, 0, 32, 27,168,
- 0,143, 94,120,251, 29, 88,124,223,222, 22, 11, 68,240,114, 28, 40, 69,188, 94, 72,155,148, 72,189,192,210,231,216,177, 99,192,
-222,244,163, 71,143,158, 63,127,142, 38,245,240,225, 67, 73, 73, 73, 6,220,154, 37,143, 93,121, 18,109,205,246,232, 35,227,115,
-248,161,211,144,171,220, 24,222, 61,100, 23,146,252, 62,204,242,213,189,123,247,240, 20,181,120, 38, 3,208,218,254,104,247,202,
-225,175, 3,144,111,224,154,137, 10, 24, 8,221,207,133, 44,251,127,149, 32, 50, 98, 32,241,110, 47, 72,185, 79, 82, 57,142, 92,
-127, 0, 17,121,165, 63,176,123, 58, 97,194, 4, 96,219,191,160,160, 0, 88, 7, 64,218,130,211,167, 79, 31, 45,229,241, 0,128,
- 0, 98,193, 83, 20, 46, 93,186, 28,146,224,136, 31, 82,135, 36,205,152,152, 24,136, 22,160, 33,144, 50,133,200,184, 4,170, 95,
-178,100, 9, 80, 59,184, 40, 95, 66,146,213,240,230, 63, 36,159,144, 49, 19, 0,177,157, 84, 75, 41, 1,144,210, 31, 94,238, 35,
-115, 9, 87,221,224,210, 31,194, 6,213, 1, 94,139,209, 6,118,240,235,133,199, 8,184, 14, 72, 39,168, 23, 88,196,255,250,245,
-203,216,216, 24,216,187, 2,118, 2,130,130,130, 64,117,198,191,127,237,237,237, 95,190,124, 97,101,101, 5,102, 63, 92,122,133,
- 30, 62,101,250,245,231,131,177, 2,235,145,103, 44,199, 95,254, 14, 82, 4,197,209,191,255,151,218,217,222,125,225,253,206,202,
-227,154,121,123, 56,101, 42,130,205,222,206,206, 78, 96,121,135, 57,192,141, 89,178,195,155,255,152, 42, 7,225, 41, 94,233,233,
-130, 72, 53, 10,168, 97, 1, 12, 6,178,239,249, 32,181,237, 15,204,245,240,187, 33,109,108,108,128,217,121,180,244, 39, 8, 0,
- 2,136, 5,119, 81,184,108,230, 76, 80,240,101,100,100, 17, 89, 38, 66,198,181,181,180,180,224, 34,182, 96, 0,233, 19, 16,140,
- 81,120,233, 15,183,139,212,226, 24,232,230,152,152, 40,112, 13, 20, 5,100,147, 90,121, 0,173,131,223,103, 48, 36,166,145,233,
- 9,142, 30, 61,106,110,110, 14, 44,143,128,228,134, 13, 27, 2, 2, 2, 32, 67, 64,149,149,149, 12,224,171, 23,150, 47, 95, 14,
-148, 50, 53, 53,197,212, 43,127,244,204, 11,115, 77, 96, 97,246,213, 92,150,121,195,243,223, 1,138,224, 33, 32, 6,189,202, 95,
- 64,173, 95,223,126,220,183, 92, 69,222,252,139,158,233,147, 97, 16, 80,248, 47, 85,135,131,213, 96,128, 89,136, 35,223,169,130,
-235, 90,105,172, 23, 55, 14, 56, 0,214,103,152, 75, 93, 33, 99, 59,164, 2, 50,116, 65,206, 12,103, 97, 97, 41, 44, 44, 60,115,
-230,204,232,208, 63,145, 0, 32,128,176, 87, 0,192,182, 63,164, 36, 5,130,232,232, 72, 32,151, 96,129, 8, 25,234, 65, 46,253,
-225, 0, 34, 8, 84,128, 85, 22,169,248, 70, 41,253, 33, 12,160, 32,145,101, 49, 48,202,129,197, 19, 68, 49,144, 4, 86, 0,196,
-119, 2,224,165, 63,114,238, 34,178,206,163,164,253,130,220,234, 39,169,249, 15, 25,177, 1,182,250, 33,157, 0, 85, 82,154,255,
- 80,189,225,233,240,187,159, 8,234,253,253,251, 55, 48, 83,241,242,242, 94,186,116,233,239,223,191,159, 62,125,186,126,253,186,
-176,176, 48, 92, 1,144,237,237,237, 61,109,218, 52,204, 10,128,249,247,111,217, 51,151,217,120,165, 89, 47,189,253,248,151,247,
-243, 39,182,191,215,191, 48, 8,115,192, 21,112, 11,255, 49,245,126,178,112,154,237,240,168, 0,128,161,138, 57,244,129,121,201,
- 34,164, 7,128,182, 97,135,164,181, 58,180,184,225,142, 26,222,127, 15,233, 10, 32,247, 6,136,239, 64, 0,195,141,140,210,127,
-233,210,165,135, 14, 29,250,191, 74,144, 49,236,125,127,127, 63,176,226, 4, 54, 77,102,204,152, 49, 90,190, 19, 4, 0, 1,196,
-130,181, 52, 4,134, 32,114, 65, 12,172, 0,128,197, 43,176, 87,133,199,160,137, 19, 39, 66,134,110,176, 2,160, 20, 80, 1,158,
-244, 13, 25,124, 71, 43,115,193,229,248, 18, 98,202,113,228, 46, 11, 4,196,198, 70, 47, 94,188,148,152,114, 28,185,244, 71,107,
- 97, 17,212,139,199,203,120, 0,176,159, 4, 47,238,225,163,255,200,179, 2, 64, 5,120,244, 50,133, 67,135,242, 33,117, 0, 3,
-210,154, 78,166,240,247, 36,232, 13, 79, 39, 82,239,133, 11, 23,228,228,228,128,109, 43, 8,119,209,162, 69,199,143, 31,247,241,
-241, 65, 86,243,242,229, 75, 14, 14, 14, 76,189, 10, 23, 46,124,144,147, 60, 89,152, 4,225,178, 45,186,253,247,248, 71, 38, 31,
- 20,149, 31, 95,114,178,115,252, 30, 54,153, 10, 88,178, 43, 41, 41,225,185,235,170,188,188,156,200,107, 14,145,135,128,112,117,
- 8, 6,109, 32,144,161, 30, 82,113,146,164,119,217,178,165, 7, 14, 28, 96, 92, 3,106,142,236,170,225,117,107,249,108,103,103,
- 55,186,244,147, 72, 0, 16, 64, 44,152,165, 33,114,243, 31,222, 9, 0, 22,166,200,181, 2, 86,128, 71, 22, 82,148, 19,108,254,
- 99, 45, 97, 9,118, 2, 32,110, 70, 46,253, 33,131,128, 64, 7, 3,197,129, 89, 8, 79,213,133, 89,250,147, 84, 7,144, 55, 82,
- 4,233, 9, 61,122,244, 8,178,230, 7,185,225, 15, 20,196,213,145, 66,214,187,232,200, 47,200,186, 29,228,198, 59, 80,144, 70,
-122,129,197, 61,178, 79,237,237,237,187,187,187,157,157,157,255,253,251,215,214,214, 6, 36,191,127,255, 14, 12,103,172, 49,168,
-126,252,248, 37, 91, 7, 56,247,143,189,228,223,238,199, 12,206, 98,255,255, 49, 92,106, 99,253,242,143,231,221,119,190,119,140,
- 66,126, 49, 23,135, 83,190, 2,150,239,248,167, 91, 73, 41, 26, 87,129,200, 61, 97,196,244, 71,225,233, 22,235,106, 78, 60,247,
- 53, 34,235, 5,182,163, 73,210,139,217,138,135,220,225, 76,159, 1, 55,208, 52, 53,164,244,191,244,103,254,254, 95,224,242,106,
-180,244, 39, 22, 0, 4, 16, 74, 5,144,145,145, 5,186,213, 54, 38, 10,179, 37, 14, 25, 23, 2,162, 25, 51,166,209,200, 41, 88,
- 11, 83,130, 53, 7,220,205,184, 12, 4, 86, 93, 64,132, 86, 61, 32, 87, 60,120, 50, 42, 48,121,209,104, 50, 0,158,217,200,216,
- 8, 6, 84,144,144,158,158, 48,249, 43,234,102,174,247,180,211, 11,190,158, 30, 1,228,229,229,167, 76,153, 66,100, 89,182, 13,
- 85,239, 63,121, 30,206, 41,154, 64,134,246, 76, 86, 6, 6, 96,171,255, 61, 24, 61, 28,174, 25, 12, 94, 16, 67, 24,116,184, 45,
- 14,107, 73, 13, 23, 33,184, 10,136, 12,189,152,173,120, 34,251, 55,148,135, 45, 48, 25, 3,203,125, 32,123,193,254, 95, 43,142,
-253, 2, 22, 5,163,251, 25, 73, 2, 0, 1,132, 82, 1,224, 41,220, 33,211,185, 4, 19, 31,217, 10,200,190,201, 22,127,133, 68,
-161,179,105,157, 93,175, 93,187, 6, 95,253, 9, 25,162,193, 63, 77,130,166, 23,178,131,151,158,122, 71, 1,169,160,188,188, 28,
- 62, 22, 4,100,211,199, 82, 58,239, 4, 30, 88,224,222,242,121,168, 56,117, 16, 2,128, 0, 98, 25, 13,130, 1, 4,192, 98,151,
-236, 36, 59, 80,122, 71, 1,169, 99, 65,144,147, 18,128, 36,241,237, 98,148,213,159,176,193, 31, 92, 75, 66,113,141,231,224, 23,
-161,133, 94, 90, 84, 93,248, 1,176,243, 10, 12, 22, 63,255, 52,104,119,115,251, 57, 8,195,203,211,104, 52,237, 17, 3, 0, 2,
-104,180, 2, 24, 5,163,128,182,192,197,197, 5, 88, 1, 16, 63,177, 73,121,105, 59,176, 61, 0,250,214, 22,255, 33, 59, 10, 71,
- 1,121, 0, 32,128, 70, 47,133, 31,137,128,243,231,141,239,236, 26,163,225, 48, 10, 70,193, 8, 7, 0, 1, 52,122, 28,244, 72,
- 4,163,165,255, 40, 24, 5,163, 0, 8, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163,
- 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,136, 38,151,194,223,191,122,156,129,233,
-135,164,140,244,231,239, 95,223,191,253,170,166,105, 67,188,222, 35,231,238, 50,252, 99,127,249,244, 41, 55, 39,183,160, 16,183,
-185,137, 34,241,122, 41,113,243,191, 55, 83,120,121,190,115,114, 51,179, 48, 51, 49,114, 48, 62,255,148, 79,188,222, 79,188, 65,
-130,194,130,252, 60,204, 12, 44, 12,239, 46,204,194,111, 47,167,244, 13,226,221,252,253, 41,202, 96,189, 20,215, 75,226,245, 62,
-251, 38,142,162,247, 39, 9,246, 62, 67,157, 36,144,254, 69,194,245,170, 79,217,212, 7,131, 94,109,108,225,220,217,185,186,188,
- 28,203, 81, 51, 87, 81,195,153, 83,230, 23, 9,113,244,132, 13, 37,109, 72,147, 16, 71,155,159,162,196,209,143,159,220,196,235,
-229, 96,255,138, 98,148,223, 20,226,245,250,110,202, 65,230, 22,191, 32,225,216,156, 94,137, 12, 26,229,193, 81,189, 52,210,139,
- 7, 0, 4, 16,190,101,160,169, 7,138, 24, 29,227,103,253,215, 39,198,160,123, 87,118, 49, 50,252,227, 97,231,156, 63,115,217,
-194,133, 19,173, 93,172,255,124,253,166,165, 97,247,239, 31, 67,118,217, 95, 45, 45,245, 59,119, 30,254,248,254,135, 87,210, 26,
- 83,239,209,243,175,254, 51, 48,126,249,249, 61,189,168,165,113,146,251,179,171,103,129,201,123,219,197, 39, 76, 76, 12, 19, 27,
-106,110,221,186,169,160, 32,207,206,201, 34, 44,200,142,197,222,117,211,216,216,216, 56, 57, 57,121,120,120, 68, 4, 56, 68, 89,
-121, 69, 37,185,249,217,121, 5,216,152, 88, 88, 88,254,255,251,251,137,153,225,211,171, 79,135,121,117,113,185,252,227,221,169,
-188,156, 31,249, 4,216,120,184, 89,217, 56,153, 88,152, 25,152,216, 88,212,165,103,255,254,207,124,239, 89, 18,126, 95,239,127,
-164, 44, 34, 34, 34,206,243,227,251,143,159, 76,236,156, 12,191, 25,254,200,197,124,120,255, 78,228,243, 54,218, 85,218,179,102,
-205, 74, 75, 75, 27,109,188, 16, 4,184,138,123, 82,213, 0,129, 4, 39,215,211,167, 79, 89, 57,216,255,113,113,209,211, 11,223,
-222, 93, 56,182,119, 5,178,136, 75,104,199,224, 12,237,197,139, 22,177,179,177,253,251,247,143,155,135,199,215,207,111, 52,249,
- 13, 9, 0, 16, 64, 4,246, 1,252,223,187, 48,205,153,112, 29, 16,234,167,242,211, 73,232,247,151, 15, 44,127,153,204,244,100,
-226,227,161,205,103, 96, 9,126,226,248, 2, 17, 57,233,127, 95, 62,217,155,235, 62,123,246,126,207,249, 63,104,122,211,211,219,
- 24,216,248, 25,185,248,254, 51,255,191,120, 45,113,222,138,157,208, 38,249, 63, 6, 15, 75, 75,134, 47, 47, 24, 24,120,239, 94,
-190,206, 42, 34, 96,109,161,195, 35, 32,134,197,122, 70, 38, 32, 98,252,207,204,250, 11,104,204, 31,102,102,102, 86,102,102, 54,
- 86, 16,249,251, 47, 3,227,159,127, 32,119,224, 0, 47, 46,182, 8,241, 51,240,113,113,137,138, 8,243,241,113,253,103,250,251,
-231,223,151,191, 12,127,121,120,184, 68, 36,100,148, 84,143,236, 57,136,253, 28,161, 25,187,127,241,243,114,243, 11,124,254,241,
-141,237,235, 87, 14, 54,118, 14,214, 31,127, 65,237,193,111, 63,190,126,251,254,232,189,206,171, 55,239, 62,189,126, 18,102,133,
-221,234,213,157,132,174, 73, 74,112, 17, 20, 23,196, 90,250, 83,177, 14,168,234,238, 6,146,109,165,165,100,232,173,236,234, 2,
-146,237,101,101,196,107,185,242,244,233,173, 91,183,128,140, 32, 71, 71, 34,181,204, 92, 5, 58, 9, 7,249, 86, 44, 32, 27, 66,
- 50,192,206, 71, 3,178,211,176, 29, 33, 9, 44,217,241,151,239,196,148,254,138,130, 66,223,127,253, 4, 50,216, 56, 57,126,125,
-255,241,239,235,183, 55, 47,158, 75,234,234,226,209, 34,169,172, 70,208, 95,252,242,154, 55,246,109, 36,168, 12, 88,250,219,184,
- 68,112, 8, 26, 16, 21, 88,161,239, 8, 42, 9, 11, 11, 91, 21,186, 7,171,148,227,158,215,112,182,150, 0,168,100,120,245,227,
-223,247, 63,160, 16,254, 10, 38,103,154, 11,168,241,178, 98,213,219,211,211, 83, 85, 80,226, 31, 20,248,227,199,247,137,253,125,
- 83,166, 76,201,201,201,161, 48,113,222,185,115,167, 27,156, 62, 9,110, 44, 56,126,252,248,131, 7, 15,222,190,125,251,249,243,
-103, 94, 94, 94, 97, 97, 97, 5, 5, 5, 75, 96,233, 49, 10,192, 96,203,146,102, 56, 27,109,221, 63, 64, 0,225,171, 0,102, 59,
-244, 5,159,104,253,119,108,107,154, 21, 3,254, 58,224,231,151,119, 18, 42,206, 45,165, 65, 11,102, 30,128,136, 28, 60, 54,227,
-235,183,159, 94, 46,249, 86,214, 9, 17, 97, 78,156,156,236,191,254,254,249,252,237,151,154, 5,230,161, 61, 15, 25,126, 49, 4,
- 69, 79, 79, 45,130,118, 45, 61,172, 28, 56, 56,216, 55,236,219,185,237,232,241, 69,243,167,253,248,254,147,141,153,133,135,139,
-141,143,237,239,157, 71, 47,208,171, 40, 96, 17,240,255, 31, 8, 49,253, 3,178,127,254, 98,103, 0, 86, 49,236, 12,255,127,253,
-253,203,204, 0, 44,202,255,254,250,247,231,239, 63,172,206,190,123,170, 93, 70,244, 63, 31, 47,183,180,140,162,134,174, 10, 47,
- 15,231,199, 47,175, 95,188,126,241,254,227,203,223, 63, 24,185,128,181,130,168,117,112,224,229,181,235,213,209, 52, 78, 95,250,
-248, 47, 47,239,119, 22, 6, 54, 14,182,239,223,216,126,125, 99,251,193,193,206,194, 8,204, 37,204, 63,190,127,249,254,237,243,
-247,239, 95,191,127,250,248,249,197,195, 9, 19, 30, 43, 27, 99,223,255,217,189,168, 27, 87,120,150,198, 97, 47,145,223,191,127,
-143,204, 22, 18, 18,130,148,134,130,130,130,119,239,222, 93,189,122, 53, 73,181, 2,155, 56,116,252, 1,104,168, 32,185,105,107,
-214,234,213,217,217,217,191, 95,189, 34,166,244, 23, 19, 19, 11,114,115,251,205,206,222,219,219, 27,236,228, 68,204,241,150, 64,
- 15,246, 52, 52, 64, 71, 42,234,235,123, 27, 27,177,178,113,105, 71,174, 3,128, 12, 99, 99,227, 61,123,238,185,184, 40, 17, 89,
-250,107, 72, 72, 10,240,241, 65,146, 25, 55, 7,231,243,215,175, 62,189,255,192, 35, 32,248,240,244, 25,121, 83, 19, 60, 26,253,
-210, 74, 98,130,125, 85, 21, 20, 32,220,250,222,201,112,169,198,226, 92, 32,249,104,251, 94, 51, 53, 89,162,134,122,136, 44,253,
-161, 45, 11, 33, 66, 42, 8,239, 71,227,102, 97,188,216,152,204,200, 39,242,247,222,197,159,247,174,222,122,247,213,100, 59,190,
-248,157, 49,115,102, 81,122,118, 92, 74,210,234,165, 43,128, 37,111, 75,103, 23,111, 67, 11,252,210, 8, 74,138,126, 80, 94,192,
-219, 58, 1,150,248,187,118,237,250,253,251,183,178,178,178,173,173, 45, 63, 63,255,135, 15, 31,158, 61,123,118,255,254,125, 32,
-233,230,230, 6,172, 15, 70, 75,127, 52, 46,114, 29, 0, 16, 64,232, 21, 64,218,109,216,209, 58,224, 29,118,255,255,125, 97,248,
-245,243,247,129,101,105, 14, 12,132,250, 1,108, 90,154,234, 76, 76, 7,110,125,120,203,192,112,253,227,211,219,192,254,242,198,
-173,147,190,189,249, 27,157, 88, 8,108,206,251,249, 90,254,101,225,193,165,249,214,173,235, 64, 53, 94,250,192,102,157, 20, 3,
-131,252,143,159,191, 66, 60,220, 56, 4,152, 22, 45,219, 1,108,190,175, 89,177,128,249,207,103, 77,121,246, 59,143,208, 53,254,
-251, 15,186,151, 10, 8,254,254,253,251,147,245,255,111,198,223,191,126,253,250,198,245,131,225, 31, 7,211,255,191,127,217,254,
-127,249,245,227,215,247,111, 12,124, 88, 44, 21,229,249,201,194,194, 9,108, 47,168,168,168,136, 75,152, 51, 48, 51,253,253,123,
-150,233,255,135, 31, 95,129, 85,198,215, 23,207,222,137, 10,191, 17, 22,176,150,148, 93,204,192,128,210,226,227,252,241,231,255,
-207, 55, 12, 63,216,127, 49,253,254,202,198,242,133,147,149,133,149,141,225, 31, 55, 35, 51,227,151,175,223,222,191,120,120,247,
-236,209,119,143, 30, 1, 93,197,244,159,153,200,120,154, 55,125, 30,132,145,148,137,115,220, 9,249,158, 41, 32,187,168,168,232,
-209,163, 71,192, 34,146,188,189,151, 83,167, 78,125,249,242,229,154, 53,107,188,237,236, 4,197,196, 72,213, 14,108,251,191, 7,
-151,140,144,131,225,210,195, 8, 28, 87, 9,108,251, 3, 75,127, 80, 66, 97, 99, 83, 83, 83, 91,187,111, 31, 49, 93, 1,202,207,
- 64, 6,150,242,192, 66, 31,114, 97, 8,156, 12, 13, 13, 37, 88,250,171,137,137, 3, 75,127,102, 38,166,172,152,232,239, 63,126,
-246,206,157,203,197,201,249, 3, 8,190,127,103, 98, 97,126,124,254,188,172,161, 33, 46,189,144, 82,254,246,131, 7,200, 92, 50,
-128,185, 83,196,158,213, 21,174,126,201,255,217, 85,137,212, 2, 63,203, 19,114,155, 35, 86, 17, 92, 0,216,240,127,248,229,239,
- 65, 87, 81,214,252,153,159,162, 21, 89, 4,197, 8,150,254,123,247,238, 85,144,148, 74,201,202,168, 40, 44,155, 50,127,134,153,
-145,209,140,201, 51, 10,202, 74,150, 90,154, 95,190,124, 89, 23,111, 87, 9,127,209, 15, 52, 25,200,197,175, 30, 88,250,139,138,
-138, 26, 26, 26, 50,129,123,249,192, 28,199,202,202, 10,108, 24, 73, 72, 72, 0,235, 0,160,108,112,112,240,104,233,159, 86, 14,
- 29, 54,156,213, 89,129, 86, 7, 0, 4, 16, 74, 5,144,122,172,242, 27, 51,199,191,191,255,254, 49, 50,243,254,255,206, 0,108,
- 6, 51, 48, 51, 72,171,177,254,250,250,127,207,188, 52,151, 36,188,117,192, 63,102,102, 72, 97, 7, 44,107,101,248,165,213, 31,
-222, 92, 51,125,230,124,166,159, 92,110,142,214, 59,246, 30,253,246,141,129, 75,136, 31, 83, 27, 39,151,250,247,111, 55,129,197,
- 55,124, 84,134,129,225, 25, 19,179, 67, 92,124,242, 63,246,175, 91,182,206,243,243, 77,226,226,102,248,246, 22,152,136, 37, 48,
-181,255,102, 96,102, 5,151,254,191,255,252,253,249,233,247,183,223,223, 62,112,178,252,254,198,250,147,229, 55,243,111, 70, 96,
- 65,254,233,251,159,175,159,127, 51,136,163,107,188,184,191, 83, 73,130,145,153,153,145,145,137,253,239,223,255,127,190, 61,250,
-249,247,247,211, 23, 31,223,189,255,242,241,243, 95,166, 31, 63,254, 48,188, 96,102,189, 32, 37,247,137,151,131, 19,211, 94,160,
- 87,255,127,254,241,253,243,179,191, 47, 63, 50, 43,203, 0,211,223,223, 63, 63, 63,188,120,112,243,212,241,215, 15, 31,129,139,
- 45, 22, 38, 96,232, 50, 83,243, 12,119, 72, 3,127,214,172, 89, 33, 33, 33, 6, 6, 6,236,236,236,125,125,125,228, 25, 5,105,
-254, 91,232,232,136,139,139, 3, 75,112, 31,123,123, 41,210,235, 0, 65,112,185,207, 42, 38, 6, 52, 1, 72, 18,236, 7, 0,219,
-254,172, 63,127,174, 93,187, 22,185, 43, 64,252,112, 16,217, 0, 82,238, 35, 95,201, 2,172, 62, 9, 86, 0, 95,191,125, 19, 21,
- 18, 74, 12, 9,249,240,241,211,235,119,111, 89, 89, 89, 32, 0, 88,196,176,115,114,125,122,251,230,243,227, 39,188,178, 56,167,
-230,128,165,255,146,181,155,145, 43, 0, 72, 63,192,220, 72,207,203,209,158, 8, 87,127,102, 96,224,229, 21, 54,112,241,227,222,
-189,105, 46,125, 70,255, 47, 45,156,240,115,199,124,177,217,231,128, 53, 1, 51,159,208,159,247,175,128,165, 63,176, 67,240,245,
-207,127,102, 28,195,168,247,239,220,217,182,105,235,194,217, 11, 39,205,157, 54,163,111,130,144,176, 80, 75, 91,203,162,101, 75,
-109, 45,172,231,205,157, 23, 20, 26,100,107,109, 75, 70,233,191,105,211, 38, 96,191, 86, 82, 82, 18,237, 2,106,180,145, 31, 96,
-219,223,200,200,232,207,159, 63,192,174, 0, 7, 7, 7,176, 2,184,113,227, 6,176,169,193,195,195, 3,236,237,189,120,241, 2,
-168,102,116, 44, 8, 81,128,148,119, 64,234, 0, 56, 0, 8, 32,148, 10, 96,182, 85, 59, 84, 29,211,229,255,251,230, 51, 10, 75,
- 50,164, 76, 62,205,169,105,250,120,227,191, 89,181,204, 71,150,167,217, 50,205,250,135,165, 74,223,180,239, 93,154,202, 39,255,
-248,252,226, 92, 96, 7,226, 29, 48,225, 50, 48,252,148, 87, 55,226, 96,103,249,254,245, 39,195, 47, 80,197, 0,236,139,189,122,
-247, 30, 83,239,132,254, 34,208,221,241, 39,230, 50, 49, 65,150, 49,128,134,107,254,125,191,250,227,231,111, 78, 30, 14, 6, 54,
- 80,197,240,249,211, 39, 49,164,251,167, 80, 60,240,239,215,191,127, 44,192, 20,240,243,231,207, 47, 44,204, 44,191,152, 24,158,
-127,250,195,245,231, 47,219,191,255,172,204,223,152, 89,254,124,253,246,229, 23,150, 69, 29,188, 60, 95,255,252, 97,252,249,235,
- 47, 48,123,223,186,243,232,201,243, 55,223,127,253,254,244,229,221,151,207, 31,126,252,253,197, 8, 76,244,223, 62,126,250,118,
-255,225,211,143,111, 63,127,101, 96, 80, 65,211, 14,116, 22, 36, 71,252,249,248,245,201,133,235, 47,175,223,255,244,249,206,231,
- 15, 31,254, 51,176,176, 50, 51,254,103,100,101, 98, 2,245,161, 8, 30, 83, 82, 26, 87,138,103, 44, 8,139,127, 89,160, 81, 6,
-204, 30,192, 26, 23,249,176, 73, 82,155,255,192, 90, 4, 52,198, 45, 42, 74,252, 41, 99,216,139,117,112,185, 15,172, 3,240,116,
- 2,174, 60,125,202, 0, 62,251, 26,216, 34,131,244, 3, 64,197,205,165, 75, 64,114,221,254,253,248,235,128,226,250,122,200, 72,
- 23,144, 93,210,208, 0,239, 19,224, 25,249, 65, 6,192,230, 63,218, 56, 50,228,208, 99,248, 88, 16, 86, 32,192,194,242,227,215,
- 79, 96, 8,223,184,119, 23,104,227,181, 91,183,127,253,250,205,196,192, 8, 12,127,160, 99,128, 45,142,239, 95,191,237, 94,181,
- 50, 8,233, 48, 87, 52, 0, 47,253, 99,130,125,145,197, 79,158,187,164,170, 40,207, 78,216,225,176,177, 11,118, 85, 96,209, 15,
-236, 7, 0,145,103, 96,242,111, 22, 85, 26,150, 16,239,158,179,201,169,189,202,230, 96,119,138,252,123,102,199,223, 79,160, 73,
-133, 87,217, 86,242, 51,143,255,253,135,189, 41,163,174,170,206,197,197, 61,105,206, 84, 71,123,123,115, 75,139, 93,219,118,222,
-184,115, 11,216, 49,231, 96,103,183, 54,182,222,186,105,235,155, 87,111, 2, 3, 3,137, 47,250,129,205,246,123,247, 64, 81,118,
-234,212,169,140,140, 12, 60,189,219, 7, 15, 30, 40, 43, 43, 67, 24, 23, 47, 94,148,151,151, 87, 84, 84,124,255,254,253,153, 51,
-103,148,148,148,128,141, 12,160, 8, 80,106,180, 2,192, 3, 0, 2, 8,203, 28, 64, 26,227,197,255, 7,151, 49, 50,179, 48,228,
-206,205,127, 32, 57,169,111, 33,176,176,156, 94,123, 51,181, 77,157,121,207,172, 52, 89,205, 89,170, 89,192, 54, 55, 19, 19,202,
-224,134, 10,159,204,149, 75,235,192, 76, 96,193,248, 21,124,212,251,111,134,223, 63, 89,254, 1,155, 14,160, 50,125,253,134, 93,
- 64,210,218, 19, 75, 25,177,227,242,127, 15, 67, 29,120, 23, 22, 88,202, 49, 48,176, 50,176,114,252, 97,252,251, 15,124,210, 83,
-120, 52,232, 76,249,135,199,102, 97,234, 5,166,203, 63,255,152,152,254,252, 97,250,245,243, 27,184, 27,248,157,153,153,251,207,
-247, 79,223,129,133, 48, 35,176,103,240,237, 47,195,183, 95,127, 48,253,249,231,215,191, 31,172,204,255,190,253,249,243,239,227,
-231, 47,191,153, 25, 89,127,254,249,253,235,255, 47, 32,193,192,246,143,137,145,129,145,253,223,199,239,127, 95,188,254,246,245,
- 39,250,196, 53, 19, 35,180,195, 2, 44,151, 32,103, 81,253,254,241,253,227,187,119, 76,192, 80, 99,249,207,240,159,133,153,145,
-129,248,150,255,205,135, 55,213,229,213,241,140,252, 32, 15,136,115,114,114,194,107, 2, 96, 62,129,148,254,192,106,128,159,159,
-255,227,199,143, 31,128, 53, 16, 17, 99, 38,144,230, 63,176,155, 12,225,230,228,228, 76,158, 60,153,188, 78, 0,220, 4,200, 64,
- 16,254,209,127, 70, 94, 94,160,131,203,202,202,128,141,232,223,239,223, 3,221, 92,145,147, 67,176, 31,128, 60,214,143,107, 62,
- 0, 83, 87, 39,161,105,246,179, 96, 0, 97, 99,158,136,245,254,221, 59, 30, 94,222, 55,239,223,239, 63,121,146,133,137,249,231,
-239,223,223,190,127, 7, 54, 48, 33, 85, 17, 48,145,252,250,249, 19,127, 80, 99, 14,251, 0, 69, 32,157, 0, 85, 5,133, 71,247,
-238,144, 20,194,192, 58,224,235,235,147,219,215,207, 37,163, 31, 64,112,228, 7, 14, 46,172,154,109, 16, 95,200,174,168, 7,202,
- 32,111,158,223,122, 7, 90,105,202,110,233,243,232,239, 31,174, 41, 39,177,106,249,244,233, 19, 59, 39,135,138,162,226,253, 39,
-143,223,190,126, 27, 30, 19,189,109,239,238,137, 29,189,235,183,109, 82, 85, 84,141, 11,142, 61,126,238,232,250,181,107, 3,113,
- 15,197,192, 75,127, 96,209,239,234,234, 10,169,161,159, 61,123, 6, 44,253,241,187,246,237,219,183,182,182,182,192, 60, 14, 44,
-229,143, 30, 61,170,165,165, 5, 76, 81,178,178,178,192,206, 49, 19, 24, 0, 59, 16,240, 40, 30, 5, 88, 1, 64, 0,177, 96, 41,
-253,247, 45, 96, 96,103,103, 16,146,251, 38,107, 62,169,101, 6,195,223,175, 12, 47, 62,213, 44, 63,152,225,159,193,176,103,225,
-163, 23,175, 25, 84, 25,254,253,253,131, 86, 1,220,249,244, 73, 77,128,239,207, 79,134, 59, 7,150,168, 56,184,131,199, 72, 24,
-126,255,250,205,202,192,244,229, 7,104, 17,133,135,131, 17,167,176, 52, 86, 71,120,232, 50,110,187,248,159, 21,216,220,151,115,
-255,245,232, 48,164, 19,192,202,198,254,155,225, 7, 15, 39,232,238,192, 77,219,150,127,127,251,216, 66, 89, 0,203,192,211,191,
-127,108,191,190,255,102, 96, 3, 86, 2, 12, 63, 64, 89, 20,216, 43,252, 9, 44,218, 89, 88, 25,126, 48,252,255, 7, 26, 26, 2,
-138, 96,230,128,111, 63,254, 49, 51, 51,254,254,243,251,199,207,127,159, 62,255, 0,185,246,223,255, 95, 63,255, 1,107, 31,102,
-160,110, 14, 6,198,239,127,255,129,150, 16,125,255,252, 29, 95, 8,130,186, 2,255, 24,254, 51, 50, 48, 49, 1, 75, 7,230,127,
-255, 25,129, 12, 80, 45,248,143, 9, 88, 49, 49,254, 99,198,223,252, 39, 53,194,184, 96,203, 16,145, 75,127, 96,123, 7,216, 5,
- 6,118,131,224, 45,101, 98,154,255, 10, 34, 34, 16, 46,144, 65, 97, 39,128,200,209,255,255,159, 63,215,214,214,254,124,251, 22,
-114,253,163, 10,184, 6, 98,253,249,211,215,215,247,233,171, 87,210, 84, 93, 97, 9, 31,225,129, 79, 0,160, 1, 99, 99, 99,120,
- 15,224,234, 83,140,246,193,207, 95, 31,126,189,251,241,227,135, 0, 63, 63, 7, 48, 41,254,253, 3, 12, 88, 96, 89,243, 11,216,
- 17,248,253,251,223,159,191,248,195,249,246,131, 7,240, 25, 96,228,177, 32,228,153, 97, 82, 1,183,168, 57,176, 29, 69,134, 70,
-226,231, 0,236,119,191,126,165,176, 6,216, 9, 96, 84,212,147,159,127,254,205,143,127,220, 44,140,191,142,108,184,121,239, 62,
-174, 4,242,253,207,175,179,199, 79, 77,232,233,183,114,176,169,105,106,216,185,125,231,210, 69,139, 45,237,108,100, 21,228, 88,
-184, 88,247, 30,222,187,108,225,226,117, 27,214,110,221,186,213,219,219, 27, 83, 59,228,158, 28,120,209, 15, 1,192,118, 12, 49,
-254, 2,166,121, 96,137, 15, 74,192, 10, 10,192,216, 4,118,215,128,217, 31,216,234,103,103,103, 7, 54,134,128,130,188,188,188,
- 64, 53, 35,185,124, 7,182,108,182, 44,105, 70, 27,246, 65, 6, 0, 1,132, 50,176, 7, 26,249, 57,188,148,129,147,227,193,167,
- 95, 12,223, 63,178,255,251,166,167,163,196,240,246, 27,195,175, 63, 14,250,106,160,133,153,191,127, 48, 51,130,135,104,254,253,
-197, 48,234,195,173, 15,143, 88,216, 25, 60,252, 10,151, 77, 2, 54, 82,126, 49,124,251,249,247, 59,195,134,253, 23,246,156, 6,
-221, 23, 47, 35,167, 8, 90, 99,143, 3,120,233, 51,254,254,193,176,105,235, 14, 19,183, 92, 80,243,159,129,149,153,147, 33,204,
- 39,212,203,206, 31, 40,251,228,225,221,255,191,255, 98,111,221, 0,155, 99,160,201,234,191, 63,127,129,166,127,127,254,248,254,
-237,219,183, 47, 95,190,124,254,244, 17, 24,247,159, 62,127,249,241,229,203,247,239, 88,138,240,207, 95, 24,191,255,248, 11, 68,
- 95,191,253,254,252,229,231,251,207, 63, 63,124,250,245,241,243,239, 15, 31, 64,228,187,183,127,222,189,255,243,238,227,159, 55,
-239,126,189,124,131,101, 4,137, 9, 88, 28, 0,179,214, 95, 70, 70, 38, 96,153,255, 31,228,142,255,204,127,255, 65,195,243, 31,
- 56,187, 16, 51,255,171,105,169,121,116,219,209,157,251,118, 66,234, 3, 96,111, 0,143, 98, 96, 18,103,129,133, 97, 23,120, 21,
-102, 69, 69, 5,228,148,121,228,101,145,196, 52,255,197,197, 81,102, 69,178,179,179,183, 30, 58,244,140,136,197, 60, 88, 1,176,
-249,143,191, 10, 1, 54,243, 33,140,149, 43, 87,222,121, 1, 90,202,181,229,192, 1,184,224,205,155, 55, 69, 69, 69,105,148, 7,
- 32,165, 60,242, 21,137, 16, 54,158,241, 31, 80, 69,203,199,251,239,239,223, 79,239,222,191,121,243,230,237,135,247, 95,191,125,
- 3,162,207, 95,190,124,253,248,233,243,135, 15,192, 84,246,235,199, 15, 96, 53,128, 75, 59,114, 41, 15, 47,253, 33,108,228, 21,
- 65,248,193,151,215, 39,247,172, 70,100,221,111,239, 46,208,186,188,120, 30,174, 0, 44,247,129,165,255,207,131,107, 30, 38, 26,
- 2, 75,255,195,174,162,127, 62,190, 54,217,241,138, 5, 71,244, 2, 91, 18,169,249,153,119,110,222, 60,126,224, 48, 63, 47,127,
-100,120,164,128,176,208,185, 83,103,120,216, 56,184,185,185, 37, 21,164,150,175, 88, 94, 81, 93,245,133,184, 50, 29, 2,140,140,
-136, 58,205, 31, 88,190, 3, 11,122, 96, 75, 31,216,234, 55, 51, 51,211,214,214, 22, 17, 17,225,224,224, 0, 22,253,250,250,250,
- 2, 2, 2,144, 85,161, 35,188,141,143,220,187,197,236,233, 2, 4, 16,162, 7,144,118,107,218,255,215, 15,126,176,114,236,121,
-197, 5,140,107,133, 15,207,153,215,181,108, 79,111,238,214, 82,145, 20,228,200,213,224,100,152,122,254,255,239, 95,143,153,193,
-227, 6, 88,202, 25, 30, 96,138, 5, 82, 23, 47,109,214, 55,240,173,171, 89,180,113, 93,223,174,253,215, 29, 45,181, 89, 88,216,
-119, 31, 62,247,159,153,229,215,223,191,248,221,234, 97,168,177,227,236, 13,134,222,142, 16, 95, 47, 31, 31,223,157,251,214, 3,
- 27,232,222,238,145, 76,127,127,179, 50, 99, 47, 78,129, 69,255, 95, 80, 73,251,151, 5,216,210,255,207, 2,108, 2, 0, 27,194,
-160, 37, 1,192,134, 56, 35,168,127, 0,233, 37, 96,233, 63,126,231,101, 98,126,207,198,206, 4,106, 53,255,253, 15,108,237,255,
-251, 15,236, 61, 0, 59, 1, 12, 76, 28,255, 25,153,129,173,121,198,191, 76,140, 63,255,254,255,240,245, 63,159, 56,214, 1, 25,
-196, 89,228,144,240, 96, 97,254,207, 4,170, 16,152,225,133, 33,168,110,192,221,252, 7,150,254,208, 86,234,130, 61, 64, 4,100,
- 0, 43, 3, 6, 47,124, 65,244, 15, 60, 20,187,102,205, 26, 72,222, 83, 84, 84,132,120, 16,216, 44, 5,122,156, 96, 5, 0, 44,
-253, 33,205,127, 69,234, 21,184,172,224,129, 35,111,123,156, 19,155, 86,186,186,189,189,189,192,102, 62,176,160, 7,246, 6, 2,
-192, 39,227,171,171,171,195, 5, 31, 62,124, 40,194,206, 46, 1,235,145, 80,119, 14, 0, 8, 32, 87,178, 32, 95,123, 75,240,210,
-218,247,111, 62, 50, 50,252, 1,181, 40, 94,126, 99,227,224, 0,109, 42, 4,247, 0,190,127,249,242,243,235, 87,208,132,211,135,
- 15, 30,184,239,158,133,148,242,144, 81, 32,115, 35,189,147,231, 46,193,165,208,166, 4,112, 54,111, 95,159, 60,121, 96,189,179,
- 87, 4,180, 50,248,120,251,230,165,163,100, 52,252,137, 31,255, 1,245,213,222,125,125,148, 98,250,255,254, 37,177,217,231,190,
-254,249,255, 41, 90,145,127,217,253, 79,137,194,192,210,159, 9,119, 5,159,157,147, 83,219,209, 34, 38, 44,242,251,223,223,219,
-143,239, 69, 71, 70, 45, 90,178,100,227,134, 77, 81,209, 81, 63,127,252, 60,124,230,216,247,239, 95,210, 18, 18,246, 30, 63,142,
-185,142, 3, 24, 35,119,238,220,113, 3,119, 16,145,251, 1,111,223,190, 45, 45, 45,133, 79, 12, 96, 5,194,194,194,207,158, 61,
- 19, 20, 20,156, 49, 99,134,169,169,169,161,161, 33, 27, 27, 27, 48,239,159, 56,113,194,194,194, 2,168, 0, 40, 43,140, 99,238,
-112,196,214, 1,104, 0, 32,128, 16, 21,192, 44,181, 44,135,175, 51,111, 61,121,255,220, 23,220,232, 56, 89,241,127,203,116,169,
-151,247,251,237,131, 24, 62,188, 99,104, 91,240,255,233,141,191,156,220, 31,222,129,186,239,140, 24, 91,171, 14, 30,216,104,239,
-224, 12,100,124,253,247,251,206,135, 71,192, 18, 89,133, 79,209,209, 81, 79, 92, 68,226,237,199, 79,160, 14,194,175, 63,207, 63,
-124,213,196,230, 8, 25, 57,203, 39,143,142,131,211, 44,139, 7,104, 37, 40,203,142,203,191,119,110, 89,243,242,205, 51, 97, 1,
- 80, 23, 79,128,141, 85, 82, 0,251, 18,210, 95, 12, 44,108,160,150, 24, 51,176,209,205,244, 23,216, 71,249,243,151,149, 5, 82,
-250, 51,128, 23,137,130,182, 8, 96, 3, 1, 17, 21, 27, 22,151,112,177,253,103, 97,133,245, 36,126, 51,252,249,207,240,227, 23,
-195,223,159,192,134, 61, 35, 35, 27, 35,208,220,175, 63, 25,146, 19,186,208,182, 86,195,103,128,255, 49, 1,235, 13,208,248, 15,
-164, 13, 14,236, 1, 48, 49,131,170, 35,160,236,127,102, 96,183, 0, 95, 39, 0, 94,250,163,177, 65,117, 0,174,225,166,191,127,
-129, 69, 15,176,248,134, 84, 0,107,192, 0,200, 85, 86, 86, 6,218, 62,113,226, 68, 96,135,224,221, 59,124,187,129, 74,192, 96,
-199,142, 29, 95, 95,162,156, 88, 0,172, 15,238,223,191,207,128,119, 83, 24,230,206, 47, 96,209, 15,172, 78,128, 65,231, 99,111,
- 47,141,123,254, 0, 88,178, 91,233,233,189,125,240, 0, 88,202,223,130,173, 5, 82,149,148, 44, 42, 42, 58,122,244,168,154,154,
-154,142,180, 52,158,105, 15,228,113,127,226,231, 0,144, 39, 3,202,203, 65,139, 62,239,221,131,182,253,225,219, 2,240, 44, 4,
-226,145, 22,251,254,252, 5, 48,101,125, 5, 54, 50,223,188, 6, 38,174,255,255,255,253,248,241,227, 63, 24,220,191,118,253,247,
-175,159,120,150, 0,161,244,110, 29,237,129, 8,190, 36,148,152, 33,160, 47,111, 78, 1, 75,127,144, 51,184,185, 55, 34,117, 2,
- 76,108, 3,105, 90, 82,152,108,127,117,198,147,193,192,216,229, 85,182,149,196,180, 99,192,250, 64,144,141,241,237,187,247, 44,
-140,140, 44,120,199, 8,227,226,226,224,236,205,155, 55,123,121,123,110,217,180,101,213,170, 85, 13,213,181,187, 14,236,101,102,
- 97,150,150,145, 6, 6, 36, 3, 27,150,133,124, 42, 42, 42,152,213,192,238,221,187, 25, 8,109, 1, 3,182,244,239,221,187,167,
-165,165, 85, 80, 80,176, 98,197, 10,126,126,254, 27, 55,110, 32,143, 13, 0,101, 21,200, 29,112, 27, 33, 0, 32,128, 80,230, 0,
- 14, 24,166, 51,192, 86, 54,111,121, 37,224, 35,202,248,255,204,182,255,199, 55,129,234,126, 14,142, 31, 92,188,187, 5, 28, 94,
- 88,186,128,199, 34,208, 55, 4,222,188,245,235,200,137, 54, 80,153,200,204, 1, 25,174,184,243,233,121, 93, 78,210,183,111, 63,
- 63,125, 7,205, 1,252, 98, 98,119,242, 8,193,234,136,218,234,132, 29, 91,193,219,106,254, 66, 6, 91,254,120,232, 50, 70,100,
-245,113,113,177,243,129,231, 0, 88,255,253,144, 22,197, 94,190,176,252,255,243,139, 17, 84, 7, 0,139,138,191,192, 60, 10,204,
-169,127,192,115,182,140, 76,192,238,192, 31, 72, 69,133,163, 14,248,240, 93,224,251,207,183,108, 44, 32, 69, 64, 21,127,128,213,
-199,239,255,191,255,252,255,242,253, 31,168,249,207,192,248,251, 31,116, 48, 7,189, 32, 6,141,238,255, 5,194,255,192, 98, 1,
- 60,254,195,200,128,110, 5, 68, 91, 94,161, 35,174,115, 57,174, 31,191, 78,106,108, 1,211,244,247,239,223,117,117,117,149,148,
-148, 30, 60,120,176, 10,188, 75, 22, 82, 25, 64, 64, 71, 71, 7,193, 58, 0, 8,176, 78,175, 5,199,199, 51, 16,177, 41, 12,178,
- 53, 23, 25,248, 58, 56, 16,156, 61,150,128, 53,196,144,123, 3,192,134,191,137,186, 58,219,215,175,248,189, 76, 73,250, 70, 46,
-229,145,119, 81, 48, 16,177, 79,152, 83, 82,226,219,237, 59,127,255,252,249,244,254, 3,184,119, 5,138,226,247, 47, 95,125,122,
-255, 30,232, 42, 60,205,127,180,201,128, 37,107, 55, 35, 47,253, 68,158, 30,192, 14,190, 93, 60,177, 31,178,158,130, 97,227,106,
-208, 2, 80, 35,251, 8, 33, 49, 3, 90,150, 3,255, 81,234, 0,134,217, 6, 25,117, 47,254,253,211, 95,112,234,148,135,184,246,
-150,151,192,210,159,151,149,216,131, 35,129,145,187,239,192, 62, 39, 87,231, 77,107, 55, 52,119,118,148,127,252,248,255,223,191,
-149, 43,215,138,136,136, 60,250,132, 83, 23, 90, 53,192, 64,104, 11, 24, 16, 88, 90, 90, 2,219,248,231,206,157, 51, 50, 50,114,
-118,118,222,191,127,191,156,156, 28,176,133,100,111,111, 15,140, 32,160, 56, 43, 43,235, 8, 95, 2, 4,217, 7, 0,239, 1,160,
-113,129, 0, 32,128,112,238, 4, 6,246, 3,230, 94,222,163,243,247,170, 4,235,199, 31,255, 89,110,255, 23, 96,126,253,233,133,
- 5,116, 27, 33, 19,182, 1, 25, 81, 33, 67,175,132,184,191,255,225, 77,245,255, 95,190,126, 98,102,225,103, 96,226, 42,235, 33,
-176, 83,201,195, 91,103,195,212, 10, 6,166,111,240,130,148,135,135,255,239,239,247, 12,255,191, 62, 60, 54,203, 68, 79, 14,231,
-224, 50,176,145, 13,206,154,127, 24,152,217,254,131,171, 1,112,233, 15,106, 46, 51, 64, 9, 92, 32, 33,173,102,214,228,134, 63,
-191,223,177,128, 23, 57,131,250,248,127,254,255,248,205,240,233, 51,176, 51,240,255,207,127, 38, 22, 86,198,214, 38, 44,139, 91,
- 82, 82, 64,195,199, 11, 23,220, 97,252, 13,106,254,131,186, 25, 32, 10,220, 74,250,207,204, 8,154,139, 98, 41, 46,113,195, 99,
-117, 74,115,202,131,187, 15,200,136, 81, 96,250,126, 15, 94, 63, 99,108,108,108,102,102,246,250,245,235,187,119,239,130, 22, 38,
-254,251,183,118,237, 90,130,117, 64, 78,124, 60,167,152,152, 15,182,225,154, 28,112, 5,192,137,187, 40,135,100, 72, 52,189,210,
-226,226, 36,185, 31,216, 27,176, 6,247, 6,196, 56, 57,117,172,172,104,154,250,209,202,119, 96,136,161,205, 6, 19,172, 3,132,
- 85, 85, 62,191,127,207,194,206,246,243,231,143,191,191,255, 0, 3,153, 87, 80,240,227,187,119,192,210, 31,127,243, 31,190, 17,
- 12, 50, 1,112,242,220, 37, 96, 5, 0, 31,253,199,181, 47, 76, 77,242,253,155,183,111, 86,173, 94, 14, 23, 9,139, 78,126,247,
-139,180,117,159,152, 99, 62, 24, 34,140, 4,251, 1, 12,219,161, 7, 57,168,108,132,238,189,255,248,251, 47,241,110,112,114,112,
-186, 40,120,209,205,219, 35, 53, 54, 89, 79, 95,119,211,198,205,199, 47,156, 77, 75, 75,123, 68,232,144, 50,120, 53,208, 13, 6,
- 4,119, 56, 2,107, 11, 96,143, 97,203,150, 45,192, 38, 17,176,223, 0, 89, 11,119,245,234, 85, 96,219, 31, 88,250,195,235,146,
- 17, 14,208, 54, 3, 35, 3,128, 0,194,119, 20,196, 63, 93,151, 75, 12, 46,151, 72,177, 73, 71,199,122,210,164, 69,121,249,145,
-210,242,192, 84,251,147,149,157,227,201,243, 79,246,190,113,196,232, 53, 52, 84, 74, 72, 8, 91, 48,111, 29,195,191,135,192,150,
-253,159, 31,223,165, 37,249,229,248,254, 16,208,246,247, 31, 11,211,191,223,140, 44,172,255,255, 64,171, 1, 32,241,255, 47,145,
-203, 90,210,114, 65, 67, 10,245,149,153,172, 44,140,144,115,131,254,254,253,251,225, 51,176, 38, 96, 96,102,249, 55,109, 42,190,
-244, 23,159, 0,218, 28, 48,111,238, 77, 6,200,137, 52, 76,192,238, 2,104,204,167,168,196,135,160,189, 31,191,124,196,122,212,
- 15, 65, 0, 44,131,128,157, 0,160, 35, 63,125,250,196,204,204, 12,100, 72, 72, 72,252,254,253, 27, 57,171, 0,235, 0, 92,103,
- 66, 64,154,234,130,100, 45,247, 20,130, 4, 41,137, 37, 62, 38, 16, 39,113, 88,150,236, 57, 0,180,146, 29,235, 90, 32,130,219,
-193, 20,204, 76,129,228,141,131, 7,127,124,251,254,239,239, 95, 77, 99, 99, 93, 43, 59, 30,105,188, 1,248,159,241,225,253,187,
-160, 25, 23, 6,134,164, 32,232,148, 14, 80, 4,153,141,117,139,200,173,231,192, 36, 33, 24, 30,157,242,240,241,139, 19,135,182,
- 0, 69, 86, 45,157,107,110,231,195, 43,110, 67, 76, 64,133,129,246, 97, 16, 62,233,225, 47, 35,246, 77, 8,143, 2, 37,182, 63,
-251, 65,173, 66, 71, 31, 12,206,156, 57,179,247,196, 65, 97, 17, 97,146, 14, 41,129, 84, 3,196,168,228,229,229, 13, 14, 14, 62,
-126,252, 56,176, 25,116,234,212,169,209,179,128, 48, 71,255,209, 74,127,180,249, 0,128, 0,162,254,165,240,202, 26,166, 91,119,
-222, 9,240,230, 18,147,150,125,247,249,143,189,119, 44,241,122, 45, 77, 53, 44, 77,171,210,211,235, 24, 24, 94, 10,242,178,200,
- 9,253, 35, 60,106,153, 88, 66,185,155, 27,219,167, 3,201,252,130,156, 95,223,127,255, 3, 47,181,236,159,218, 79,164,222,164,
-100,208, 73, 65,243,230,220,248,247,159,185,178,194,159, 14,145, 10, 58,242,232,231,207, 95,191,126, 65,138, 69, 72,129, 56, 92,
-207, 7, 37,120,194, 4,241,128,152, 83, 63,113, 1, 13,123,123,226, 21, 63,191,119,211, 92, 85,134,108,187,222,254, 82,225, 17,
- 87,113, 9,181, 33, 85, 35,174, 83,222,144, 0,211, 31, 70,246,239, 76,216,231,255,239,126,254,163,198,139,167, 64, 32,103,161,
-176,137,137, 9, 29, 18,137, 37, 24,140, 22,247,184,234, 0, 60,178, 0, 1, 52,122, 41,252,144, 4,163,183,186,143,130, 81, 48,
- 10, 40, 7, 0, 1, 52,122, 35,216,144, 4,163,165,255, 40, 24, 5,163,128,114, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,
-140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16,
- 64, 52,185, 20,126, 84,239,168,222,193,169, 23,114, 26,196,104, 88,141,234, 29, 81,122,241, 0,128, 0, 98, 65,203, 30,196,232,
-193,154,133, 40,209, 59, 10, 72, 5,184, 10,178, 81, 64,106, 40, 17, 25,146,143, 30, 61,122,250,244, 41, 59, 59,187,136,136,136,
-156,156, 28,221,188, 0, 63,243,117, 48,231,160, 87,175, 94, 61,125,250, 20,191, 26,105,105,105, 49,108,187, 79, 40,209, 59, 10,
- 40, 7, 0, 1,132,190,236,151,224,206,123, 60, 27,172,208,244, 98, 30, 77, 76,211, 51,135,233, 95,184,224, 87, 80, 80, 80,160,
-169,169,137, 95,187, 52,234, 25, 56,200, 57, 33, 52, 52,212,197,197, 5,143, 94,170,212, 1,238,238,238, 64,114,231,206,157,116,
-208,251,245,235,215,181,107,215, 66, 46,133, 15, 14, 14, 54,196,125,159, 34,166,103, 9, 94, 10, 63, 99,198, 12,172,173, 13,252,
-161, 68, 76, 24, 2, 75,168,159, 63,127, 2,173,224,224,224,248,241,227, 7,176, 38, 56,125,250,180,190,190,190,138,138, 10, 46,
- 45,214,214,214, 4,253,245,252,249,115,200,181, 39,248, 1,176,244,135, 28,247, 77, 76, 88, 17,179, 23, 36, 44, 44, 12,127,186,
-130, 0,121,121,121, 6,240,121,203, 64,191, 67,226, 14, 79,154, 4,166,219,162,162, 34, 60,150,190,127,255,222,220,220, 28,107,
- 80, 3,245,106,105,105,225,209,251,242,229,203,218,218,218,209,230, 14, 37, 0,207,165,240, 0, 1,196, 50,108, 60, 73,255, 70,
-241,198, 25, 30,184,164, 2, 50,119, 16,212,190,127,255,126,120,246,248,246,237, 27, 23, 23,215,235,215,175, 9,214, 46,123,246,
-236, 65,102, 35,103, 72, 32,119,245,234,213,196, 7,194,229,203,151, 33,133, 56,154, 57, 36,129,140,140,140,236,236,108, 98,174,
-126,133,220, 4, 25, 23, 23, 7,244,111,111,111,175,130,130,130,160, 32,225,189,208,192,146,119,251,246,237, 16,182,135,135,199,
-142, 29, 59,176,178,241,244, 56,225, 9, 3,200, 48, 54, 54,158, 53,107, 22,164,160, 36, 38,193,124,252,248,145, 23, 12,128,165,
- 63, 39, 39, 39,176, 50,248,240,225, 3, 63, 63,255,169, 83,167, 24,192, 27, 86,113,105,212,209,209, 1, 22,151,240,130, 27,185,
- 21, 15, 44,208,129,228,137, 19, 39,162,162,162,136, 9, 97, 34, 75,127, 8,152, 48, 97, 2,229, 9,155,155,155,251,218,181,107,
-172,172,172,191,126,253, 2, 6,242,237,219,183, 43, 43, 43, 9,234,122,137,116,188,160,173,173,237,225,195,135,225,220, 55,111,
-222, 16,169, 17, 19, 60,128, 29,162, 55, 10, 40, 47,253, 25, 48, 46,133, 7, 8,192,222, 25,219, 48, 8, 3, 81, 52,146,171,204,
- 16, 15,225, 34, 61,131,120, 10,247, 46,211, 51,144,229, 13, 34,121, 28,183,121,242, 33, 11,129, 2, 7,105, 40,242, 43, 64, 50,
- 58,225,227,223, 63, 23,247, 47, 90, 0, 74, 41, 74,133,120,157,131,145,199,243, 53,137,154,119, 84, 46, 17,234, 23,121, 53,142,
-163, 70,199, 45,124,225, 33,238,148, 18, 44,185,152,116,166, 65, 55,133, 23,111,200,163, 64,251,231,156,187, 41,252,238,151, 71,
-251,203,204, 72, 49,133,167, 6,104, 90,129,223, 77,225, 9, 12,210,159,155,194,147, 39,176,243,110,192,236, 14,188,127,107,102,
- 9,104,127,154,140,123, 51,133,175,181, 26, 99,120,213, 70, 1, 16,150,239, 26, 95,110, 79,128,133, 68,171,111, 2, 64, 8, 65,
- 46,122, 70,173,159,124, 3,194, 31,178,142, 49, 82, 3, 72,140, 97, 24,148,236, 63, 7,236,239,189,159,215, 0,105, 35, 54, 18,
-233,244,230, 58,231,104,163, 41, 87, 50,203, 86, 96,173, 37,193,248, 41,200,207, 63,251, 79,172,210,124,225,215,166,240, 31, 1,
-216, 59,155, 19, 6, 97, 56,138, 11,210, 13,114,235, 16, 30, 29,160,189,101,129,220, 29, 35,251,184, 71,134,201, 49,217, 64,232,
-207,252,105, 16, 81, 19,219, 82, 40,244, 29,130, 40,228,160,201,251,240,144,247, 73, 1, 96,155, 21,239, 84,130,205,134,181, 60,
-171, 1, 44,187,223,250, 57,158,217,255, 20,157, 9,133,193,218,114,120,250,242, 52,208,122, 96,255,155,185, 20,229, 46,165,240,
-140, 53, 46,126,133, 91, 2, 83, 49, 3, 99,113, 6, 40, 21,215,255, 90, 20,120, 7,155,165,240,197,208,195,215, 65, 0,134, 97,
- 32, 7,132, 16, 46,207, 86,120, 46, 80,130, 24,227,113,114,130,253,179, 42,139, 0, 72, 14, 72, 77,100,181,121, 11,222,207,181,
-207, 95, 88,216,216,109,231,156,214, 26, 37, 80, 74,113, 13,251, 35, 6,172,210,182,173,233, 55,154,217,223, 90, 43,155,113,149,
- 3,246, 48,142,227, 65, 8,240,222, 27, 99,246,158, 78,211,116, 77,224,109, 75, 56,238,186,174,239,123, 49, 28,127,251,191,100,
-255,102,171, 20,254, 33, 0,123,215,110,195, 48, 8, 68,163,140,132,216,129, 79,155, 53,178, 6, 27,100,141,136, 58, 29,107, 32,
-209,177,131, 27, 40,242,146, 83, 40,130, 13, 1, 81,230, 10,203,182,140,125, 6,241,222,221, 67,226, 86, 18, 64, 45, 92,252,184,
- 50,188,138, 3,180,214,163,121, 64,215,195,238,171, 46,215,199,253, 38, 38,126, 16,240,135,121, 85,123, 27, 99, 28,165,132,137,
-126, 46, 69,225,129,218,136,149, 48, 3, 39, 8,128,140, 26,130, 3,142,250,138,212,255,211,167, 40,124,217, 59,158,138,194,211,
-205,198, 64, 75, 41,203,122,146, 82,170,228, 4, 13,229,167,142, 66,234,162,240, 69, 11,218,181, 16,194,249,189,151, 56, 78,240,
- 69,239, 61,109,190, 68, 69,225, 95,181,166,183,205, 90,219,128,242,130,254,200, 54,190,216,104, 72,213,193,195,228,240,104, 42,
- 48, 97, 41, 37,198,152,115,142,115,142, 81, 35,145, 13,151, 66,136,156,115,183, 57, 16, 31, 71, 99,204,145, 22,180,220, 16,118,
- 32,161, 4,167,162, 91,224, 57,198,136,208, 31,124, 0,183,255,208,223,181,167, 0,162,102, 5, 64,245, 73, 96, 50,234, 0, 96,
-115,146,164,126, 0, 36,107, 45, 93,186, 20, 77,124,219,182,109, 64, 65, 34, 13, 57,113, 95,203, 66,241, 26,241, 35, 63,240, 6,
- 38,188,169, 8, 76,190,144,194,136,212,210, 31, 94,135,145,212, 60,132, 52,255,209, 46,133, 39,175, 19, 0, 55, 1,207,165,240,
-240, 38, 63,176, 76, 1, 54,102, 85, 85, 85,129,141,104,118,118,118,126,126,254,150,150, 22,130,253, 0,228,177,126, 92,243, 1,
-100, 84,237,192,130, 24,174, 6,243, 68, 44, 96, 3,159,151,151, 23, 88,234, 29, 59,118, 12,216,248, 5,150, 44,223,145, 46,133,
- 7,221, 59, 77,232, 82,120,204, 97, 31,120, 91, 30, 24,221,175, 72,188,125, 19, 24,191,144, 21, 65,100,244, 3, 8,142,252,192,
- 1, 48, 34, 74, 75, 75, 33, 57, 14,104,221,237,219,183, 25, 64,199,244, 26, 2,235, 63, 98,214,225, 80, 82,214, 67, 42, 15, 50,
- 12, 4,198, 35, 48,118, 44, 45, 45,225, 7,207, 1, 93, 11,236,187,140, 22,238, 12, 72,119, 2, 35, 15, 1, 33,167,118,128, 0,
- 26,236,147,192,244,169, 3,128,234, 33,253, 86,120, 71,152,200,210, 31,216,252, 39,219,107,144,230, 63, 90,195,255,197,139, 23,
-180, 46,253,225,205,127, 29, 29, 29, 8, 23,200,160,176, 19,128, 31,192, 71,255,185,185,185,107,107,107,129,165, 63, 68,220,192,
- 0,116,201, 9,176,220,247,245,245, 61,114,228, 8,144,164,162,165,240, 48,129, 79, 0,160, 1, 96,179, 17,222, 3,192, 92, 55,
- 13, 44, 83,128,117,192,143, 31, 63,128,181, 20,176,174,130, 92,183, 9,191, 20, 30,200,192, 95,250, 67, 42,117,204,177, 32,228,
-153, 97, 82, 1,217, 26,137,159, 3, 0,214,199,222,222,222,192, 28,196,197,197,229,224,224, 0, 12, 1, 96,148, 1,107,232, 5,
- 11, 22, 48, 49,209,118,211, 40,176,172,135, 15, 31, 65, 50, 32,241,213, 9,176, 65,243,232,209,163,240,240,112, 6,240,165,211,
-160,171,199, 70, 1, 90, 63, 24,199,189,240, 0, 1,200, 59,131, 28,132, 65, 32,138,238, 61,141,186, 55,158,171, 27,238,194,198,
-112,136, 90, 57, 66, 87,156,130, 21, 97,107,244,153, 73, 8,193, 90, 1, 99, 98,226, 95,145,118, 51,105, 50,111,102, 24,202,252,
-250,159,192, 29,157, 0, 84,159,188, 39, 88,164,186,181,158,254,162,253,110,123,158, 46,167,105, 35,241,128,106,160,201, 84, 48,
- 52,142,163,236,227,227,126,117,137,225, 45,125,156, 14,250, 75,250,255, 60, 20, 30, 27,228, 85,135,222, 14,133, 7, 34,178,192,
- 63,231,249, 49,220,220, 24,147, 30,126,117, 40,124, 58,243, 83, 68,205,245,102, 59,233, 63,148,199, 66,239,189,244,234, 81,140,
- 49,132, 0, 95,168, 6,168, 0,174,175,199, 13,229,176, 46,250,246,197,185,254,245, 40,146,155, 93,115,108,244, 67,105,173,225,
- 62,244,119,206, 89,107,161,191, 82,138,216, 60, 12, 67, 77, 0, 56, 44,169, 41, 6,224,134,173,244,151, 77, 72,161, 63, 98,113,
-108,185,187,251, 79, 68, 5,144, 58, 1,185,238, 2,104,144, 78, 2, 83, 82,250, 3,211, 16, 25,221,100,200, 88, 16,176, 43, 64,
-124,233, 15, 44,238,129,165, 63,116,148, 99,221,250,181,224, 91,252,128,149, 1,131,147, 35, 3, 3,225,101,160,144, 85,137,144,
-177, 32, 96, 19, 21,114, 9, 42,176, 8, 38, 34,249,130,138, 90,248,189,240,164,150,254,144,230, 63,214,198, 62,121,157, 0, 72,
-181,145,147,147,131, 51,160,130,131,145, 47,133,143,137,137, 97,192,184, 20, 62, 54, 22,231,189, 17, 20,206, 1, 48,144,117, 41,
-188,176,176,240,219,183,111,129,237,253,215,175, 95, 3,123, 0,240, 75,225,129,253, 54, 96,124, 1, 75,127, 96, 53,128, 54,184,
-143, 12, 32,165, 60,100, 20, 8,237, 38, 50, 60,186,208, 74,127,200, 38, 0,100, 46, 25, 13,127,226,199,127,128,224,246,237,219,
-192,232, 0,122,208,210,210, 18, 72, 2, 3, 13, 88,158,110,218,180,137,153,153,153,152, 10,128,146, 86, 60,178, 9, 36,233, 50,
- 6, 3, 32,227,220,185,115, 64, 55,219,216,216, 0,147, 22,176,151,137,188, 96,122,196, 2,200, 42, 32,180, 73, 96,228, 85, 64,
- 0, 1,216,187,130, 20,134, 65, 32,248, 1,159, 32,248, 12,207,130, 63,242,149,130, 79,240,228, 55,188,116,154,129,101, 91, 75,
-220,228, 80,122,232,158, 36, 36, 16, 54, 58, 51,113, 71,246,119,139,192,223, 68,127,205, 1,151,180,255,199,241,147, 3,108, 19,
-151, 3, 8, 46,125,100,172,214,186,125,118,237, 11, 79, 71,208,246,253,165, 41,252,170,161,104,164, 59,241,228,173, 39,191, 72,
- 39, 64, 70,160,191,108, 40,173,129,239, 24, 66, 96,255,119, 16, 0,189, 64,250,162,110, 41,254,206,117,175,231, 0,236, 53, 0,
- 61, 9,145,147,156, 51, 16, 65,239,152,157,231,202,123,223,123,103,231,181, 57, 39, 25, 72,154,194,179, 38,108, 52,243,228, 35,
- 68,191, 91,118,114, 4,238,113,179, 94, 68,183,237,164,198,160,227,179,148, 2,249,159, 82, 2, 31, 56,231,198, 24, 70, 2, 16,
- 4,167,144,186, 87, 18,184,170,253,185,142,144,177,214, 26, 6,128,254, 24, 35,242,134, 95,153,127, 29,120, 27, 15, 1,196,130,
-153,223,200, 54, 11, 45,117, 34,183, 95,144,155, 69,180, 43,253,129,201,142,194,165,114, 36,105,127,252, 4,231,120, 61, 39, 39,
- 23, 65,237, 88, 7,166,137, 4,192, 2, 5, 88,226,239,221,187, 23,126, 47, 60,124, 49, 40, 49,117, 24,214, 75,225, 33, 59,110,
- 8,110, 10,195,172,212,115,115,115,241,148,254, 16, 32, 36, 36, 4, 25,226, 7,182,166,145, 27,254, 53, 53, 53,248,147, 28,133,
-251, 0,144, 67, 3,109,171, 4,193,250, 30,216, 21,219,182,109,219,159, 63,127, 62,124,128, 92, 10, 15,114, 9,176, 67, 0,228,
- 2,217,196, 55,228,129,246, 34, 47,253, 68,158, 30,192, 95,250, 51,144, 59,199, 67,121, 29, 80, 81, 81,113,240,224, 65, 96, 52,
-181,183,183, 3, 91, 12,192, 14, 16,100, 75, 4,193, 33, 62, 50, 90,241,200,122, 73, 5,192,154,233,233,211,167,200,251, 0, 46,
- 94,188, 8,236,186, 1, 91, 21, 68,174, 91, 29, 9, 0,109, 18, 24, 25, 0, 4, 16, 11,254, 66, 28, 87,223,150,214,128,140,210,
-159,206,249,164,165,165, 5,255,254, 70,130,149, 37, 37, 67,186,144, 66, 19,178, 12, 31,200,128,236, 5,131,223, 11,143,167, 92,
-131, 92,236, 14, 44,188,144,231, 0, 32,205,219,178,178, 50,252,165, 45, 86,189,164, 14, 25, 17,217,240,167, 86,151, 20, 57, 28,
- 48, 47,133,199, 95, 7, 0,131,197,219,219, 27,216,146,101, 99, 99,251,249,243, 39,176, 14, 0,134,176,128,128, 0,176,192,194,
-115, 80, 7,114, 62,130, 79,255, 2,237, 5,170,135,231, 29, 92,185, 12,146, 36,208,182, 13,147, 58,247,139, 57,230, 67,210, 40,
- 16,164, 14,128,111,254,202,202,202,130, 48,128, 61, 33, 60, 90,158, 61,123,134,188,219,107,197,138, 21, 4, 79,248,193,165,151,
- 36,112, 1, 12,208, 4,159,128,193,104,185,207,128,116, 39, 48,114,209,143,188, 10, 8, 32,128, 88,168, 88,190, 99,234,165, 79,
-109, 65,255,210, 31, 8, 68,193,128,108,237, 74, 96, 64, 45,199,192,199,127,144,203, 62,172,151,125,146,125,228, 3,133,122,177,
-246, 6,136, 4,100,207, 1,160, 37, 9,172, 93, 46,130,201, 6,216,173,188,123,247,238,254,253,251,191,127,255,254,247,239, 95,
- 3, 3,131,176,176, 48,130,113,119,226,196, 9,120, 55, 2, 46,130,204,198,149, 42,224,141, 3, 72,205, 1,204, 65, 4, 43, 27,
- 56, 8,163,236,254,100,178,115,144,180,180,116, 96, 96, 32,126, 53,205,205,205, 84,215, 59, 10, 72,170, 3, 48, 75,127, 32, 0,
- 8, 32, 22,106,149,161,163,167, 53, 13, 56, 64,139, 2,226,143,132, 29, 66,158, 26, 16,163,148,193,128,120,245,192,254, 13,145,
-231,252,224,105, 28,144, 81,221, 82,171,134, 38, 21,136,137,137,145, 29,182,148,232, 29, 5,196,215, 1,184,164, 0, 2,104,244,
- 82,248, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70,111, 4, 27, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,
-163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,
-130, 17, 10, 0, 2,136,134,151,194,143, 94,192, 61,170,119,136,234,221,236, 55,133,120,189,190,155,114,168,165,119,163, 47, 9,
-122,253, 55,163,232,245,177, 1, 93, 47,202,200,200,248,251,247,239,251,247,239,255,250,245,139,133,133,229,201,147, 39,145,252,
- 10, 59,207,156,249,174, 39,107, 97, 97,193,204,204, 12, 89, 68,187,229,200, 83,106,133, 21,196, 94, 56,128,236, 80,185,122,245,
-170,148,148,212,187,119,239,128, 36, 39, 39, 39, 3,108, 67, 31,154,189, 88,245, 62,190,178, 36,221,246,209,178, 51,106, 44, 98,
-110, 60,188,124,184,244,142,166,103,226,245,226, 1, 0, 1, 68,194, 81, 16,248, 55, 37, 82,241, 2,110,147, 51,107,174,191,124,
-207,203,204,172,199,205,180,203, 54,129,160,250,255,255,255, 50, 50,226,220,245,247,239,255, 47,134,255, 12, 76, 76,108, 4,205,
- 25, 18, 23,112, 15, 54,112,243,230,205,254,254,254,222, 42, 16,123,195, 97,208, 25, 0,120, 20, 63,120,242,248,233,147, 39, 55,
-111,220,120,255,254,189,188,188, 60, 15, 47,175,135,171, 27,126,243, 33, 71, 36, 65, 0,174,203,203,128,226,196,199, 20,100, 23,
- 52,214, 59,132,241,129,208,119,144,180, 6, 58,136,105,181, 16, 9, 26,141,251, 25,148,226,193,201,107, 1,195,217, 34,146,195,
- 55,228, 13,194,222, 53, 34,120, 20, 2, 75,207,175, 95,191,238,218,181, 11,152,140, 67, 89,133, 37,100, 69,127,124,253,206,249,
-237,143,117, 73,170,157,111,248,150,185, 51, 54,239,221,235,230,230, 70,135, 36,241,247,239, 95,160, 27,244,245,245,213,212,212,
-206,157, 59,247,227,199, 15, 85, 85, 85,204,195,225,177,130, 63,127,254, 92, 60,115, 94, 38,217,176,204, 76,251,196,174,158,181,
-151, 29, 84,117,156,136,212, 59, 10,200, 0, 0, 1, 68, 84, 5, 64,204,145, 62, 84,185,128,219,245,242,122,185,151, 15, 24, 88,
- 25,152,255,253,249,247,225,203,179, 55,140,127,174, 84,252,116, 12,229,214,192,115,116,215,255, 83,151,107,126,255,102, 17, 22,
- 98, 97,102,102,249,249,147,233,198, 45,230,111,223,216, 76, 12,254,253,250,195,120,232, 4, 15, 80, 69,124,112,168, 0, 31,225,
- 10,128,164, 11,184,113,213, 28,180,190,178,131, 1,114,140,101, 61, 35, 99, 19,214,186,240, 63, 80, 42,236,122, 40,125,150,132,
-195, 74,255,255,224,210,223,238,200,145, 35,120, 42, 0, 61,253, 93, 90, 90, 38,171, 87,243,157, 60, 14,218, 6,117,235,198, 77,
- 32,153,146,184,238,227,151,156,207, 31,240,157, 36,225,234,234, 10,172, 6,128,165,252,190,125,251,176,158,148, 71,252,166,127,
-204,148,156,145,158, 62,131,184,202, 3,249, 26,122, 18,128, 82, 60,226, 80, 54, 50, 42, 0,152,239,240,156, 60, 10, 1,119,239,
-222, 61,176,106, 85,147, 75,152, 65,116, 22,155,184, 32, 3, 11, 19, 3, 3, 19,176,249,195,240,143,245,223,207,255, 94,241,105,
-143, 38,117, 28, 59,118,204,202,202,138,214,133, 41, 19, 19,147,129,129,193,129, 3, 7,128,117,128,153,153,217,139, 23, 47, 46,
- 94,188,168,167,167, 71,204, 49, 51, 64,207, 58, 59,185,182,247,109, 42, 79,184,108,225,145,105, 97,190,167,100,242, 19, 53,211,
- 56,172,122, 33,177,137,191,122, 0,202,146, 92,217, 15, 35,128,118, 33, 48,162,239, 5, 91,253, 15, 16, 64, 44, 68,102, 24,131,
- 56,221, 76,235, 28,226,235, 0, 50, 46,224, 54,190,119, 92, 65, 92,138,193,192,140,145,135, 95,127,215,170, 55,255,126, 63,255,
-248, 89,139,227,223,133,109, 75, 63,255,103,224,213,196, 94, 7, 0, 99,158,155,139,229,223, 63,214,143, 31,217,216, 88, 88, 56,
- 57, 89, 29,173, 24,254, 1, 19, 33, 35,235,171,119, 12,108,172,172, 44,140,191,254,252,254, 77,108,110, 37,177,236,134, 31,217,
- 8, 57,136,106,235, 13,214, 31,191,127,167, 39,154, 16,172, 6, 8,214,169,248,246,127,214,131, 50, 3,228, 22, 36,172, 82,196,
-128,219,123,249,122, 86, 69, 66,216,197,161,203,213, 92, 62,145, 81,250,247,245,245, 1,115,123,113, 27,244,226, 39, 60, 57,220,
-193,225,163,154, 26,176,233,189,217,214,118, 18, 92, 48, 42,138, 1,124,135,219,148,229,171,240,213, 1,144,210, 31,114,176, 87,
-120,120, 56,228,212, 35,130, 5, 34,214,182, 63,228,192, 12,184, 59, 51, 50,136, 45,253,201, 4,198,125, 12,176,139,218, 65, 21,
-128, 81, 47,195,185, 98, 26, 89, 5,172, 29,167, 7,166, 41, 58,185, 50, 48,255,100,100,101, 98,100, 97, 98,100,102,253,255,159,
-241,223,215, 63,255,255,254,253,255,235,111,106,124, 86, 86, 93,254, 93,113,113,146, 54,181,145, 1,128,121, 65, 82, 82, 18, 24,
-206, 7, 15, 30,188,113,227, 6,176,254,182,180,180, 60,121,242,164,182,182, 54, 65,189, 71,246, 46, 15, 50,248,118,246, 51,115,
- 84,253, 23, 27,195,137, 57, 5,225, 61,229, 31,202,123,150, 42, 25, 70,225, 41,220,225,197, 11, 48,138,209, 68, 40, 57,143,114,
- 36, 0,128, 0, 98, 33,166,144, 90,182, 99,169,178,138,114,122, 83, 42, 49,117, 0,121, 23,112, 91,221,220,167, 45, 47,203, 40,
- 37,203, 16,152,245,255,235, 87,134,119,111,133, 94, 61,253,125,116,235,215,119, 63,185, 25,254,190, 56,184,233,159,148, 10, 63,
- 63, 63,214, 26, 0, 88,250, 63,125,206,114,245,182, 56,232,200, 66, 6,102,126,222,191,134, 90,223, 21,229,153,216, 88,152, 88,
- 89,216, 68, 5, 24,127,254,252, 1, 63, 67, 31, 15, 32,245, 2,110, 72,233, 15, 41,250, 65,126, 63,242,251,251, 47,208, 5,191,
-206,229,187, 59, 59, 93, 9,154,115,183,227, 46, 43,227,109,104, 52, 48, 62,101, 20,209,128,177, 95,137, 38,226,219, 28, 15,108,
-251, 35, 95,102,130, 34,149,190, 26, 44,133,175,249,255,230,178,100,205, 20,255,255, 12,255,219, 11, 54,152, 59,168, 45,155,118,
-184,119,117, 20,195,234,255,245, 69,211,164,212,137,109, 74,127,121,152, 46,205,193,240,237,237, 85, 96,227,139, 87, 76, 15, 82,
-250, 79,159, 62, 29,171, 98, 94,129, 43,106,106,192, 50,247, 24,176,159,112,242, 36, 3,248,206, 62, 16,128,239,240,143, 12,155,
- 50, 99, 78, 53,211, 63, 89,172,218, 33,165, 63,176,237, 15, 44, 83,240,220, 59, 70,176, 41, 3, 41,253,145,234,131,244, 25, 51,
-176, 39, 75,166,176,247, 12,176, 20,195, 8,198,255, 66, 81,101, 25, 33,163, 50, 32,202, 27,181,207,195, 20,254, 30, 50, 96, 3,
- 26,126,252,151, 80, 80, 80, 0, 17, 7, 50,128, 53, 1,147,106, 50,212, 96,176, 26, 52,189, 44,225,232,246, 34,223,195, 8,146,
-197,109,239,143, 31, 63, 36,228, 21, 24,254,253, 98, 98,103, 96,100, 97,254,243,249,227,143,123,247, 95, 63,121, 42, 99,229,192,
-200, 38,192,248,251, 23, 3, 51, 83,103,102,137,235,172,134,162,162, 34,178,203, 11, 92, 71,140,192, 75,100, 96,122,248,254,253,
-187,144,144, 16,176,125, 0, 12,237,251,247,239, 47, 88,176, 64, 83, 83,243,195,135, 15, 4, 59, 88, 64,189,242, 76, 39, 37,229,
- 60, 62, 28,188,252,241, 61,251,226, 45,127,182,157, 88,146, 23,202,201,242, 13, 24,107, 81,216,251,187,163, 0, 47,192,140, 44,
-180, 62, 1, 64, 0,177,224, 47,250,129, 65,236, 88,101, 63,235,224,204, 52,134,244, 11,139, 46, 51, 88, 19,182, 18, 82,238,127,
-251,182, 20, 24,167, 63,126,204, 19, 18,218, 67,204, 5,220,234,111,174, 51,104,104, 50,120, 37, 48,124,126,195,248,246, 29,131,
-184, 36,195,167,119,188,204,255,249, 56, 24, 36,126, 50,188,250,242,225,251,190,245,252,129, 9,216,135, 62,191,177, 92,191, 45,
- 4,236, 60,114,179,126,103,102, 98, 6,182,125, 94,190,228, 86, 87,249, 39, 35,201, 24, 23,250,247,255, 63,166, 15,239, 88,136,
-169, 0, 72,189,128, 27,185,244,103, 96, 97,190,247, 28,148,123, 31,189,252, 33, 39,206,161,154,176,185,179,211, 23,191, 33,192,
-210, 31, 88,238, 51, 51,190,249,251, 95,132, 93,140,145, 59,226,217,191,127,239,126,252, 88,253,247, 76, 25, 37, 61, 21,130,181,
- 87,245, 20, 63, 75,161,154, 41, 27,146,121,152,228,128,220,172, 92,117,125, 51,165,165, 83, 15, 54,246,101,207,156, 73,108,103,
- 25, 88, 4,165, 23, 94,129,132,191,141,141, 13,176, 2,192, 85,250,131,106, 68,135,183, 12, 12,151, 24, 24,174,124,120,201,163,
- 42,199, 48,123,246,151,253,251, 25, 84, 85,129, 78, 5,149,114, 64, 65, 80, 23, 83,247,250,165,139,178, 88, 75,127, 96,219,246,
- 31, 24, 48,128,239,147, 33,181,192,130,179,145, 75,127, 6,208, 52, 0,206,216, 1,118, 11, 32,101, 56,214, 90,246, 31,172,220,
- 1, 54,118,128,225,176,249, 16,202,132,219,244, 25, 51, 33,253, 11, 5, 5, 5, 96,246,153, 56,113, 34, 68, 28,200, 0, 86, 0,
- 59,119,238,132,159, 91,201,128,161, 23,210, 29, 1,234, 74, 77, 77,197, 50, 62, 14,235,244,204,154, 61, 27,104,239,150,195, 79,
-209, 74, 67, 22, 94, 94, 6, 86,230,191,223, 62, 92,223,182,119,233,170, 53,211,158,129, 44, 58,213,200,167,106,231,245,243,209,
-227,171, 23,207, 94,190,127,235,227,139, 23, 87,174, 0, 35, 78,130,140,210, 4,243,216, 53,204, 18,252,217,179,103,181,181,181,
- 61, 61, 61,191,126,253, 2,102, 73, 94, 94,222,175, 95,191,158, 58,117, 10,127,178,132,232,253,240,228,104,227,252, 71,115, 11,
-164,222,125, 5,246,230,153,100, 4, 57, 94,188,249,149,222,245, 71,223,196, 88, 14,119,175, 14, 82, 13,192, 35, 26,147, 49, 10,
-208, 74,127,228, 90, 1, 32,128,152,112,229, 25,200,185,231,136,222,186, 71, 52, 49, 22, 64,110,128,249,246,109, 25,164,244,231,
- 56,253,224,219, 78, 21, 6, 66, 55,195,200, 28, 92,193,250,251, 59, 35, 43, 35,195,243, 7, 12,191,255, 48, 60,190,246,255,229,
-115,198, 55,207,121,254,252, 99,101,248,207,244,159,231,205,183, 63, 29,187, 79,224,210, 46, 45,193,226,226,192,160,173,246,139,
-133,153, 21,216,228, 23,225, 97, 55,212,103, 98,101,101, 99,103, 99,255,255,143,253,225, 19,118,208, 21,126,255,136,106, 44, 64,
- 46,224,134, 4, 2,254,211, 58,129,178,200,151,138, 68, 78,120,178,247,236,123, 96,233, 15,169, 3,110, 63,249,206,224,178, 10,
-191, 9,192,210, 31, 84, 13,124,190,204,205,125,135,157,227, 51,176,244,255,253,251, 44, 51,179,210,175,175,111,105,151, 2,238,
-158,255, 2,140, 26,120,233,255,252,230,127, 35, 95,230,220, 22, 87, 27, 87, 96,247,252, 63, 88,150, 48, 88,182,108, 89,113, 27,
- 35,143,168, 46, 48, 76, 61, 2, 51,143, 28, 57,130, 71,241, 63,166,199, 98, 98,208,210,255,243, 91,208, 41,217,250,250,160,210,
- 63, 46, 14, 90,250,127,126,203, 9, 68, 66, 92,207,177,106, 15, 9, 9,113,116,116,116,114,114, 10, 15, 15,103, 70, 5,112, 17,
-252,174, 69, 75,201,196,214,112, 72,101, 19, 4, 96,114, 25, 25,176,180, 43,224, 26,221,220,220,208,218,218,192, 78, 0,228,216,
- 62,196,240, 37, 42,216, 48,115, 38,176,116,134, 24, 14,247, 38,124,112, 28,206,197,106, 47,219,255,255, 76, 92,236,191, 95, 60,
-156, 89, 83,179,224,235,135,247,246, 22, 16,241,185, 75, 22, 52,148,164,168, 21, 69, 54, 93,222,183,234,253,125, 87, 63, 63, 34,
- 59,184,192,226, 30,152, 11,206,159, 63,143, 84,101,206,192, 58,202, 7, 9,144,203,151, 47, 31, 60,120, 48, 50, 50, 18,216, 75,
-251,242,229, 11,228, 0,109, 96,191,132,135,135, 39, 44, 44,204,218,218, 26, 87,209, 15,210,123,124,237,173,157, 69, 69,149,189,
-155,235,165,174, 63,101,249,248,133,249, 31, 35,195,219, 47,191,254, 11, 43, 23, 86,181,250, 4,196,224,172,170,129,213, 56, 56,
-195,206, 4, 3,172,140, 81,128,171,244, 7, 2,128, 0, 98,193, 90,244,147,209, 49, 68, 19, 1,150,254,104,221, 2, 60, 23,112,
-243,127,120,252,159,241, 3,227,249, 99,255, 63,125,102, 20, 19,103, 96,227, 97, 60,179,151, 65, 84,140,129,153,229,207,175,255,
-191,254,254,123,247,143,225, 63, 35, 46, 87,253,127,243,142,229,248, 25,118, 41,113,150, 80,255,223,172,172,192, 54, 16, 35, 51,
- 51, 11, 51,248, 14, 11, 14, 54, 70, 49, 81,134,143,111,255,146,116,207, 1, 49, 23,112,163, 52,255, 25, 24,150,231, 72,194,217,
- 38, 21,247, 88,255,191,249,205, 40, 66,240, 10,111,142, 47,251,133,154,150,188, 46,206,120,243,142, 83,234,247,213,191,127, 65,
- 21,198,195, 11, 18,180, 75, 4, 93, 51,138, 83,220,102,194, 75,127,136,160,133, 96,141,149,118,136,165,208, 85,160, 44,193, 60,
-179,116,233,210, 67,135, 14,189,125,235, 44, 44,188,151, 71, 68, 7,152, 90,152,152,152,240,204,179, 61,122, 4,172, 44,175, 64,
-198,141,128, 30,126,247,149,193,204, 12, 60, 9,113,155, 97,234, 84,134,207,159, 24,190,126, 97,248,242,149,129, 91, 16,223, 36,
- 4,230,136,255,221,187,119,129,100, 91, 91, 27,144, 84, 83, 83, 35,111, 52, 3, 30,221,120,148,229,231,231,195, 91,241,200, 69,
- 57,126,195, 21, 21, 21,225,163,255,112, 0,233, 4, 0,165, 16,157, 0, 84,144, 44,173,118,235,234,181,167,130,130,192, 32,205,
-203,203,155, 52,105, 18,241,246,218,254, 20,248,255,239, 75, 74, 91,181,110, 72,200,204,182, 54,248,253, 45, 51,111, 67, 2, 31,
-116, 76,255,238,221,187,129, 86,131, 51,248, 55,130,165, 63,164, 75, 7, 12, 28, 96, 43,219,192,192, 0, 88, 19, 0, 53,102,102,
-102, 62,254,140,165,138,125,242,228,137,191,191, 63,208,107,219,182,109,131, 92,153,201, 0, 94,210,195, 0,190, 71, 8,207, 60,
- 45, 80,252,222,205, 11, 13,101, 73,194,170,171,207,175,142,191,244,152,241,209, 75, 22, 96,171,239,231,175,223,239,254, 11,103,
- 39,103,145,183, 4,136,146,123, 77, 70, 20, 0, 8, 32, 44, 67, 64,192,106, 28,153,251,225,233,123, 98, 74, 76,120, 15, 0, 60,
- 4, 4,138, 48, 96,243,159,253,202,211,191, 2,160, 70, 31,254, 11,184, 47, 60,120,245,147,251,175,250,247,243,210,143,110, 49,
-168,232, 49, 48,253, 97,224, 19,250,121,241,230,215,207, 76, 95,255,254,255,244,239, 15, 63, 3, 59,195,255, 63, 56, 18,208,191,
- 47, 95,152,217,152,255,124,250,200,116,234, 18,171,131, 57,203,191,127, 44,143, 31,179,158,187,194,201,195,206, 40, 33,202,100,
- 99,249,251,202, 59, 96, 33, 69, 90,130, 32,166,149, 84,190, 26, 20, 50,157,161,130,144, 66, 31, 58,176,243,255, 13, 43,176,117,
-255,255,253,162, 20,193, 72,188,119,210,177,190, 60,253,151, 1, 52,250,209,195,194, 31,249,242,225,153, 46, 25,110, 9,205,143,
- 79,159,190,120,240,140,166, 81,174,111,166,244, 21, 28,165,223, 56,175,113,125,215, 90,215, 8,157, 33,183,118,209, 62,190,138,
-112,219, 63,208,238,208,134, 13, 46, 2,199,247,244, 87, 51, 20,182,254,183,179,179,195,191,244, 83, 65, 70, 22,121,210,113,203,
- 22,208,220,239,178,101,192, 78,192,255, 9, 19, 24,155,154,190,128, 42, 6, 6, 6, 85,117,193,226, 66,124, 86, 67, 26,191,192,
- 14,193,202,149, 43,225,237, 98, 15, 15, 15,204, 82,146,248,106,158,160, 26, 96,137, 9, 44,178, 49, 43,128,190,190, 62,228,245,
-169,152,192,197,197, 5,126, 21, 59, 50, 0, 10,246,247,247,227,234, 16, 31,186,246,168,170,169, 36,185,190,172,242,215, 47,160,
-165,152, 94, 3,218,187,103,207, 30,172,101,162,157,150,220,188,185, 83,141,163,162, 26, 27, 27,177,214, 19, 64, 65,160,246,217,
-179,103, 19, 19, 56,192,210, 31, 50,197, 10,172, 38,103,192, 0, 80, 4, 88, 19, 60,198,182,198,252,247,239,223, 91,182,108,113,
-118,118,190,125,251,246,215,175, 95,129, 92, 96, 13,244,235,215, 47,200,181, 57,248, 75,240,159, 63,127,158, 93, 27,101, 23,212,
-180,243,224,221,251,207,153, 63,125,101, 98,102, 97,120,250,149, 51,175,162,154,160, 94,200,212, 14,254,177,160, 81,128,171,249,
- 15, 4, 0, 1,196,132,150, 37,128,192, 1, 12, 46,194,192,189,211, 15, 63,126,255, 40,108, 70,212,218,103, 72, 41,207,197, 21,
- 13, 44,253, 89, 31,190,253,207,200,200,150,252,150,129,208, 5,220, 44, 60,108,127,254, 51, 60,248,241,235,217,235, 55,127,175,
- 28,100,184,120,234,231,165,243,191, 63,188,125,243,253,223,251,175,156,183,127,254,127,203,192,252,227, 47,214,210,255, 47,176,
- 63, 44, 45,197, 44, 47,247,159,133,153, 5,152,230,128, 45,255,175,223, 88,111,222,226,228,231,100, 17, 21, 98, 55, 53,100,226,
-224, 96, 7, 15, 89, 19,104, 68,144,113, 1,247,163,151, 63,246,158,125, 15, 47,250, 33,165, 63,251,191,135, 64,212,224,206,242,
- 8,216,244,197, 11,214,222,255, 39,218, 11,109, 56,223,255,250,247,201,221,167, 55,143, 94,125,241,224, 3,173,147,194,178,105,
-160, 10,254,211,171,255,192,210,223, 33,153, 37,168,158, 21,130,122, 87, 69, 49, 50, 48,226,207,108,254, 54, 7,227,139, 92, 4,
- 79,236, 5,230,186,141, 71, 29, 24,192,199,229, 19,180, 81, 77, 67, 29,169, 10, 97,152, 50,133,225,206, 29, 80, 63,160,177,241,
- 63, 28, 8, 10, 10,226, 28, 68, 2,143,221,255, 5, 3, 96,147, 31,216,246,191, 5, 6,192,162,176,164,164,132, 96, 56, 83, 2,
- 32, 77,117,180,242, 20,216, 39, 0,122, 31, 87, 43, 30,222, 2, 69,107,254, 67, 0, 86, 65, 56, 56,204,254,129,145,137,103, 78,
- 85, 43,207,150, 61,192, 44, 3, 63, 83, 58, 93, 85, 39,223,216,138,139,139, 11, 88,221,214,214,214, 2, 61,142,121,139,214,220,
-167,183,158,107,107, 73, 75, 75, 3,131, 11,179,198,130,244, 63,136,239, 27,193, 23,216, 0,155,252, 12,176,205, 19, 88, 47,146,
-131,120, 86, 86, 86, 22, 24, 17,192, 78,134,138,138, 10, 11, 11, 11,164,134,182,176,176, 32,166,169,174,172, 97, 56,107,151,192,
-165,109,245,182,150,154,220, 28, 76,220, 92,127, 57,217,127,122,250, 19,117,183, 1,176,188,130,184, 19,207, 88,208, 40,192, 3,
- 0, 2,136, 9,107,152, 2, 65, 62, 24, 0,185,205, 25,205,191, 95,253,225,228,228, 32, 50, 52, 33,117, 62,151,251,157,255,204,
- 76,181,235,190, 49, 16,113, 1,183,178,169,227, 55, 14,161, 23,255,217, 78,255,100, 60,249,254,247,229, 23,255,111,190,100,188,
-249,145,243,213, 55,174, 7,127,190,124,251,245,239,212,199,111, 88,111,224, 99,100,100,102,100, 96, 18,224,101,178, 52,102, 14,
-245,255,235,104, 14, 76,123, 44, 34, 66, 44,142, 54,140, 78,246,204, 86,230, 92,194, 34, 2,236,108,236,192,226,159,137,233, 63,
-254,210,159,212, 11,184,129,138, 65, 3,253, 12, 12,103, 58, 64,125,133,157,165,160, 21, 74,192,134, 63,243,255,175, 63,153,228,
-129,236,119,239,222, 17,115,131, 43, 48,112,128,249,121,217,151,175,223,127, 49,197,175,152,243,138,131, 19,200,160, 93,124,151,
-132, 45, 63,254,174,117,217, 98,104, 83, 31,216,252,183, 16,172,129,176, 91,179,183,204,192, 61, 9, 12, 44, 20,250,107, 24, 18,
-138,156, 5, 78,236,113,236,178,103,242,102, 56,112,224, 0,145, 73, 66, 94, 94, 30,206,118,114, 98, 16, 16, 0,118,176, 24,204,
-245,121, 57,216,152,153, 97, 61, 51, 19, 83, 83,156,105,148,137, 9, 50,226, 15, 44,250,213,144, 64, 19, 24, 60,123,246,140, 96,
- 17,131, 60,136, 15, 7, 25, 25, 68,181, 16,129, 45,125,180, 27,181,128,133, 56,254,230, 63,242,220, 3,188, 1, 11, 97,163, 77,
- 68,163,129, 95,140,140,255,190,253,100,149,144, 79,111,105, 73,224, 22, 16, 56,112, 28, 58, 52, 20,147,208,208, 51,231,118,223,
-242, 58, 93,167, 48, 65,197,221,155, 54, 97, 54, 80, 2, 50,210,181,117,116, 32, 19,212,127, 97, 0, 62,128,134,204,197, 58,224,
- 3, 44,220, 33,115,188,144, 65,127,120, 89, 15,108,242, 67, 26,215,192,154, 0,200,198,229, 83, 86, 86,214,128,128,128,143, 31,
- 63, 2,107, 38, 78, 78, 78, 81, 81, 81, 1, 1, 1,252,183, 72,194,245,178,179,179, 7,103, 76, 90,112,218,228,193,227, 79,226,
-252,204,150,234,140,122,138,255,185,249,248, 70, 75,103, 90, 55,255,129, 0, 32,128, 88,240,119,144,225,141, 98, 25,123, 41, 34,
-219, 14,240, 11,184,217,146, 87, 51, 16,119, 1,247, 61, 61, 23,150, 59, 55,126,124,249,244,233,231,239,215, 63,216, 95,254,248,
-174,197,194,246,244,255,215,247,255,127,127,254,253,127,239,199,255, 15,126,254, 11,198, 57, 38, 3,108,182, 50,190,126,207,120,
-250, 52, 59, 59, 43, 27, 43, 27,155,172, 36,155,163, 45, 19, 27, 27, 11,176,163,252,240, 17,227,229,171,156, 98, 34,204,127,255,
-254,199, 95,250, 51,144,120, 1, 55,104,140,168, 51,140,213,121, 26,144,249,246, 45,116,218,150,237,223,243, 95, 76,146,217,186,
-183,158, 63, 7, 21, 19,248,203,199,140,117,179,224, 85,227,106,216,125,181, 43, 46, 31,163,233, 30, 46, 85,231, 79, 12,171,254,
- 31,221,115, 21,200,182,210, 6,237,170, 45, 43,168, 63,118, 85,187,103, 85, 84,213, 84,111,252, 14, 6,182,253,133,132, 32,163,
- 90, 7,192, 53,156,203,255,255,171,193, 5,235,255,213,171,241, 93,144, 27, 18, 20,188,123,231, 46, 6,240,194,127, 71, 71,198,
- 55,143,249,191,190,231,248,254,137,109,197, 66,198,252,252,255, 15, 95,125, 54,183,180,208,211,214,193, 63, 7, 0, 25,244, 7,
-166, 43, 6,240, 37,130, 16,241, 87, 96, 64,204, 56, 15, 48,102,129, 21, 9,114,249, 11,108, 50, 18,179, 11, 12, 50,104, 14,159,
- 9,128,244, 6,240, 55,255, 25,144, 86, 61, 32,175,231,193,191, 20, 2, 82, 87,253,249,252,153, 85, 68,136,153,139, 71, 59, 56,
-164,201,205,181, 10,178,148,211,208,232,239,247, 31,172,194,226,186, 22, 14, 10, 50,138,147,174, 31,215,209,209,121,126, 26,229,
- 70,210, 12, 80,210, 5, 85,114, 89,192,178, 27,188, 90,244, 15, 82,137, 15,108,148, 3, 69,224, 11, 76,189, 81,203, 2, 96,201,
- 14,244, 35,100,156, 7, 24, 98,144,161, 30,100, 89, 60,165, 63,196,217,192,226, 30,216,222,191,113,227,198,185,115,231,128,145,
-197,205,205,253,237,219, 55, 34, 7,235,197,197,197,253,253,253, 79, 28, 57, 53, 97,245,110, 62, 70, 54,117,241,159,119,222,112,
-219,168,255,134,215, 16,184, 6,244,129,226,240, 12, 59, 58, 4, 68, 30, 0, 8, 32, 22, 98,198, 73,129, 65,249,228,224, 51,134,
- 40,162, 74,127,120,137,134,102, 14,254, 58, 64, 86, 76,248,220,215,223,175,153,126, 63,250,241,147,243, 23,203,134,159,159,126,
-252,253,247,224, 7,195,233,111,223,129,241,234,225,225,129,107, 80, 30,146, 62,132,248, 24,117,117,254,220,186,205,206,196,200,
-248,251, 15,211,167,207, 76, 98, 34,140, 31, 63, 51,222,188,197,202,206, 10, 76,253, 44,255,254, 49,225, 47,253, 25, 72,191,128,
- 27,188,102, 52, 11,216, 7, 0, 54,246,129,253,223, 78, 87,134,242,221,118, 5, 58,199, 32,141, 68,130,205,127,228,142, 17, 50,
- 27, 82,198,225,111, 52, 49,212, 51,154,204,186,135, 57, 87, 1,221, 9,188, 7,223,229, 80,109,217, 91,170,167,250, 30, 95,245,
-223, 82,232,170,181,139,246,145,221, 87, 79,188,111, 1,214,162,173,217,155,129, 69, 43, 30,123,129,165, 63, 48,168, 3, 3, 3,
-103,207,254, 4,201,146,140,176,245, 40,161,161,136,232,222,124,216, 18, 83,111,118, 94,238,212, 73,147,129,205,255, 95, 47,100,
- 31,127, 96,255, 7,234, 59, 49, 72,126, 21, 47, 77,251,188,251,132,186,150, 37,190, 58, 15, 82,244, 67,110,121,125,241,226, 5,
-164, 79,240,242,229, 75, 6, 82,230,250, 32,147,153,104,163,231, 51, 64,130,233,120,214,131,194, 99, 4, 62, 19, 0,236, 13, 16,
-211,252, 71, 46,164,136, 87, 12,108, 50,191,120,248, 64, 81, 89,245,223,159,159,140,127,254,178,240,242,241, 26,153,240, 24,154,
-254,251,250,231,239,183,159,255,255,252,101,248,251,175,124,122, 79,120, 84, 56,102,227,250,207, 10, 65, 60, 38,163,201,250,111,
- 70, 87, 0, 44,226, 33, 35,254, 12, 72,247, 0, 35,215, 1,248, 61,168,174,174, 62,121,242,228,215,175, 95,187,186,186,158, 57,
-115, 6, 88,250, 3,181, 16,188, 51, 21,162,215,194,220, 60, 35, 57,227,254,147,251,177,201, 25, 39,119, 47,124,254,249,157,137,
-189,171,184,140, 26,122,194,198,150, 17,224, 5, 20,230,254,175,209,141, 96,196, 0,128, 0, 98, 33, 50,243, 16,217,246, 71, 46,
-209, 72,186,128,251,190, 77,164,160, 13,195,221, 89, 61,239, 56, 25,223,254,255,254,243, 31,179, 56, 11, 7, 19,199,191,255, 95,
-191,225,191, 19, 21,216,166,187,115,143, 81, 76,132, 65,128,159, 81, 71,235, 15, 59, 43, 51, 27,235,159, 95,127,216, 95,191, 99,
-120,246,244,173, 32, 47,203,237,251, 44,252,252, 2, 63,126,252,192, 95,250, 51,144,126,138, 3,100,223,128,137, 9,104,223,175,
-144,144,208,243,231,207, 11,116,158,195, 75,127,130, 70, 97,189,162,150, 40, 0,222,238,139,188,219, 14, 77, 10, 63, 16,214,123,
- 58, 99,230,140, 91,123,248,122, 87, 71, 30, 95, 5,234, 64,149,132, 45, 7,245, 12,240,150,254,144,136, 3, 23,244,159,192,121,
-143, 1,173,100, 91,208,187, 23, 72,114,203, 1,243, 33,150, 73, 66, 96, 3, 31,104,130,136,216,174,191,159,207, 48, 50, 51,124,
-251,193,201,248,249, 15, 11, 19,139,184,178,166,155,156, 23,203,127,156,206, 6, 22, 40, 42, 42, 42,148,167, 79,200, 48, 49,176,
- 14,128, 47,143,129,247, 3,136,159, 9,128, 20, 67, 4,155,255,100, 3, 39, 39,167,236, 85,179,154, 62,127, 48,176,183, 97, 18,
- 23, 4, 89,247,251, 63,232, 56, 7, 6, 86, 70,102, 22, 70, 54,230,217, 51,250,248,156, 77,148,149,149,169,190, 7, 10, 50,212,
- 51,125,250,116, 32,169,175,175, 79,146, 94, 96, 13,189,119,239, 94,102,102,102, 91, 91, 91, 96,240,162, 13,253, 3, 59, 4,192,
-130, 30, 45,216,225, 0,216, 99, 88,180, 96, 33, 27, 51,123, 72,100, 8, 80,141,141, 87, 10, 74,189,245,231, 15, 68,239,232,170,
- 30, 90,140,255, 0, 1, 64, 0,177, 80,203, 26,170, 92,192,109,146, 86, 2, 44,148,127,237, 92,199,244,237,231,219,191,255, 21,
-205,108,236,229,228,240,151,164,192,100,167,167, 30, 7,222,235,203,196,242,255, 39,184, 97,192,240, 26, 54, 42,192,202,193,160,
-165,137,179, 33, 6, 41,193,201,187,128, 27,110, 2,100,205, 40,188,189, 15,100, 16, 83, 30, 65,236, 37, 47,168,195,174,135,130,
- 3, 19,139, 59,195, 8,245, 30,224, 64,205,229,211, 76, 23,184, 59,137, 61, 7, 2, 92,202, 51,198, 23, 65,207,231,130, 4, 42,
- 80, 16, 88,238,115,203,133, 18,212,254,242,185,219, 75, 6,183,127, 76,143,249,249, 62, 50, 8, 49,128,142,127,248,197,192, 66,
- 98,210,162, 4, 64,234, 0, 50, 52,194,103, 2, 72,106,254,227,105,189, 98, 5,192,146, 93, 34, 47,111,194,174, 93,247,154, 55,
-132,178, 10, 11,128, 15,116,251,254,237, 79,126, 73, 37, 51,151,208,182,133, 51, 47,138, 48,186,145,114,152,207,223,191,127, 24,
- 24,136, 45, 58, 9, 14,245,224,242,221,173, 91,183,128,164,134,134,198,219,183,111,129,189,109, 96,169, 45, 44, 44,204, 0, 59,
-159,142,141,141, 13,210,105,195,170,247,212,169, 83,255,254, 48, 90, 89,235, 3,123,120, 64,149,191,126,253,146,145,145,129, 72,
-125,252,248, 17,216,209, 1, 26,194,206,206,142,167,221, 9,201,218,200,140,209, 33, 32,226, 1, 64, 0,177,208,200, 92,178, 51,
- 45,232, 62,236,204, 18,146,180,112,112,112, 2, 17,249,214,145,117, 1, 55,102, 53, 64,134,189,228, 89,135,199,181,180, 62, 3,
- 14,220,192,103, 0, 31,198,131, 44, 24, 74,146, 33, 76,255,100, 63,127,144, 29,168, 20, 79,222,209, 96,192, 86, 63,193, 17,124,
-172,128, 36, 93,192, 82,143,139,139, 43, 48, 48, 16,114,164,243, 35,216,145,206, 71,247,238,134, 28,233,236,108,225,140, 75,239,
-236,247,237,169,130,149, 40, 66,120, 79, 15,197, 85, 7,144,225, 71, 83, 83, 83,200,146,127, 96,119, 28, 88,130, 3, 25,175, 95,
-191, 6,146, 60, 60,160, 85,206, 16, 17, 86, 86, 86,172,254,245,241,241,129, 40, 0,234,133,116,211, 33,203,186, 32,171,194, 32,
- 34,192,138, 1,107, 3,110,116,145, 15, 49, 0,255,173,239, 0, 1, 52,122, 41,252, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,
-163, 55,130,141,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,
-130, 81, 48, 10, 70,193, 8, 5, 0, 1,196, 50, 26, 4, 67, 5, 24,226,184,220, 7, 15, 56, 63, 58,193, 51, 10, 70,193, 40,192,
- 13, 0, 2,136,134,151,194,211, 65, 47, 27,219, 46, 78,246, 23,172,108, 31,254,253, 3, 45, 73, 4,157,255,201, 8, 62, 5, 20,
-180,110,152,233, 63, 35, 11,136, 98,248,179,121, 43,235,255,255,255,245,244, 18, 6,131,155, 41,209, 43, 67,202,178,135, 39,168,
-203,224, 70, 47,209, 30,213, 59,170,119,100,234,197, 3, 0, 2,104,104,247, 0, 14, 29,185, 99,102,242, 91, 80,128,225,221,123,
-198,243, 23, 57, 88,152, 88,188,220,255,238,222, 47, 10, 44,246, 25,153,152, 56,120, 25,156,204, 62, 48, 48,176,216, 88,254, 63,
-117,134,128, 79,247, 31, 3, 29,106,207,250,255,183,185,173,211,199,151,143, 46,223,126,248,247,219, 15,250,220,172, 59,210,192,
-245,155,231,126,253,248,198,203, 43, 69,210, 66, 88,172,203,186,137, 92, 8, 72,137, 94, 8, 80, 84, 84,132, 28,229, 15, 57, 81,
-153, 36,255, 34,159,132, 72,222, 90,210, 81, 48, 10,104, 4, 0, 2, 8,189, 88, 92,184,104, 46,126, 13,241,113,201,184,164, 40,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1, 0, 8,
+ 2, 0, 0, 0, 74,242, 89, 48, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0,
+ 4,103, 65, 77, 65, 0, 0,192,153,201, 12,156,227, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,110, 39, 0, 0,115,175, 0, 0,246,
+112, 0, 0,129,232, 0, 0,107,215, 0, 0,226,170, 0, 0, 48,131, 0, 0, 21, 42,251,118,133,113, 0, 0,191, 47, 73, 68, 65,
+ 84,120,218, 98,244,137,169,101, 24, 5,163, 96, 20,140,130, 81, 48,242, 0, 64, 0, 49,141, 6,193, 40, 24, 5,163, 96, 20,140,
+ 76, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,
+163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64, 44,112,150,175,
+173, 12,241,218, 54, 31,126,130,204, 29,213, 59, 8,245,162,105,167,186,189, 7, 14, 28,112,112,112, 24, 13,231, 81,189,163,122,
+ 7,185, 94, 60, 0, 32,128, 88,134, 71, 61,150,158,158, 14,103,207,156, 57,115, 64,108,159, 49, 99, 6, 35, 35,227,176,111, 50,
+192,131, 58, 50, 50,114,205,154, 53, 16,118, 72, 72,200,104, 99,106,248, 69, 52,253,179,210, 40,160, 51, 0, 8, 32, 22, 90,164,
+128,219,183,111,247,244,244, 64,216, 37, 37, 37,170,170,170,116,240,201,255,255,255,129, 36,253,139, 96, 96, 40, 61,120,240, 0,
+200, 80, 80, 80, 24,144,234, 7,107, 45,136,213, 37,192, 54, 59,126, 19,150, 47, 95,142,223,253, 64, 43, 86,173, 90, 5, 97,175,
+ 95,191,222,213,213, 21,194, 6,214, 4,180,171, 3,140,141,141,129,228,217,179,103,201,144, 29,153,224,222,189,123,157,157,157,
+112,110,121,121,185,146,146,210, 32,175, 54, 6,208,205, 35, 25, 0, 4, 16, 11,158, 66, 28, 66,146, 90,124, 67,138,161,198, 85,
+ 45, 60,178,252, 95, 30,127,172, 15,171, 25,216, 98,145,214, 0,232, 53, 96,209,255, 0, 12,118,236,216, 65,255,118, 19, 36,192,
+103,130, 1,144,221,213,213, 5,228,150,149,149, 97, 85, 28, 24, 24, 8, 97,252,249,243,247,215,239,159,191,126,254,130,128, 63,
+127,254,224,210,130,181,244, 71, 3,192,154,128,166,117, 0,158,218, 11, 82, 1,140, 2, 92,237, 0, 32,128, 20,172,116, 72,150,
+ 16,171,201,200, 2, 3,232,230, 17, 14, 0, 2, 8,103, 5, 0,108,194,175,170,173, 10,107,110, 35, 41, 14,128, 17, 9, 41,250,
+129,236, 55,223,222, 50, 8, 51, 84,238,109,248,116,239,125,122, 42,253,138, 69,204,196, 68,107,171,225,117,128,135,135, 7,144,
+ 4,178,233,233,217,253,251,247, 3, 25,142,142,142,104,117, 0, 30, 0, 44,238,127,253,250,253,235, 23, 74,233,127,230,204, 25,
+ 19, 19, 19,130, 54,134,133,133, 65, 24,145,145,145,187,119,239,134, 87, 0,100, 68, 16,145,161, 4,108,221, 3, 75,127, 55, 55,
+ 55,100,193, 93,187,118, 1,251, 43, 16, 54,214,169,136, 17, 94,250, 35,135, 45, 25,229, 50,217, 90,200,232, 7, 80,203,205,163,
+128, 12, 0, 16, 64, 44,184,154,255,106,106,106,170, 60,124, 36,117, 2,224,165, 63,176,232,111,119,110,128, 8, 38,110,204, 98,
+ 16, 99, 8,236, 10, 35, 24,151,152, 5, 55,121,101,247,227,199,143,129,164,172,172, 44,156, 1, 49,153,186,135, 94,160,121, 7,
+ 94, 7,252,254,253,103,198,140, 25,148, 55,130,136,209,142, 86,250,195, 53, 98, 13, 73,148,210,255, 55,176,244,255,249, 19, 92,
+ 9,192, 75,255,255,255,254, 19, 83,250, 3, 85, 66,216,189,189,189,240, 38, 63,124, 50,128,120, 55,163, 57,155,120, 0, 47,250,
+129, 53,144,161,161,225,104, 30, 70, 30, 69,193,154,120,224, 73, 2,168,128,224,184, 10,188, 67, 9, 73,195,112, 46, 49,205, 32,
+204,162,156, 96, 70, 64,115, 51,176, 73,193,200,200,232,226,226, 66,146,155, 33, 32, 57, 57,121,238,220,185,163,201,128, 36, 0,
+ 16, 64, 76,184,154,255, 45,225, 33, 63, 94,191, 46,209,214,128,143,230,227, 7,144, 33, 35,120,233, 95, 82, 82, 2,140, 66, 32,
+ 57,223,127, 26, 80, 92, 64, 93, 4,174, 6, 15, 40,155,122, 11,136,178,123,174,199, 55, 95, 9,170,188, 64,170,103,158, 60,121,
+130,167, 74,160,110,233, 15, 44,235, 49,139,108, 96, 29, 0, 44, 82,205,205,204, 72, 53, 13, 50,186, 2, 4,251, 97, 0,127, 33,
+ 14, 47, 73, 29,193, 0, 51,195,227, 46,253,255,130,138,253,159,160,193, 31,228,210,255,239,223,191, 95,191,127, 37,232, 84, 72,
+ 47, 1,185,163,176, 6, 12,136, 28,252, 1,185, 25,105, 36, 7,200, 38,232, 77,172,165, 63,176,232, 7,246,114, 32,165, 63, 43,
+ 11,235,104, 54, 38, 56,108, 2, 17, 68, 30,100,199, 95,148,147,215, 2,131, 40, 70, 46,253,113, 53,236,176,186, 25, 88,250, 3,
+211,210,234,213,171,247,236,217, 67,170,155,129,165, 63, 11, 11, 11,144, 28, 77, 6, 36, 1,128, 0, 98,194,211,252,255,246,226,
+185,167,161, 17, 49, 5, 55,164,206, 0, 54,255,129, 12, 72,233, 15,233, 52, 0, 73, 72, 29,240,228,211, 51,163, 50, 11,130,117,
+201,215,239,192, 98,232,239,243,183, 63,159,190,254,241,248,229, 15, 34,139, 78, 72, 10,195, 85,250,211, 14, 96,214, 1, 64,240,
+227,215,207, 31, 63,126, 16,111, 8,164, 28,135,140,173,139,138,138,194,155,198,248,115, 14,114, 59, 26,179,227,140, 39,223,130,
+198,253,129,197, 63,184,241, 15, 47,253,127,255,254,253,245,235,215,207,159, 62,211,122,116, 98,213,170,213, 48, 30, 35, 24, 50,
+ 0, 69,136,175, 3,224,165, 63,164,232,103, 98, 98,226,224,224,224,230,225, 26,205,198, 52,234,215, 18,217,167,196, 90,121,160,
+141, 8, 17,163, 23,222,143, 4,214, 1, 36, 57, 27, 82,250,131, 6, 52, 70,235, 0, 18, 1, 64, 0,118,205, 94, 7, 65, 24,136,
+227, 36,208,224,238, 32,239, 64,124,156,250, 8,142, 60, 15,137, 3, 59, 60,150,176, 16,135,106, 75, 33, 90,130, 7, 37, 23, 98,
+180,158,137, 35, 55, 53, 13,133,210,143,223,221,253,219,224, 45,202, 79,199,121, 16,155,242,108,147, 0, 74, 32, 96,195,127,203,
+125,172,196,242,118, 31,125,125,131,106,123,169,205,173, 49, 87,101,132, 52,148, 31,120,185,252,131,193, 62, 22, 32,133, 20, 66,
+252,119,212,210, 52,197,131, 95, 84,252, 97,149, 67,125,215,182,116, 7, 0, 77,178, 44, 43,171,138,249,254, 46,138,144,254, 73,
+146,196,113,236,216, 54,240, 69,120, 12,125,192, 50, 47,113,159, 64,220, 39,254, 63, 70,250,247,150,254,224, 13,180,214, 74, 41,
+ 41, 73, 14, 0, 37, 32,107,244,216, 63, 47,114,111,240, 46,117, 61,206,154,157,179, 97, 24,125, 64, 81, 28, 56,167, 44,176, 37,
+253, 25, 99, 97, 24,110, 38, 35,246,124, 53,138, 2,249, 9,220,116, 45,200,161, 8,185,141,115,110,209,255,211,109, 2,164,255,
+ 76,180, 32,128,200,102,213,130,136,246, 20, 64, 76, 88, 71,114, 76,148, 85,127,188,126, 13, 44,253,129,108, 59,112,179,148,152,
+ 78,192,189, 43,119,144, 13, 65, 99,191,189,252,130,160, 9,164,150,254,240,162, 31, 88, 13,200,202,202,194, 5,127,195, 0,176,
+232, 7,182,109,223,189,123, 71,221, 80,131, 88,186, 99,199, 14,120, 63, 0, 82,250,235,233,233,253, 0,214, 0,223,191,195,107,
+ 38,252, 89,110,234,180,169, 64, 71,202, 72, 75,255,254,251, 23,173,244, 39,152,109, 32,117, 0,114,131, 11,178, 26, 21,107,191,
+ 4,165, 2,248,245, 27, 82,250,159, 62,117,250,219,247,239,192,210,243,227,199,143,192,128,122,255,254, 61,241, 33, 0, 25, 5,
+ 34,126,232, 31,148, 0,222,188,125,251,246,205,155,183,239, 64, 52,152, 9, 20,212,208,212,124, 7,102, 16,211,252, 7,146,192,
+210, 31,218,240,231,230,230,225,225,229,229,225, 5, 50, 70,179, 49,174,210,156,248, 6, 56,100, 5, 1,156,129,139, 77,146,237,
+104, 35, 66, 4,117,185,184,184, 0,235, 0, 96,233,239,234,234, 74,124,159, 3, 88,214, 3, 75,124, 56,119,180,244, 39, 9, 0,
+ 4, 16, 19,102,243,127, 85,109, 21,144,241,237,197,115,184, 32, 49, 51, 1, 37, 37, 37, 83, 83, 39, 50,128,103,125,129,138,225,
+171, 72,129,108,215,197, 1, 64,246,185,174, 19, 64, 53,212,117, 61, 60,109, 61,121,242, 4,210,228,135,148,251,208,238,203,215,
+175,192,210, 13,216, 30,231,226,162,254, 40, 1,208,234,140,140, 12,144,141,127,254, 92,187,118,237,252,185,115,250,122,250, 63,
+126,128, 59, 0,223,191, 47, 89,188, 24, 34,139, 39,185,247,246,246,106,105,106, 1, 93, 11, 12,165, 63,191,127, 61,125,242,148,
+108,239, 51,192,102, 32, 24,192,219, 17,240,245, 0,126,255,252,243, 23, 52,242,115,242,228,137,175,223,191,126,249,252, 9, 88,
+250,191, 7,149,254,239, 72,170, 38, 33,253, 0,146, 90,106,135, 14, 29,250, 12, 2,159,192,228,103, 17, 97, 97, 96,233,127,227,
+250,245,131,135, 14, 17,163, 29,210,252,103, 97, 97, 5,198, 38, 15,176,236, 7, 98, 30, 46, 78, 46,206, 23, 47, 94,140,102, 99,
+ 8, 40, 47, 47,135,151,191,240,201, 85, 8, 3, 34, 8, 81, 64,100,179, 29,255,184, 16,254,210,159,248,182, 63,154,155,129,117,
+ 0,176,244, 39,201,205,200,117,192,104,233, 79, 42, 0, 8, 32, 44, 67, 64,194,247, 31,188, 3, 15,254,192, 69,128,157,128, 30,
+134, 27,248, 13,130, 12,245,220, 56,123, 77, 64, 93, 4, 88,226,247,196, 66, 43, 12, 72,233, 15,105,254, 19, 92, 77,180,174,221,
+128,188,246,248,245,235,215, 33, 41, 0,121, 52,128, 21, 12, 94,191,126,237,229,229, 69,139,176,131,148,185,192,134,191,153,153,
+217,143,159, 63,191,255,248, 14,110,253,127, 7, 49,126,252,152, 50,101, 10,174,156, 3, 89,169,249,247,239,223,179,103,207,177,
+178, 48, 67, 66,230,254,131, 7, 79,159, 62, 93,190,124, 69,100,100, 4, 80, 4,222, 15,192,154,193,224,131, 78,104, 45, 56,130,
+ 43, 80, 33,109,255,227,199,143,127,253,242, 13, 82, 65,126,250,252,233,211,167,143,159, 62,125, 33,126, 32, 5,210,252,135,239,
+ 4, 38,166, 26, 0, 42,134,179, 21, 21, 20,128, 69, 63, 40,181, 92,191,126, 31,220,107, 65,150,197, 3, 44,173, 44,217,217,216,
+ 57, 57, 57,129, 61, 0,118,118,118, 96,228, 82,125,122,127, 72, 3,228,213, 50,240,197, 51,240,154, 0, 77, 1,254, 66, 28,235,
+ 80, 62, 73, 61, 15, 34,171, 13,106,185, 25, 82, 7,140,150,254,164, 2,128, 0, 98,193, 28,255,113, 94,178, 12,171, 82,130,235,
+ 65, 33,205, 7,163, 50, 11, 97, 93, 9, 72,185, 15, 31,252, 1, 54,255, 9,166, 6,242, 22,252, 66, 44,213,212,212,188,124,249,
+ 50,188, 8,195, 28,244, 7, 42, 35,254,124, 12, 82,109, 71, 22, 89,178,120, 9,176,244,135,236,176,194,186, 30, 31,121,157,254,
+191,127,127,245,244,141, 46, 94,188,116,253,218, 53, 22, 86, 86, 96,201,248,228,233, 19, 96, 83,151,153,153, 57, 44, 44, 12, 88,
+ 7, 48, 48,240, 99,154, 0,212, 14,201, 93, 16,219,209,246, 1,224,119, 48,176,244, 63,122,244,232, 23, 32, 0,205,250,126, 2,
+151,254, 64,226,243,151,207, 95,190,126,251, 70,208,179,192,162,255, 12, 24, 48, 96, 44, 3,197, 95, 13, 56, 56, 56, 32, 7, 20,
+164,220, 63,127,254, 60, 3, 17,219,143,141,193, 0,200,224,225,226,225, 0, 21,254, 28,108,108,108, 76, 76, 76,163,165, 63,250,
+ 24, 44, 82,185,185,122,245,106, 96,107,154, 1,117, 66,149,152, 37,149,200,109, 11, 82, 87, 51,147, 49,238, 79, 21, 55,195,235,
+128,209, 52, 64, 42, 0, 8, 32, 22,180, 86, 60,133,219, 46,224, 41, 0, 82, 13, 64,138,126, 6, 26,111,197,130, 88,170,171,171,
+123,250,244,105, 96,123, 31, 81,241,188, 5,205, 72,199,198,198,210, 52, 4,145,189,246,255,255,255,152,216,152, 41, 83,166,130,
+199,217,255,240,243,243, 19,172,231,110,221,186, 5,108,209, 66,244, 2,217,104,202,238,225,168,180,144,235, 0,200,108, 48,100,
+ 73, 40,254,112,134, 44,159,183,182,182,166,196,179,240, 53,160,164,158, 5, 4,212,123,224,192,129,229, 96,128,220, 51, 32, 50,
+109, 0,171,144,223,127,126,255,254,252,123,116,202, 23, 23, 32,184, 98, 18,168,128,200,208,134,239, 3, 32, 47, 51, 18,175,145,
+138,110, 30, 5,100, 0,128, 0,162,254, 97,112,192,216, 2, 13,253,119,209,245, 44, 32, 72,178, 51, 53, 53,221,182,109, 27,164,
+220,167,188,111, 65,222, 96, 20,124, 47, 46,214,210,159, 42, 0,243,204, 6,200,178, 81,130, 77, 54,170,132, 3,220, 16, 96,105,
+ 78,234,217, 15, 14, 96, 64,170,141,163,231,252,144,209, 22,161,127,226, 39,207,198, 65,226,230, 17, 11, 0, 2,136, 38,167,129,
+ 82,222,147, 32,187, 14,160,209,112, 63,237, 50, 0,229,134,143,230,150, 81, 48,228,146,241, 40, 24, 36, 0, 32,128, 24,169,123,
+ 64,194, 40, 24, 5,163, 96, 20,140,130,161, 2, 0, 2,104,244, 70,176, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128,
+ 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48, 10, 70,
+193, 40, 24,161, 0, 32,128, 70, 47,133, 31,213, 59,170,151,230,122,113, 45,207,165,181,222,209, 56, 26,213,139, 31, 0, 4,208,
+104, 15, 96, 20,140, 2,218, 2,200,233,246, 16,146, 84, 64,204,145,250,163, 0, 43,184,121,243,230,104, 32, 16, 4, 0, 1, 52,
+ 90, 1, 12, 36,184,118,237, 90, 58, 18, 0,114, 7,191,222, 81, 64, 18,184,119,239, 30,228, 96, 3, 32,137,124,236, 1,241,165,
+ 63,228, 88, 89,178,207,228,193, 37, 66, 69,189,240, 59, 57,200, 3,180,168,222,128,165,127,127,127,255,104,242, 35, 8, 0, 2,
+136,101,248,121,233,240,225,195,182,182,182,131,223,157,144,116,223,219,219, 11, 23, 41, 46, 46,102, 32,250, 50, 72, 32,249,111,
+165, 32,162, 38, 15,159, 72, 7,189,163,128, 84,128,124,212, 1, 73,167, 26, 32,151,254, 64,146,145,145,145,248, 35, 22, 40,217,
+ 45, 72,134, 94,200, 57,254,120,156, 7,236,253, 64, 14,249,193,227, 89, 76,189, 4,117,225, 47,253,255,253,251, 55,107,214,172,
+165, 75,151, 70, 71, 71,143,166, 67, 92, 0, 32,128,134, 97, 15, 96, 9,142,195,236, 6, 91,233,159,159,159,143, 92,250, 67, 42,
+ 3,160, 32, 49, 13,174, 5,185,220,200, 37, 56,164, 64, 7, 10,210, 84,239,199,143, 31, 51, 51, 51,225,183,208,188,120,241, 2,
+168,165,181,181,181,185,185,185,170,170, 10,114, 94, 63, 46,192,246,241,171,110,230,124,158,253,247, 33,220, 63, 47,254, 92, 77,
+255,113,169,149,237, 72,179,224,230, 42,249,115,187,164,135,107, 6, 35,227, 60,125,180,210, 31, 2, 72,234, 7,208,185, 7, 0,
+ 57,199, 31,162,114, 15, 24,160,149,227,248,111,248,130,235,197,212, 69, 70,231, 0, 94,250, 3,155, 83,192,210,255,200,145, 35,
+163,165, 60, 30, 0, 16, 64,195,173, 2, 0, 54,255,129,109,165, 65, 30,235,144, 33, 23, 57, 57, 57,120,195, 31,210,246,135, 11,
+226, 25,147,129, 72,197,217,176,193, 26,239,239,129, 8,194,134, 8,210, 72, 47, 16,156, 60,121,146,131,131,227,248,241,227,136,
+212,195,196, 84, 93, 93, 93, 91, 91, 27, 31, 31,191,117,235, 86, 60,122, 37, 78, 94,251,207,193,202,117,252, 17, 92,132,145,233,
+191, 94,245, 47,155,218,247,230,241,175, 78,111,149, 30,205,138,152,165, 63, 35, 12, 16, 89, 7, 32, 79, 24,164,163, 2, 6, 66,
+211, 9,148,232,133,215, 1,239,222,185,204,156,249,158,164,210, 31,107,253, 1,215, 69,106,175, 20, 88,250,247,245,245, 1, 67,
+ 12,152, 50,207,156, 57, 3, 44, 13, 70,147, 19,126, 0, 16, 64, 76,248, 11, 83, 50, 66,144,194,241,101,160,141, 16,141,228, 69,
+ 30,176,249, 63, 99,198, 52,178, 59, 1,244, 73, 49, 19, 39, 78,132,183,253,129, 69,127, 47, 24,192,235, 0, 32, 27,168, 0,143,
+ 94,120,251, 29, 88,124,223,222, 22, 11, 68,240,114, 28, 40, 69,188, 94, 72,155,148, 72,189,192,210,231,216,177, 99,192,222,244,
+163, 71,143,158, 63,127,142, 38,245,240,225, 67, 73, 73, 73, 6,220,154, 37,143, 93,121, 18,109,205,246,232, 35,227,115,248,161,
+211,144,171,220, 24,222, 61,100, 23,146,252, 62,204,242,213,189,123,247,240, 20,181,120, 38, 3,208,218,254,104,247,202,225,175,
+ 3,144,111,224,154,137, 10, 24, 8,221,207,133, 44,251,127,149, 32, 50, 98, 32,241,110, 47, 72,185, 79, 82, 57,142, 92,127, 0,
+ 17,121,165, 63,176,123, 58, 97,194, 4, 96,219,191,160,160, 0, 88, 7, 64,218,130,211,167, 79, 31, 45,229,241, 0,128, 0, 98,
+193, 83, 20, 46, 93,186, 28,146,224,136, 31, 82,135, 36,205,152,152, 24,136, 22,160, 33,144, 50,133,200,184, 4,170, 95,178,100,
+ 9, 80, 59,184, 40, 95, 66,146,213,240,230, 63, 36,159,144, 49, 19, 0,177,157, 84, 75, 41, 1,144,210, 31, 94,238, 35,115, 9,
+ 87,221,224,210, 31,194, 6,213, 1, 94,139,209, 6,118,240,235,133,199, 8,184, 14, 72, 39,168, 23, 88,196,255,250,245,203,216,
+216, 24,216,187, 2,118, 2,130,130,130, 64,117,198,191,127,237,237,237, 95,190,124, 97,101,101, 5,102, 63, 92,122,133, 30, 62,
+101,250,245,231,131,177, 2,235,145,103, 44,199, 95,254, 14, 82, 4,197,209,191,255,151,218,217,222,125,225,253,206,202,227,154,
+121,123, 56,101, 42,130,205,222,206,206, 78, 96,121,135, 57,192,141, 89,178,195,155,255,152, 42, 7,225, 41, 94,233,233,130, 72,
+ 53, 10,168, 97, 1, 12, 6,178,239,249, 32,181,237, 15,204,245,240,187, 33,109,108,108,128,217,121,180,244, 39, 8, 0, 2,136,
+ 5,119, 81,184,108,230, 76, 80,240,101,100,100, 17, 89, 38, 66,198,181,181,180,180,224, 34,182, 96, 0,233, 19, 16,140, 81,120,
+233, 15,183,139,212,226, 24,232,230,152,152, 40,112, 13, 20, 5,100,147, 90,121, 0,173,131,223,103, 48, 36,166,145,233, 9,142,
+ 30, 61,106,110,110, 14, 44,143,128,228,134, 13, 27, 2, 2, 2, 32, 67, 64,149,149,149, 12,224,171, 23,150, 47, 95, 14,148, 50,
+ 53, 53,197,212, 43,127,244,204, 11,115, 77, 96, 97,246,213, 92,150,121,195,243,223, 1,138,224, 33, 32, 6,189,202, 95, 64,173,
+ 95,223,126,220,183, 92, 69,222,252,139,158,233,147, 97, 16, 80,248, 47, 85,135,131,213, 96,128, 89,136, 35,223,169,130,235, 90,
+105,172, 23, 55, 14, 56, 0,214,103,152, 75, 93, 33, 99, 59,164, 2, 50,116, 65,206, 12,103, 97, 97, 41, 44, 44, 60,115,230,204,
+232,208, 63,145, 0, 32,128,176, 87, 0,192,182, 63,164, 36, 5,130,232,232, 72, 32,151, 96,129, 8, 25,234, 65, 46,253,225, 0,
+ 34, 8, 84,128, 85, 22,169,248, 70, 41,253, 33, 12,160, 32,145,101, 49, 48,202,129,197, 19, 68, 49,144, 4, 86, 0,196,119, 2,
+224,165, 63,114,238, 34,178,206,163,164,253,130,220,234, 39,169,249, 15, 25,177, 1,182,250, 33,157, 0, 85, 82,154,255, 80,189,
+225,233,240,187,159, 8,234,253,253,251, 55, 48, 83,241,242,242, 94,186,116,233,239,223,191,159, 62,125,186,126,253,186,176,176,
+ 48, 92, 1,144,237,237,237, 61,109,218, 52,204, 10,128,249,247,111,217, 51,151,217,120,165, 89, 47,189,253,248,151,247,243, 39,
+182,191,215,191, 48, 8,115,192, 21,112, 11,255, 49,245,126,178,112,154,237,240,168, 0,128,161,138, 57,244,129,121,201, 34,164,
+ 7,128,182, 97,135,164,181, 58,180,184,225,142, 26,222,127, 15,233, 10, 32,247, 6,136,239, 64, 0,195,141,140,210,127,233,210,
+165,135, 14, 29,250,191, 74,144, 49,236,125,127,127, 63,176,226, 4, 54, 77,102,204,152, 49, 90,190, 19, 4, 0, 1,196,130,181,
+ 52, 4,134, 32,114, 65, 12,172, 0,128,197, 43,176, 87,133,199,160,137, 19, 39, 66,134,110,176, 2,160, 20, 80, 1,158,244, 13,
+ 25,124, 71, 43,115,193,229,248, 18, 98,202,113,228, 46, 11, 4,196,198, 70, 47, 94,188,148,152,114, 28,185,244, 71,107, 97, 17,
+212,139,199,203,120, 0,176,159, 4, 47,238,225,163,255,200,179, 2, 64, 5,120,244, 50,133, 67,135,242, 33,117, 0, 3,210,154,
+ 78,166,240,247, 36,232, 13, 79, 39, 82,239,133, 11, 23,228,228,228,128,109, 43, 8,119,209,162, 69,199,143, 31,247,241,241, 65,
+ 86,243,242,229, 75, 14, 14, 14, 76,189, 10, 23, 46,124,144,147, 60, 89,152, 4,225,178, 45,186,253,247,248, 71, 38, 31, 20,149,
+ 31, 95,114,178,115,252, 30, 54,153, 10, 88,178, 43, 41, 41,225,185,235,170,188,188,156,200,107, 14,145,135,128,112,117, 8, 6,
+109, 32,144,161, 30, 82,113,146,164,119,217,178,165, 7, 14, 28, 96, 92, 3,106,142,236,170,225,117,107,249,108,103,103, 55,186,
+244,147, 72, 0, 16, 64, 44,152,165, 33,114,243, 31,222, 9, 0, 22,166,200,181, 2, 86,128, 71, 22, 82,148, 19,108,254, 99, 45,
+ 97, 9,118, 2, 32,110, 70, 46,253, 33,131,128, 64, 7, 3,197,129, 89, 8, 79,213,133, 89,250,147, 84, 7,144, 55, 82, 4,233,
+ 9, 61,122,244, 8,178,230, 7,185,225, 15, 20,196,213,145, 66,214,187,232,200, 47,200,186, 29,228,198, 59, 80,144, 70,122,129,
+197, 61,178, 79,237,237,237,187,187,187,157,157,157,255,253,251,215,214,214, 6, 36,191,127,255, 14, 12,103,172, 49,168,126,252,
+248, 37, 91, 7, 56,247,143,189,228,223,238,199, 12,206, 98,255,255, 49, 92,106, 99,253,242,143,231,221,119,190,119,140, 66,126,
+ 49, 23,135, 83,190, 2,150,239,248,167, 91, 73, 41, 26, 87,129,200, 61, 97,196,244, 71,225,233, 22,235,106, 78, 60,247, 53, 34,
+235, 5,182,163, 73,210,139,217,138,135,220,225, 76,159, 1, 55,208, 52, 53,164,244,191,244,103,254,254, 95,224,242,106,180,244,
+ 39, 22, 0, 4, 16, 74, 5,144,145,145, 5,186,213, 54, 38, 10,179, 37, 14, 25, 23, 2,162, 25, 51,166,209,200, 41, 88, 11, 83,
+130, 53, 7,220,205,184, 12, 4, 86, 93, 64,132, 86, 61, 32, 87, 60,120, 50, 42, 48,121,209,104, 50, 0,158,217,200,216, 8, 6,
+ 84,144,144,158,158, 48,249, 43,234,102,174,247,180,211, 11,190,158, 30, 1,228,229,229,167, 76,153, 66,100, 89,182, 13, 85,239,
+ 63,121, 30,206, 41,154, 64,134,246, 76, 86, 6, 6, 96,171,255, 61, 24, 61, 28,174, 25, 12, 94, 16, 67, 24,116,184, 45, 14,107,
+ 73, 13, 23, 33,184, 10,136, 12,189,152,173,120, 34,251, 55,148,135, 45, 48, 25, 3,203,125, 32,123,193,254, 95, 43,142,253, 2,
+ 22, 5,163,251, 25, 73, 2, 0, 1,132, 82, 1,224, 41,220, 33,211,185, 4, 19, 31,217, 10,200,190,201, 22,127,133, 68,161,179,
+105,157, 93,175, 93,187, 6, 95,253, 9, 25,162,193, 63, 77,130,166, 23,178,131,151,158,122, 71, 1,169,160,188,188, 28, 62, 22,
+ 4,100,211,199, 82, 58,239, 4, 30, 88,224,222,242,121,168, 56,117, 16, 2,128, 0, 98, 25, 13,130, 1, 4,192, 98,151,236, 36,
+ 59, 80,122, 71, 1,169, 99, 65,144,147, 18,128, 36,241,237, 98,148,213,159,176,193, 31, 92, 75, 66,113,141,231,224, 23,161,133,
+ 94, 90, 84, 93,248, 1,176,243, 10, 12, 22, 63,255, 52,104,119,115,251, 57, 8,195,203,211,104, 52,237, 17, 3, 0, 2,104,180,
+ 2, 24, 5,163,128,182,192,197,197, 5, 88, 1, 16, 63,177, 73,121,105, 59,176, 61, 0,250,214, 22,255, 33, 59, 10, 71, 1,121,
+ 0, 32,128, 70, 47,133, 31,137,128,243,231,141,239,236, 26,163,225, 48, 10, 70,193, 8, 7, 0, 1, 52,122, 28,244, 72, 4,163,
+165,255, 40, 24, 5,163, 0, 8, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,
+140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,136, 38,151,194,223,191,122,156,129,233,135,164,
+140,244,231,239, 95,223,191,253,170,166,105, 67,188,222, 35,231,238, 50,252, 99,127,249,244, 41, 55, 39,183,160, 16,183,185,137,
+ 34,241,122, 41,113,243,191, 55, 83,120,121,190,115,114, 51,179, 48, 51, 49,114, 48, 62,255,148, 79,188,222, 79,188, 65,130,194,
+130,252, 60,204, 12, 44, 12,239, 46,204,194,111, 47,167,244, 13,226,221,252,253, 41,202, 96,189, 20,215, 75,226,245, 62,251, 38,
+142,162,247, 39, 9,246, 62, 67,157, 36,144,254, 69,194,245,170, 79,217,212, 7,131, 94,109,108,225,220,217,185,186,188, 28,203,
+ 81, 51, 87, 81,195,153, 83,230, 23, 9,113,244,132, 13, 37,109, 72,147, 16, 71,155,159,162,196,209,143,159,220,196,235,229, 96,
+255,138, 98,148,223, 20,226,245,250,110,202, 65,230, 22,191, 32,225,216,156, 94,137, 12, 26,229,193, 81,189, 52,210,139, 7, 0,
+ 4, 16,190,101,160,169, 7,138, 24, 29,227,103,253,215, 39,198,160,123, 87,118, 49, 50,252,227, 97,231,156, 63,115,217,194,133,
+ 19,173, 93,172,255,124,253,166,165, 97,247,239, 31, 67,118,217, 95, 45, 45,245, 59,119, 30,254,248,254,135, 87,210, 26, 83,239,
+209,243,175,254, 51, 48,126,249,249, 61,189,168,165,113,146,251,179,171,103,129,201,123,219,197, 39, 76, 76, 12, 19, 27,106,110,
+221,186,169,160, 32,207,206,201, 34, 44,200,142,197,222,117,211,216,216,216, 56, 57, 57,121,120,120, 68, 4, 56, 68, 89,121, 69,
+ 37,185,249,217,121, 5,216,152, 88, 88, 88,254,255,251,251,137,153,225,211,171, 79,135,121,117,113,185,252,227,221,169,188,156,
+ 31,249, 4,216,120,184, 89,217, 56,153, 88,152, 25,152,216, 88,212,165,103,255,254,207,124,239, 89, 18,126, 95,239,127,164, 44,
+ 34, 34, 34,206,243,227,251,143,159, 76,236,156, 12,191, 25,254,200,197,124,120,255, 78,228,243, 54,218, 85,218,179,102,205, 74,
+ 75, 75, 27,109,188, 16, 4,184,138,123, 82,213, 0,129, 4, 39,215,211,167, 79, 89, 57,216,255,113,113,209,211, 11,223,222, 93,
+ 56,182,119, 5,178,136, 75,104,199,224, 12,237,197,139, 22,177,179,177,253,251,247,143,155,135,199,215,207,111, 52,249, 13, 9,
+ 0, 16, 64, 4,246, 1,252,223,187, 48,205,153,112, 29, 16,234,167,242,211, 73,232,247,151, 15, 44,127,153,204,244,100,226,227,
+161,205,103, 96, 9,126,226,248, 2, 17, 57,233,127, 95, 62,217,155,235, 62,123,246,126,207,249, 63,104,122,211,211,219, 24,216,
+248, 25,185,248,254, 51,255,191,120, 45,113,222,138,157,208, 38,249, 63, 6, 15, 75, 75,134, 47, 47, 24, 24,120,239, 94,190,206,
+ 42, 34, 96,109,161,195, 35, 32,134,197,122, 70, 38, 32, 98,252,207,204,250, 11,104,204, 31,102,102,102, 86,102,102, 54, 86, 16,
+249,251, 47, 3,227,159,127, 32,119,224, 0, 47, 46,182, 8,241, 51,240,113,113,137,138, 8,243,241,113,253,103,250,251,231,223,
+151,191, 12,127,121,120,184, 68, 36,100,148, 84,143,236, 57,136,253, 28,161, 25,187,127,241,243,114,243, 11,124,254,241,141,237,
+235, 87, 14, 54,118, 14,214, 31,127, 65,237,193,111, 63,190,126,251,254,232,189,206,171, 55,239, 62,189,126, 18,102,133,221,234,
+213,157,132,174, 73, 74,112, 17, 20, 23,196, 90,250, 83,177, 14,168,234,238, 6,146,109,165,165,100,232,173,236,234, 2,146,237,
+101,101,196,107,185,242,244,233,173, 91,183,128,140, 32, 71, 71, 34,181,204, 92, 5, 58, 9, 7,249, 86, 44, 32, 27, 66, 50,192,
+206, 71, 3,178,211,176, 29, 33, 9, 44,217,241,151,239,196,148,254,138,130, 66,223,127,253, 4, 50,216, 56, 57,126,125,255,241,
+239,235,183, 55, 47,158, 75,234,234,226,209, 34,169,172, 70,208, 95,252,242,154, 55,246,109, 36,168, 12, 88,250,219,184, 68,112,
+ 8, 26, 16, 21, 88,161,239, 8, 42, 9, 11, 11, 91, 21,186, 7,171,148,227,158,215,112,182,150, 0,168,100,120,245,227,223,247,
+ 63,160, 16,254, 10, 38,103,154, 11,168,241,178, 98,213,219,211,211, 83, 85, 80,226, 31, 20,248,227,199,247,137,253,125, 83,166,
+ 76,201,201,201,161, 48,113,222,185,115,167, 27,156, 62, 9,110, 44, 56,126,252,248,131, 7, 15,222,190,125,251,249,243,103, 94,
+ 94, 94, 97, 97, 97, 5, 5, 5, 75, 96,233, 49, 10,192, 96,203,146,102, 56, 27,109,221, 63, 64, 0,225,171, 0,102, 59,244, 5,
+159,104,253,119,108,107,154, 21, 3,254, 58,224,231,151,119, 18, 42,206, 45,165, 65, 11,102, 30,128,136, 28, 60, 54,227,235,183,
+159, 94, 46,249, 86,214, 9, 17, 97, 78,156,156,236,191,254,254,249,252,237,151,154, 5,230,161, 61, 15, 25,126, 49, 4, 69, 79,
+ 79, 45,130,118, 45, 61,172, 28, 56, 56,216, 55,236,219,185,237,232,241, 69,243,167,253,248,254,147,141,153,133,135,139,141,143,
+237,239,157, 71, 47,208,171, 40, 96, 17,240,255, 31, 8, 49,253, 3,178,127,254, 98,103, 0, 86, 49,236, 12,255,127,253,253,203,
+204, 0, 44,202,255,254,250,247,231,239, 63,172,206,190,123,170, 93, 70,244, 63, 31, 47,183,180,140,162,134,174, 10, 47, 15,231,
+199, 47,175, 95,188,126,241,254,227,203,223, 63, 24,185,128,181,130,168,117,112,224,229,181,235,213,209, 52, 78, 95,250,248, 47,
+ 47,239,119, 22, 6, 54, 14,182,239,223,216,126,125, 99,251,193,193,206,194, 8,204, 37,204, 63,190,127,249,254,237,243,247,239,
+ 95,191,127,250,248,249,197,195, 9, 19, 30, 43, 27, 99,223,255,217,189,168, 27, 87,120,150,198, 97, 47,145,223,191,127,143,204,
+ 22, 18, 18,130,148,134,130,130,130,119,239,222, 93,189,122, 53, 73,181, 2,155, 56,116,252, 1,104,168, 32,185,105,107,214,234,
+213,217,217,217,191, 95,189, 34,166,244, 23, 19, 19, 11,114,115,251,205,206,222,219,219, 27,236,228, 68,204,241,150, 64, 15,246,
+ 52, 52, 64, 71, 42,234,235,123, 27, 27,177,178,113,105, 71,174, 3,128, 12, 99, 99,227, 61,123,238,185,184, 40, 17, 89,250,107,
+ 72, 72, 10,240,241, 65,146, 25, 55, 7,231,243,215,175, 62,189,255,192, 35, 32,248,240,244, 25,121, 83, 19, 60, 26,253,210, 74,
+ 98,130,125, 85, 21, 20, 32,220,250,222,201,112,169,198,226, 92, 32,249,104,251, 94, 51, 53, 89,162,134,122,136, 44,253,161, 45,
+ 11, 33, 66, 42, 8,239, 71,227,102, 97,188,216,152,204,200, 39,242,247,222,197,159,247,174,222,122,247,213,100, 59,190,248,157,
+ 49,115,102, 81,122,118, 92, 74,210,234,165, 43,128, 37,111, 75,103, 23,111, 67, 11,252,210, 8, 74,138,126, 80, 94,192,219, 58,
+ 1,150,248,187,118,237,250,253,251,183,178,178,178,173,173, 45, 63, 63,255,135, 15, 31,158, 61,123,118,255,254,125, 32,233,230,
+230, 6,172, 15, 70, 75,127, 52, 46,114, 29, 0, 16, 64,232, 21, 64,218,109,216,209, 58,224, 29,118,255,255,125, 97,248,245,243,
+247,129,101,105, 14, 12,132,250, 1,108, 90,154,234, 76, 76, 7,110,125,120,203,192,112,253,227,211,219,192,254,242,198,173,147,
+190,189,249, 27,157, 88, 8,108,206,251,249, 90,254,101,225,193,165,249,214,173,235, 64, 53, 94,250,192,102,157, 20, 3,131,252,
+143,159,191, 66, 60,220, 56, 4,152, 22, 45,219, 1,108,190,175, 89,177,128,249,207,103, 77,121,246, 59,143,208, 53,254,251, 15,
+186,151, 10, 8,254,254,253,251,147,245,255,111,198,223,191,126,253,250,198,245,131,225, 31, 7,211,255,191,127,217,254,127,249,
+245,227,215,247,111, 12,124, 88, 44, 21,229,249,201,194,194, 9,108, 47,168,168,168,136, 75,152, 51, 48, 51,253,253,123,150,233,
+255,135, 31, 95,129, 85,198,215, 23,207,222,137, 10,191, 17, 22,176,150,148, 93,204,192,128,210,226,227,252,241,231,255,207, 55,
+ 12, 63,216,127, 49,253,254,202,198,242,133,147,149,133,149,141,225, 31, 55, 35, 51,227,151,175,223,222,191,120,120,247,236,209,
+119,143, 30, 1, 93,197,244,159,153,200,120,154, 55,125, 30,132,145,148,137,115,220, 9,249,158, 41, 32,187,168,168,232,209,163,
+ 71,192, 34,146,188,189,151, 83,167, 78,125,249,242,229,154, 53,107,188,237,236, 4,197,196, 72,213, 14,108,251,191, 7,151,140,
+144,131,225,210,195, 8, 28, 87, 9,108,251, 3, 75,127, 80, 66, 97, 99, 83, 83, 83, 91,187,111, 31, 49, 93, 1,202,207, 64, 6,
+150,242,192, 66, 31,114, 97, 8,156, 12, 13, 13, 37, 88,250,171,137,137, 3, 75,127,102, 38,166,172,152,232,239, 63,126,246,206,
+157,203,197,201,249, 3, 8,190,127,103, 98, 97,126,124,254,188,172,161, 33, 46,189,144, 82,254,246,131, 7,200, 92, 50,128,185,
+ 83,196,158,213, 21,174,126,201,255,217, 85,137,212, 2, 63,203, 19,114,155, 35, 86, 17, 92, 0,216,240,127,248,229,239, 65, 87,
+ 81,214,252,153,159,162, 21, 89, 4,197, 8,150,254,123,247,238, 85,144,148, 74,201,202,168, 40, 44,155, 50,127,134,153,145,209,
+140,201, 51, 10,202, 74,150, 90,154, 95,190,124, 89, 23,111, 87, 9,127,209, 15, 52, 25,200,197,175, 30, 88,250,139,138,138, 26,
+ 26, 26, 50,129,123,249,192, 28,199,202,202, 10,108, 24, 73, 72, 72, 0,235, 0,160,108,112,112,240,104,233,159, 86, 14, 29, 54,
+156,213, 89,129, 86, 7, 0, 4, 16, 74, 5,144,122,172,242, 27, 51,199,191,191,255,254, 49, 50,243,254,255,206, 0,108, 6, 51,
+ 48, 51, 72,171,177,254,250,250,127,207,188, 52,151, 36,188,117,192, 63,102,102, 72, 97, 7, 44,107,101,248,165,213, 31,222, 92,
+ 51,125,230,124,166,159, 92,110,142,214, 59,246, 30,253,246,141,129, 75,136, 31, 83, 27, 39,151,250,247,111, 55,129,197, 55,124,
+ 84,134,129,225, 25, 19,179, 67, 92,124,242, 63,246,175, 91,182,206,243,243, 77,226,226,102,248,246, 22,152,136, 37, 48,181,255,
+102, 96,102, 5,151,254,191,255,252,253,249,233,247,183,223,223, 62,112,178,252,254,198,250,147,229, 55,243,111, 70, 96, 65,254,
+233,251,159,175,159,127, 51,136,163,107,188,184,191, 83, 73,130,145,153,153,145,145,137,253,239,223,255,127,190, 61,250,249,247,
+247,211, 23, 31,223,189,255,242,241,243, 95,166, 31, 63,254, 48,188, 96,102,189, 32, 37,247,137,151,131, 19,211, 94,160, 87,255,
+127,254,241,253,243,179,191, 47, 63, 50, 43,203, 0,211,223,223, 63, 63, 63,188,120,112,243,212,241,215, 15, 31,129,139, 45, 22,
+ 38, 96,232, 50, 83,243, 12,119, 72, 3,127,214,172, 89, 33, 33, 33, 6, 6, 6,236,236,236,125,125,125,228, 25, 5,105,254, 91,
+232,232,136,139,139, 3, 75,112, 31,123,123, 41,210,235, 0, 65,112,185,207, 42, 38, 6, 52, 1, 72, 18,236, 7, 0,219,254,172,
+ 63,127,174, 93,187, 22,185, 43, 64,252,112, 16,217, 0, 82,238, 35, 95,201, 2,172, 62, 9, 86, 0, 95,191,125, 19, 21, 18, 74,
+ 12, 9,249,240,241,211,235,119,111, 89, 89, 89, 32, 0, 88,196,176,115,114,125,122,251,230,243,227, 39,188,178, 56,167,230,128,
+165,255,146,181,155,145, 43, 0, 72, 63,192,220, 72,207,203,209,158, 8, 87,127,102, 96,224,229, 21, 54,112,241,227,222,189,105,
+ 46,125, 70,255, 47, 45,156,240,115,199,124,177,217,231,128, 53, 1, 51,159,208,159,247,175,128,165, 63,176, 67,240,245,207,127,
+102, 28,195,168,247,239,220,217,182,105,235,194,217, 11, 39,205,157, 54,163,111,130,144,176, 80, 75, 91,203,162,101, 75,109, 45,
+172,231,205,157, 23, 20, 26,100,107,109, 75, 70,233,191,105,211, 38, 96,191, 86, 82, 82, 18,237, 2,106,180,145, 31, 96,219,223,
+200,200,232,207,159, 63,192,174, 0, 7, 7, 7,176, 2,184,113,227, 6,176,169,193,195,195, 3,236,237,189,120,241, 2,168,102,
+116, 44, 8, 81,128,148,119, 64,234, 0, 56, 0, 8, 32,148, 10, 96,182, 85, 59, 84, 29,211,229,255,251,230, 51, 10, 75, 50,164,
+ 76, 62,205,169,105,250,120,227,191, 89,181,204, 71,150,167,217, 50,205,250,135,165, 74,223,180,239, 93,154,202, 39,255,248,252,
+226, 92, 96, 7,226, 29, 48,225, 50, 48,252,148, 87, 55,226, 96,103,249,254,245, 39,195, 47, 80,197, 0,236,139,189,122,247, 30,
+ 83,239,132,254, 34,208,221,241, 39,230, 50, 49, 65,150, 49,128,134,107,254,125,191,250,227,231,111, 78, 30, 14, 6, 54, 80,197,
+240,249,211, 39, 49,164,251,167, 80, 60,240,239,215,191,127, 44,192, 20,240,243,231,207, 47, 44,204, 44,191,152, 24,158,127,250,
+195,245,231, 47,219,191,255,172,204,223,152, 89,254,124,253,246,229, 23,150, 69, 29,188, 60, 95,255,252, 97,252,249,235, 47, 48,
+123,223,186,243,232,201,243, 55,223,127,253,254,244,229,221,151,207, 31,126,252,253,197, 8, 76,244,223, 62,126,250,118,255,225,
+211,143,111, 63,127,101, 96, 80, 65,211, 14,116, 22, 36, 71,252,249,248,245,201,133,235, 47,175,223,255,244,249,206,231, 15, 31,
+254, 51,176,176, 50, 51,254,103,100,101, 98, 2,245,161, 8, 30, 83, 82, 26, 87,138,103, 44, 8,139,127, 89,160, 81, 6,204, 30,
+192, 26, 23,249,176, 73, 82,155,255,192, 90, 4, 52,198, 45, 42, 74,252, 41, 99,216,139,117,112,185, 15,172, 3,240,116, 2,174,
+ 60,125,202, 0, 62,251, 26,216, 34,131,244, 3, 64,197,205,165, 75, 64,114,221,254,253,248,235,128,226,250,122,200, 72, 23,144,
+ 93,210,208, 0,239, 19,224, 25,249, 65, 6,192,230, 63,218, 56, 50,228,208, 99,248, 88, 16, 86, 32,192,194,242,227,215, 79, 96,
+ 8,223,184,119, 23,104,227,181, 91,183,127,253,250,205,196,192, 8, 12,127,160, 99,128, 45,142,239, 95,191,237, 94,181, 50, 8,
+233, 48, 87, 52, 0, 47,253, 99,130,125,145,197, 79,158,187,164,170, 40,207, 78,216,225,176,177, 11,118, 85, 96,209, 15,236, 7,
+ 0,145,103, 96,242,111, 22, 85, 26,150, 16,239,158,179,201,169,189,202,230, 96,119,138,252,123,102,199,223, 79,160, 73,133, 87,
+217, 86,242, 51,143,255,253,135,189, 41,163,174,170,206,197,197, 61,105,206, 84, 71,123,123,115, 75,139, 93,219,118,222,184,115,
+ 11,216, 49,231, 96,103,183, 54,182,222,186,105,235,155, 87,111, 2, 3, 3,137, 47,250,129,205,246,123,247, 64, 81,118,234,212,
+169,140,140, 12, 60,189,219, 7, 15, 30, 40, 43, 43, 67, 24, 23, 47, 94,148,151,151, 87, 84, 84,124,255,254,253,153, 51,103,148,
+148,148,128,141, 12,160, 8, 80,106,180, 2,192, 3, 0, 2, 8,203, 28, 64, 26,227,197,255, 7,151, 49, 50,179, 48,228,206,205,
+127, 32, 57,169,111, 33,176,176,156, 94,123, 51,181, 77,157,121,207,172, 52, 89,205, 89,170, 89,192, 54, 55, 19, 19,202,224,134,
+ 10,159,204,149, 75,235,192, 76, 96,193,248, 21,124,212,251,111,134,223, 63, 89,254, 1,155, 14,160, 50,125,253,134, 93, 64,210,
+218, 19, 75, 25,177,227,242,127, 15, 67, 29,120, 23, 22, 88,202, 49, 48,176, 50,176,114,252, 97,252,251, 15,124,210, 83,120, 52,
+232, 76,249,135,199,102, 97,234, 5,166,203, 63,255,152,152,254,252, 97,250,245,243, 27,184, 27,248,157,153,153,251,207,247, 79,
+223,129,133, 48, 35,176,103,240,237, 47,195,183, 95,127, 48,253,249,231,215,191, 31,172,204,255,190,253,249,243,239,227,231, 47,
+191,153, 25, 89,127,254,249,253,235,255, 47, 32,193,192,246,143,137,145,129,145,253,223,199,239,127, 95,188,254,246,245, 39,250,
+196, 53, 19, 35,180,195, 2, 44,151, 32,103, 81,253,254,241,253,227,187,119, 76,192, 80, 99,249,207,240,159,133,153,145,129,248,
+150,255,205,135, 55,213,229,213,241,140,252, 32, 15,136,115,114,114,194,107, 2, 96, 62,129,148,254,192,106,128,159,159,255,227,
+199,143, 31,128, 53, 16, 17, 99, 38,144,230, 63,176,155, 12,225,230,228,228, 76,158, 60,153,188, 78, 0,220, 4,200, 64, 16,254,
+209,127, 70, 94, 94,160,131,203,202,202,128,141,232,223,239,223, 3,221, 92,145,147, 67,176, 31,128, 60,214,143,107, 62, 0, 83,
+ 87, 39,161,105,246,179, 96, 0, 97, 99,158,136,245,254,221, 59, 30, 94,222, 55,239,223,239, 63,121,146,133,137,249,231,239,223,
+223,190,127, 7, 54, 48, 33, 85, 17, 48,145,252,250,249, 19,127, 80, 99, 14,251, 0, 69, 32,157, 0, 85, 5,133, 71,247,238,144,
+ 20,194,192, 58,224,235,235,147,219,215,207, 37,163, 31, 64,112,228, 7, 14, 46,172,154,109, 16, 95,200,174,168, 7,202, 32,111,
+158,223,122, 7, 90,105,202,110,233,243,232,239, 31,174, 41, 39,177,106,249,244,233, 19, 59, 39,135,138,162,226,253, 39,143,223,
+190,126, 27, 30, 19,189,109,239,238,137, 29,189,235,183,109, 82, 85, 84,141, 11,142, 61,126,238,232,250,181,107, 3,113, 15,197,
+192, 75,127, 96,209,239,234,234, 10,169,161,159, 61,123, 6, 44,253,241,187,246,237,219,183,182,182,182,192, 60, 14, 44,229,143,
+ 30, 61,170,165,165, 5, 76, 81,178,178,178,192,206, 49, 19, 24, 0, 59, 16,240, 40, 30, 5, 88, 1, 64, 0,177, 96, 41,253,247,
+ 45, 96, 96,103,103, 16,146,251, 38,107, 62,169,101, 6,195,223,175, 12, 47, 62,213, 44, 63,152,225,159,193,176,103,225,163, 23,
+175, 25, 84, 25,254,253,253,131, 86, 1,220,249,244, 73, 77,128,239,207, 79,134, 59, 7,150,168, 56,184,131,199, 72, 24,126,255,
+250,205,202,192,244,229, 7,104, 17,133,135,131, 17,167,176, 52, 86, 71,120,232, 50,110,187,248,159, 21,216,220,151,115,255,245,
+232, 48,164, 19,192,202,198,254,155,225, 7, 15, 39,232,238,192, 77,219,150,127,127,251,216, 66, 89, 0,203,192,211,191,127,108,
+191,190,255,102, 96, 3, 86, 2, 12, 63, 64, 89, 20,216, 43,252, 9, 44,218, 89, 88, 25,126, 48,252,255, 7, 26, 26, 2,138, 96,
+230,128,111, 63,254, 49, 51, 51,254,254,243,251,199,207,127,159, 62,255, 0,185,246,223,255, 95, 63,255, 1,107, 31,102,160,110,
+ 14, 6,198,239,127,255,129,150, 16,125,255,252, 29, 95, 8,130,186, 2,255, 24,254, 51, 50, 48, 49, 1, 75, 7,230,127,255, 25,
+129, 12, 80, 45,248,143, 9, 88, 49, 49,254, 99,198,223,252, 39, 53,194,184, 96,203, 16,145, 75,127, 96,123, 7,216, 5, 6,118,
+131,224, 45,101, 98,154,255, 10, 34, 34, 16, 46,144, 65, 97, 39,128,200,209,255,255,159, 63,215,214,214,254,124,251, 22,114,253,
+163, 10,184, 6, 98,253,249,211,215,215,247,233,171, 87,210, 84, 93, 97, 9, 31,225,129, 79, 0,160, 1, 99, 99, 99,120, 15,224,
+234, 83,140,246,193,207, 95, 31,126,189,251,241,227,135, 0, 63, 63, 7, 48, 41,254,253, 3, 12, 88, 96, 89,243, 11,216, 17,248,
+253,251,223,159,191,248,195,249,246,131, 7,240, 25, 96,228,177, 32,228,153, 97, 82, 1,183,168, 57,176, 29, 69,134, 70,226,231,
+ 0,236,119,191,126,165,176, 6,216, 9, 96, 84,212,147,159,127,254,205,143,127,220, 44,140,191,142,108,184,121,239, 62,174, 4,
+242,253,207,175,179,199, 79, 77,232,233,183,114,176,169,105,106,216,185,125,231,210, 69,139, 45,237,108,100, 21,228, 88,184, 88,
+247, 30,222,187,108,225,226,117, 27,214,110,221,186,213,219,219, 27, 83, 59,228,158, 28,120,209, 15, 1,192,118, 12, 49,254, 2,
+166,121, 96,137, 15, 74,192, 10, 10,192,216, 4,118,215,128,217, 31,216,234,103,103,103, 7, 54,134,128,130,188,188,188, 64, 53,
+ 35,185,124, 7,182,108,182, 44,105, 70, 27,246, 65, 6, 0, 1,132, 50,176, 7, 26,249, 57,188,148,129,147,227,193,167, 95, 12,
+223, 63,178,255,251,166,167,163,196,240,246, 27,195,175, 63, 14,250,106,160,133,153,191,127, 48, 51,130,135,104,254,253,197, 48,
+234,195,173, 15,143, 88,216, 25, 60,252, 10,151, 77, 2, 54, 82,126, 49,124,251,249,247, 59,195,134,253, 23,246,156, 6,221, 23,
+ 47, 35,167, 8, 90, 99,143, 3,120,233, 51,254,254,193,176,105,235, 14, 19,183, 92, 80,243,159,129,149,153,147, 33,204, 39,212,
+203,206, 31, 40,251,228,225,221,255,191,255, 98,111,221, 0,155, 99,160,201,234,191, 63,127,129,166,127,127,254,248,254,237,219,
+183, 47, 95,190,124,254,244, 17, 24,247,159, 62,127,249,241,229,203,247,239, 88,138,240,207, 95, 24,191,255,248, 11, 68, 95,191,
+253,254,252,229,231,251,207, 63, 63,124,250,245,241,243,239, 15, 31, 64,228,187,183,127,222,189,255,243,238,227,159, 55,239,126,
+189,124,131,101, 4,137, 9, 88, 28, 0,179,214, 95, 70, 70, 38, 96,153,255, 31,228,142,255,204,127,255, 65,195,243, 31, 56,187,
+ 16, 51,255,171,105,169,121,116,219,209,157,251,118, 66,234, 3, 96,111, 0,143, 98, 96, 18,103,129,133, 97, 23,120, 21,102, 69,
+ 69, 5,228,148,121,228,101,145,196, 52,255,197,197, 81,102, 69,178,179,179,183, 30, 58,244,140,136,197, 60, 88, 1,176,249,143,
+191, 10, 1, 54,243, 33,140,149, 43, 87,222,121, 1, 90,202,181,229,192, 1,184,224,205,155, 55, 69, 69, 69,105,148, 7, 32,165,
+ 60,242, 21,137, 16, 54,158,241, 31, 80, 69,203,199,251,239,239,223, 79,239,222,191,121,243,230,237,135,247, 95,191,125, 3,162,
+207, 95,190,124,253,248,233,243,135, 15,192, 84,246,235,199, 15, 96, 53,128, 75, 59,114, 41, 15, 47,253, 33,108,228, 21, 65,248,
+193,151,215, 39,247,172, 70,100,221,111,239, 46,208,186,188,120, 30,174, 0, 44,247,129,165,255,207,131,107, 30, 38, 26, 2, 75,
+255,195,174,162,127, 62,190, 54,217,241,138, 5, 71,244, 2, 91, 18,169,249,153,119,110,222, 60,126,224, 48, 63, 47,127,100,120,
+164,128,176,208,185, 83,103,120,216, 56,184,185,185, 37, 21,164,150,175, 88, 94, 81, 93,245,133,184, 50, 29, 2,140,140,136, 58,
+205, 31, 88,190, 3, 11,122, 96, 75, 31,216,234, 55, 51, 51,211,214,214, 22, 17, 17,225,224,224, 0, 22,253,250,250,250, 2, 2,
+ 2,144, 85,161, 35,188,141,143,220,187,197,236,233, 2, 4, 16,162, 7,144,118,107,218,255,215, 15,126,176,114,236,121,197, 5,
+140,107,133, 15,207,153,215,181,108, 79,111,238,214, 82,145, 20,228,200,213,224,100,152,122,254,255,239, 95,143,153,193,227, 6,
+ 88,202, 25, 30, 96,138, 5, 82, 23, 47,109,214, 55,240,173,171, 89,180,113, 93,223,174,253,215, 29, 45,181, 89, 88,216,119, 31,
+ 62,247,159,153,229,215,223,191,248,221,234, 97,168,177,227,236, 13,134,222,142, 16, 95, 47, 31, 31,223,157,251,214, 3, 27,232,
+222,238,145, 76,127,127,179, 50, 99, 47, 78,129, 69,255, 95, 80, 73,251,151, 5,216,210,255,207, 2,108, 2, 0, 27,194,160, 37,
+ 1,192,134, 56, 35,168,127, 0,233, 37, 96,233, 63,126,231,101, 98,126,207,198,206, 4,106, 53,255,253, 15,108,237,255,251, 15,
+236, 61, 0, 59, 1, 12, 76, 28,255, 25,153,129,173,121,198,191, 76,140, 63,255,254,255,240,245, 63,159, 56,214, 1, 25,196, 89,
+228,144,240, 96, 97,254,207, 4,170, 16,152,225,133, 33,168,110,192,221,252, 7,150,254,208, 86,234,130, 61, 64, 4,100, 0, 43,
+ 3, 6, 47,124, 65,244, 15, 60, 20,187,102,205, 26, 72,222, 83, 84, 84,132,120, 16,216, 44, 5,122,156, 96, 5, 0, 44,253, 33,
+205,127, 69,234, 21,184,172,224,129, 35,111,123,156, 19,155, 86,186,186,189,189,189,192,102, 62,176,160, 7,246, 6, 2,192, 39,
+227,171,171,171,195, 5, 31, 62,124, 40,194,206, 46, 1,235,145, 80,119, 14, 0, 8, 32, 87,178, 32, 95,123, 75,240,210,218,247,
+111, 62, 50, 50,252, 1,181, 40, 94,126, 99,227,224, 0,109, 42, 4,247, 0,190,127,249,242,243,235, 87,208,132,211,135, 15, 30,
+184,239,158,133,148,242,144, 81, 32,115, 35,189,147,231, 46,193,165,208,166, 4,112, 54,111, 95,159, 60,121, 96,189,179, 87, 4,
+180, 50,248,120,251,230,165,163,100, 52,252,137, 31,255, 1,245,213,222,125,125,148, 98,250,255,254, 37,177,217,231,190,254,249,
+255, 41, 90,145,127,217,253, 79,137,194,192,210,159, 9,119, 5,159,157,147, 83,219,209, 34, 38, 44,242,251,223,223,219,143,239,
+ 69, 71, 70, 45, 90,178,100,227,134, 77, 81,209, 81, 63,127,252, 60,124,230,216,247,239, 95,210, 18, 18,246, 30, 63,142,185,142,
+ 3, 24, 35,119,238,220,113, 3,119, 16,145,251, 1,111,223,190, 45, 45, 45,133, 79, 12, 96, 5,194,194,194,207,158, 61, 19, 20,
+ 20,156, 49, 99,134,169,169,169,161,161, 33, 27, 27, 27, 48,239,159, 56,113,194,194,194, 2,168, 0, 40, 43,140, 99,238,112,196,
+214, 1,104, 0, 32,128, 16, 21,192, 44,181, 44,135,175, 51,111, 61,121,255,220, 23,220,232, 56, 89,241,127,203,116,169,151,247,
+251,237,131, 24, 62,188, 99,104, 91,240,255,233,141,191,156,220, 31,222,129,186,239,140, 24, 91,171, 14, 30,216,104,239,224, 12,
+100,124,253,247,251,206,135, 71,192, 18, 89,133, 79,209,209, 81, 79, 92, 68,226,237,199, 79,160, 14,194,175, 63,207, 63,124,213,
+196,230, 8, 25, 57,203, 39,143,142,131,211, 44,139, 7,104, 37, 40,203,142,203,191,119,110, 89,243,242,205, 51, 97, 1, 80, 23,
+ 79,128,141, 85, 82, 0,251, 18,210, 95, 12, 44,108,160,150, 24, 51,176,209,205,244, 23,216, 71,249,243,151,149, 5, 82,250, 51,
+128, 23,137,130,182, 8, 96, 3, 1, 17, 21, 27, 22,151,112,177,253,103, 97,133,245, 36,126, 51,252,249,207,240,227, 23,195,223,
+159,192,134, 61, 35, 35, 27, 35,208,220,175, 63, 25,146, 19,186,208,182, 86,195,103,128,255, 49, 1,235, 13,208,248, 15,164, 13,
+ 14,236, 1, 48, 49,131,170, 35,160,236,127,102, 96,183, 0, 95, 39, 0, 94,250,163,177, 65,117, 0,174,225,166,191,127,129, 69,
+ 15,176,248,134, 84, 0,107,192, 0,200, 85, 86, 86, 6,218, 62,113,226, 68, 96,135,224,221, 59,124,187,129, 74,192, 96,199,142,
+ 29, 95, 95,162,156, 88, 0,172, 15,238,223,191,207,128,119, 83, 24,230,206, 47, 96,209, 15,172, 78,128, 65,231, 99,111, 47,141,
+123,254, 0, 88,178, 91,233,233,189,125,240, 0, 88,202,223,130,173, 5, 82,149,148, 44, 42, 42, 58,122,244,168,154,154,154,142,
+180, 52,158,105, 15,228,113,127,226,231, 0,144, 39, 3,202,203, 65,139, 62,239,221,131,182,253,225,219, 2,240, 44, 4,226,145,
+ 22,251,254,252, 5, 48,101,125, 5, 54, 50,223,188, 6, 38,174,255,255,255,253,248,241,227, 63, 24,220,191,118,253,247,175,159,
+120,150, 0,161,244,110, 29,237,129, 8,190, 36,148,152, 33,160, 47,111, 78, 1, 75,127,144, 51,184,185, 55, 34,117, 2, 76,108,
+ 3,105, 90, 82,152,108,127,117,198,147,193,192,216,229, 85,182,149,196,180, 99,192,250, 64,144,141,241,237,187,247, 44,140,140,
+ 44,120,199, 8,227,226,226,224,236,205,155, 55,123,121,123,110,217,180,101,213,170, 85, 13,213,181,187, 14,236,101,102, 97,150,
+150,145, 6, 6, 36, 3, 27,150,133,124, 42, 42, 42,152,213,192,238,221,187, 25, 8,109, 1, 3,182,244,239,221,187,167,165,165,
+ 85, 80, 80,176, 98,197, 10,126,126,254, 27, 55,110, 32,143, 13, 0,101, 21,200, 29,112, 27, 33, 0, 32,128, 80,230, 0, 14, 24,
+166, 51,192, 86, 54,111,121, 37,224, 35,202,248,255,204,182,255,199, 55,129,234,126, 14,142, 31, 92,188,187, 5, 28, 94, 88,186,
+128,199, 34,208, 55, 4,222,188,245,235,200,137, 54, 80,153,200,204, 1, 25,174,184,243,233,121, 93, 78,210,183,111, 63, 63,125,
+ 7,205, 1,252, 98, 98,119,242, 8,193,234,136,218,234,132, 29, 91,193,219,106,254, 66, 6, 91,254,120,232, 50, 70,100,245,113,
+113,177,243,129,231, 0, 88,255,253,144, 22,197, 94,190,176,252,255,243,139, 17, 84, 7, 0,139,138,191,192, 60, 10,204,169,127,
+192,115,182,140, 76,192,238,192, 31, 72, 69,133,163, 14,248,240, 93,224,251,207,183,108, 44, 32, 69, 64, 21,127,128,213,199,239,
+255,191,255,252,255,242,253, 31,168,249,207,192,248,251, 31,116, 48, 7,189, 32, 6,141,238,255, 5,194,255,192, 98, 1, 60,254,
+195,200,128,110, 5, 68, 91, 94,161, 35,174,115, 57,174, 31,191, 78,106,108, 1,211,244,247,239,223,117,117,117,149,148,148, 30,
+ 60,120,176, 10,188, 75, 22, 82, 25, 64, 64, 71, 71, 7,193, 58, 0, 8,176, 78,175, 5,199,199, 51, 16,177, 41, 12,178, 53, 23,
+ 25,248, 58, 56, 16,156, 61,150,128, 53,196,144,123, 3,192,134,191,137,186, 58,219,215,175,248,189, 76, 73,250, 70, 46,229,145,
+119, 81, 48, 16,177, 79,152, 83, 82,226,219,237, 59,127,255,252,249,244,254, 3,184,119, 5,138,226,247, 47, 95,125,122,255, 30,
+232, 42, 60,205,127,180,201,128, 37,107, 55, 35, 47,253, 68,158, 30,192, 14,190, 93, 60,177, 31,178,158,130, 97,227,106,208, 2,
+ 80, 35,251, 8, 33, 49, 3, 90,150, 3,255, 81,234, 0,134,217, 6, 25,117, 47,254,253,211, 95,112,234,148,135,184,246,150,151,
+192,210,159,151,149,216,131, 35,129,145,187,239,192, 62, 39, 87,231, 77,107, 55, 52,119,118,148,127,252,248,255,223,191,149, 43,
+215,138,136,136, 60,250,132, 83, 23, 90, 53,192, 64,104, 11, 24, 16, 88, 90, 90, 2,219,248,231,206,157, 51, 50, 50,114,118,118,
+222,191,127,191,156,156, 28,176,133,100,111,111, 15,140, 32,160, 56, 43, 43,235, 8, 95, 2, 4,217, 7, 0,239, 1,160,113,129,
+ 0, 32,128,112,238, 4, 6,246, 3,230, 94,222,163,243,247,170, 4,235,199, 31,255, 89,110,255, 23, 96,126,253,233,133, 5,116,
+ 27, 33, 19,182, 1, 25, 81, 33, 67,175,132,184,191,255,225, 77,245,255, 95,190,126, 98,102,225,103, 96,226, 42,235, 33,176, 83,
+201,195, 91,103,195,212, 10, 6,166,111,240,130,148,135,135,255,239,239,247, 12,255,191, 62, 60, 54,203, 68, 79, 14,231,224, 50,
+176,145, 13,206,154,127, 24,152,217,254,131,171, 1,112,233, 15,106, 46, 51, 64, 9, 92, 32, 33,173,102,214,228,134, 63,191,223,
+177,128, 23, 57,131,250,248,127,254,255,248,205,240,233, 51,176, 51,240,255,207,127, 38, 22, 86,198,214, 38, 44,139, 91, 82, 82,
+ 64,195,199, 11, 23,220, 97,252, 13,106,254,131,186, 25, 32, 10,220, 74,250,207,204, 8,154,139, 98, 41, 46,113,195, 99,117, 74,
+115,202,131,187, 15,200,136, 81, 96,250,126, 15, 94, 63, 99,108,108,108,102,102,246,250,245,235,187,119,239,130, 22, 38,254,251,
+183,118,237, 90,130,117, 64, 78,124, 60,167,152,152, 15,182,225,154, 28,112, 5,192,137,187, 40,135,100, 72, 52,189,210,226,226,
+ 36,185, 31,216, 27,176, 6,247, 6,196, 56, 57,117,172,172,104,154,250,209,202,119, 96,136,161,205, 6, 19,172, 3,132, 85, 85,
+ 62,191,127,207,194,206,246,243,231,143,191,191,255, 0, 3,153, 87, 80,240,227,187,119,192,210, 31,127,243, 31,190, 17, 12, 50,
+ 1,112,242,220, 37, 96, 5, 0, 31,253,199,181, 47, 76, 77,242,253,155,183,111, 86,173, 94, 14, 23, 9,139, 78,126,247,139,180,
+117,159,152, 99, 62, 24, 34,140, 4,251, 1, 12,219,161, 7, 57,168,108,132,238,189,255,248,251, 47,241,110,112,114,112,186, 40,
+120,209,205,219, 35, 53, 54, 89, 79, 95,119,211,198,205,199, 47,156, 77, 75, 75,123, 68,232,144, 50,120, 53,208, 13, 6, 4,119,
+ 56, 2,107, 11, 96,143, 97,203,150, 45,192, 38, 17,176,223, 0, 89, 11,119,245,234, 85, 96,219, 31, 88,250,195,235,146, 17, 14,
+208, 54, 3, 35, 3,128, 0,194,119, 20,196, 63, 93,151, 75, 12, 46,151, 72,177, 73, 71,199,122,210,164, 69,121,249,145,210,242,
+192, 84,251,147,149,157,227,201,243, 79,246,190,113,196,232, 53, 52, 84, 74, 72, 8, 91, 48,111, 29,195,191,135,192,150,253,159,
+ 31,223,165, 37,249,229,248,254, 16,208,246,247, 31, 11,211,191,223,140, 44,172,255,255, 64,171, 1, 32,241,255, 47,145,203, 90,
+210,114, 65, 67, 10,245,149,153,172, 44,140,144,115,131,254,254,253,251,225, 51,176, 38, 96, 96,102,249, 55,109, 42,190,244, 23,
+159, 0,218, 28, 48,111,238, 77, 6,200,137, 52, 76,192,238, 2,104,204,167,168,196,135,160,189, 31,191,124,196,122,212, 15, 65,
+ 0, 44,131,128,157, 0,160, 35, 63,125,250,196,204,204, 12,100, 72, 72, 72,252,254,253, 27, 57,171, 0,235, 0, 92,103, 66, 64,
+154,234,130,100, 45,247, 20,130, 4, 41,137, 37, 62, 38, 16, 39,113, 88,150,236, 57, 0,180,146, 29,235, 90, 32,130,219,193, 20,
+204, 76,129,228,141,131, 7,127,124,251,254,239,239, 95, 77, 99, 99, 93, 43, 59, 30,105,188, 1,248,159,241,225,253,187,160, 25,
+ 23, 6,134,164, 32,232,148, 14, 80, 4,153,141,117,139,200,173,231,192, 36, 33, 24, 30,157,242,240,241,139, 19,135,182, 0, 69,
+ 86, 45,157,107,110,231,195, 43,110, 67, 76, 64,133,129,246, 97, 16, 62,233,225, 47, 35,246, 77, 8,143, 2, 37,182, 63,251, 65,
+173, 66, 71, 31, 12,206,156, 57,179,247,196, 65, 97, 17, 97,146, 14, 41,129, 84, 3,196,168,228,229,229, 13, 14, 14, 62,126,252,
+ 56,176, 25,116,234,212,169,209,179,128, 48, 71,255,209, 74,127,180,249, 0,128, 0,162,254,165,240,202, 26,166, 91,119,222, 9,
+240,230, 18,147,150,125,247,249,143,189,119, 44,241,122, 45, 77, 53, 44, 77,171,210,211,235, 24, 24, 94, 10,242,178,200, 9,253,
+ 35, 60,106,153, 88, 66,185,155, 27,219,167, 3,201,252,130,156, 95,223,127,255, 3, 47,181,236,159,218, 79,164,222,164,100,208,
+ 73, 65,243,230,220,248,247,159,185,178,194,159, 14,145, 10, 58,242,232,231,207, 95,191,126, 65,138, 69, 72,129, 56, 92,207, 7,
+ 37,120,194, 4,241,128,152, 83, 63,113, 1, 13,123,123,226, 21, 63,191,119,211, 92, 85,134,108,187,222,254, 82,225, 17, 87,113,
+ 9,181, 33, 85, 35,174, 83,222,144, 0,211, 31, 70,246,239, 76,216,231,255,239,126,254,163,198,139,167, 64, 32,103,161,176,137,
+137, 9, 29, 18,137, 37, 24,140, 22,247,184,234, 0, 60,178, 0, 1, 52,122, 41,252,144, 4,163,183,186,143,130, 81, 48, 10, 40,
+ 7, 0, 1, 52,122, 35,216,144, 4,163,165,255, 40, 24, 5,163,128,114, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80,
+ 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64, 52,
+185, 20,126, 84,239,168,222,193,169, 23,114, 26,196,104, 88,141,234, 29, 81,122,241, 0,128, 0, 98, 65,203, 30,196,232,193,154,
+133, 40,209, 59, 10, 72, 5,184, 10,178, 81, 64,106, 40, 17, 25,146,143, 30, 61,122,250,244, 41, 59, 59,187,136,136,136,156,156,
+ 28,221,188, 0, 63,243,117, 48,231,160, 87,175, 94, 61,125,250, 20,191, 26,105,105,105, 49,108,187, 79, 40,209, 59, 10, 40, 7,
+ 0, 1,132,190,236,151,224,206,123, 60, 27,172,208,244, 98, 30, 77, 76,211, 51,135,233, 95,184,224, 87, 80, 80, 80,160,169,169,
+137, 95,187, 52,234, 25, 56,200, 57, 33, 52, 52,212,197,197, 5,143, 94,170,212, 1,238,238,238, 64,114,231,206,157,116,208,251,
+245,235,215,181,107,215, 66, 46,133, 15, 14, 14, 54,196,125,159, 34,166,103, 9, 94, 10, 63, 99,198, 12,172,173, 13,252,161, 68,
+ 76, 24, 2, 75,168,159, 63,127, 2,173,224,224,224,248,241,227, 7,176, 38, 56,125,250,180,190,190,190,138,138, 10, 46, 45,214,
+214,214, 4,253,245,252,249,115,200,181, 39,248, 1,176,244,135, 28,247, 77, 76, 88, 17,179, 23, 36, 44, 44, 12,127,186,130, 0,
+121,121,121, 6,240,121,203, 64,191, 67,226, 14, 79,154, 4,166,219,162,162, 34, 60,150,190,127,255,222,220,220, 28,107, 80, 3,
+245,106,105,105,225,209,251,242,229,203,218,218,218,209,230, 14, 37, 0,207,165,240, 0, 1,196, 50,108, 60, 73,255, 70,241,198,
+ 25, 30,184,164, 2, 50,119, 16,212,190,127,255,126,120,246,248,246,237, 27, 23, 23,215,235,215,175, 9,214, 46,123,246,236, 65,
+102, 35,103, 72, 32,119,245,234,213,196, 7,194,229,203,151, 33,133, 56,154, 57, 36,129,140,140,140,236,236,108, 98,174,126,133,
+220, 4, 25, 23, 23, 7,244,111,111,111,175,130,130,130,160, 32,225,189,208,192,146,119,251,246,237, 16,182,135,135,199,142, 29,
+ 59,176,178,241,244, 56,225, 9, 3,200, 48, 54, 54,158, 53,107, 22,164,160, 36, 38,193,124,252,248,145, 23, 12,128,165, 63, 39,
+ 39, 39,176, 50,248,240,225, 3, 63, 63,255,169, 83,167, 24,192, 27, 86,113,105,212,209,209, 1, 22,151,240,130, 27,185, 21, 15,
+ 44,208,129,228,137, 19, 39,162,162,162,136, 9, 97, 34, 75,127, 8,152, 48, 97, 2,229, 9,155,155,155,251,218,181,107,172,172,
+172,191,126,253, 2, 6,242,237,219,183, 43, 43, 43, 9,234,122,137,116,188,160,173,173,237,225,195,135,225,220, 55,111,222, 16,
+169, 17, 19, 60,128, 29,162, 55, 10, 40, 47,253, 25, 48, 46,133, 7, 8,192,222, 25,219, 48, 8, 3, 81, 52,146,171,204, 16, 15,
+225, 34, 61,131,120, 10,247, 46,211, 51,144,229, 13, 34,121, 28,183,121,242, 33, 11,129, 2, 7,105, 40,242, 43, 64, 50, 58,225,
+227,223, 63, 23,247, 47, 90, 0, 74, 41, 74,133,120,157,131,145,199,243, 53,137,154,119, 84, 46, 17,234, 23,121, 53,142,163, 70,
+199, 45,124,225, 33,238,148, 18, 44,185,152,116,166, 65, 55,133, 23,111,200,163, 64,251,231,156,187, 41,252,238,151, 71,251,203,
+204, 72, 49,133,167, 6,104, 90,129,223, 77,225, 9, 12,210,159,155,194,147, 39,176,243,110,192,236, 14,188,127,107,102, 9,104,
+127,154,140,123, 51,133,175,181, 26, 99,120,213, 70, 1, 16,150,239, 26, 95,110, 79,128,133, 68,171,111, 2, 64, 8, 65, 46,122,
+ 70,173,159,124, 3,194, 31,178,142, 49, 82, 3, 72,140, 97, 24,148,236, 63, 7,236,239,189,159,215, 0,105, 35, 54, 18,233,244,
+230, 58,231,104,163, 41, 87, 50,203, 86, 96,173, 37,193,248, 41,200,207, 63,251, 79,172,210,124,225,215,166,240, 31, 1,216, 59,
+155, 19, 6, 97, 56,138, 11,210, 13,114,235, 16, 30, 29,160,189,101,129,220, 29, 35,251,184, 71,134,201, 49,217, 64,232,207,252,
+105, 16, 81, 19,219, 82, 40,244, 29,130, 40,228,160,201,251,240,144,247, 73, 1, 96,155, 21,239, 84,130,205,134,181, 60,171, 1,
+ 44,187,223,250, 57,158,217,255, 20,157, 9,133,193,218,114,120,250,242, 52,208,122, 96,255,155,185, 20,229, 46,165,240,140, 53,
+ 46,126,133, 91, 2, 83, 49, 3, 99,113, 6, 40, 21,215,255, 90, 20,120, 7,155,165,240,197,208,195,215, 65, 0,134, 97, 32, 7,
+132, 16, 46,207, 86,120, 46, 80,130, 24,227,113,114,130,253,179, 42,139, 0, 72, 14, 72, 77,100,181,121, 11,222,207,181,207, 95,
+ 88,216,216,109,231,156,214, 26, 37, 80, 74,113, 13,251, 35, 6,172,210,182,173,233, 55,154,217,223, 90, 43,155,113,149, 3,246,
+ 48,142,227, 65, 8,240,222, 27, 99,246,158, 78,211,116, 77,224,109, 75, 56,238,186,174,239,123, 49, 28,127,251,191,100,255,102,
+171, 20,254, 33, 0,123,215,110,195, 48, 8, 68,163,140,132,216,129, 79,155, 53,178, 6, 27,100,141,136, 58, 29,107, 32,209,177,
+131, 27, 40,242,146, 83, 40,130, 13, 1, 81,230, 10,203,182,140,125, 6,241,222,221, 67,226, 86, 18, 64, 45, 92,252,184, 50,188,
+138, 3,180,214,163,121, 64,215,195,238,171, 46,215,199,253, 38, 38,126, 16,240,135,121, 85,123, 27, 99, 28,165,132,137,126, 46,
+ 69,225,129,218,136,149, 48, 3, 39, 8,128,140, 26,130, 3,142,250,138,212,255,211,167, 40,124,217, 59,158,138,194,211,205,198,
+ 64, 75, 41,203,122,146, 82,170,228, 4, 13,229,167,142, 66,234,162,240, 69, 11,218,181, 16,194,249,189,151, 56, 78,240, 69,239,
+ 61,109,190, 68, 69,225, 95,181,166,183,205, 90,219,128,242,130,254,200, 54,190,216,104, 72,213,193,195,228,240,104, 42, 48, 97,
+ 41, 37,198,152,115,142,115,142, 81, 35,145, 13,151, 66,136,156,115,183, 57, 16, 31, 71, 99,204,145, 22,180,220, 16,118, 32,161,
+ 4,167,162, 91,224, 57,198,136,208, 31,124, 0,183,255,208,223,181,167, 0,162,102, 5, 64,245, 73, 96, 50,234, 0, 96,115,146,
+164,126, 0, 36,107, 45, 93,186, 20, 77,124,219,182,109, 64, 65, 34, 13, 57,113, 95,203, 66,241, 26,241, 35, 63,240, 6, 38,188,
+169, 8, 76,190,144,194,136,212,210, 31, 94,135,145,212, 60,132, 52,255,209, 46,133, 39,175, 19, 0, 55, 1,207,165,240,240, 38,
+ 63,176, 76, 1, 54,102, 85, 85, 85,129,141,104,118,118,118,126,126,254,150,150, 22,130,253, 0,228,177,126, 92,243, 1,100, 84,
+237,192,130, 24,174, 6,243, 68, 44, 96, 3,159,151,151, 23, 88,234, 29, 59,118, 12,216,248, 5,150, 44,223,145, 46,133, 7,221,
+ 59, 77,232, 82,120,204, 97, 31,120, 91, 30, 24,221,175, 72,188,125, 19, 24,191,144, 21, 65,100,244, 3, 8,142,252,192, 1, 48,
+ 34, 74, 75, 75, 33, 57, 14,104,221,237,219,183, 25, 64,199,244, 26, 2,235, 63, 98,214,225, 80, 82,214, 67, 42, 15, 50, 12, 4,
+198, 35, 48,118, 44, 45, 45,225, 7,207, 1, 93, 11,236,187,140, 22,238, 12, 72,119, 2, 35, 15, 1, 33,167,118,128, 0, 26,236,
+147,192,244,169, 3,128,234, 33,253, 86,120, 71,152,200,210, 31,216,252, 39,219,107,144,230, 63, 90,195,255,197,139, 23,180, 46,
+253,225,205,127, 29, 29, 29, 8, 23,200,160,176, 19,128, 31,192, 71,255,185,185,185,107,107,107,129,165, 63, 68,220,192, 0,116,
+201, 9,176,220,247,245,245, 61,114,228, 8,144,164,162,165,240, 48,129, 79, 0,160, 1, 96,179, 17,222, 3,192, 92, 55, 13, 44,
+ 83,128,117,192,143, 31, 63,128,181, 20,176,174,130, 92,183, 9,191, 20, 30,200,192, 95,250, 67, 42,117,204,177, 32,228,153, 97,
+ 82, 1,217, 26,137,159, 3, 0,214,199,222,222,222,192, 28,196,197,197,229,224,224, 0, 12, 1, 96,148, 1,107,232, 5, 11, 22,
+ 48, 49,209,118,211, 40,176,172,135, 15, 31, 65, 50, 32,241,213, 9,176, 65,243,232,209,163,240,240,112, 6,240,165,211,160,171,
+199, 70, 1, 90, 63, 24,199,189,240, 0, 1,200, 59,131, 28,132, 65, 32,138,238, 61,141,186, 55,158,171, 27,238,194,198,112,136,
+ 90, 57, 66, 87,156,130, 21, 97,107,244,153, 73, 8,193, 90, 1, 99, 98,226, 95,145,118, 51,105, 50,111,102, 24,202,252,250,159,
+192, 29,157, 0, 84,159,188, 39, 88,164,186,181,158,254,162,253,110,123,158, 46,167,105, 35,241,128,106,160,201, 84, 48, 52,142,
+163,236,227,227,126,117,137,225, 45,125,156, 14,250, 75,250,255, 60, 20, 30, 27,228, 85,135,222, 14,133, 7, 34,178,192, 63,231,
+249, 49,220,220, 24,147, 30,126,117, 40,124, 58,243, 83, 68,205,245,102, 59,233, 63,148,199, 66,239,189,244,234, 81,140, 49,132,
+ 0, 95,168, 6,168, 0,174,175,199, 13,229,176, 46,250,246,197,185,254,245, 40,146,155, 93,115,108,244, 67,105,173,225, 62,244,
+119,206, 89,107,161,191, 82,138,216, 60, 12, 67, 77, 0, 56, 44,169, 41, 6,224,134,173,244,151, 77, 72,161, 63, 98,113,108,185,
+187,251, 79, 68, 5,144, 58, 1,185,238, 2,104,144, 78, 2, 83, 82,250, 3,211, 16, 25,221,100,200, 88, 16,176, 43, 64,124,233,
+ 15, 44,238,129,165, 63,116,148, 99,221,250,181,224, 91,252,128,149, 1,131,147, 35, 3, 3,225,101,160,144, 85,137,144,177, 32,
+ 96, 19, 21,114, 9, 42,176, 8, 38, 34,249,130,138, 90,248,189,240,164,150,254,144,230, 63,214,198, 62,121,157, 0, 72,181,145,
+147,147,131, 51,160,130,131,145, 47,133,143,137,137, 97,192,184, 20, 62, 54, 22,231,189, 17, 20,206, 1, 48,144,117, 41,188,176,
+176,240,219,183,111,129,237,253,215,175, 95, 3,123, 0,240, 75,225,129,253, 54, 96,124, 1, 75,127, 96, 53,128, 54,184,143, 12,
+ 32,165, 60,100, 20, 8,237, 38, 50, 60,186,208, 74,127,200, 38, 0,100, 46, 25, 13,127,226,199,127,128,224,246,237,219,192,232,
+ 0,122,208,210,210, 18, 72, 2, 3, 13, 88,158,110,218,180,137,153,153,153,152, 10,128,146, 86, 60,178, 9, 36,233, 50, 6, 3,
+ 32,227,220,185,115, 64, 55,219,216,216, 0,147, 22,176,151,137,188, 96,122,196, 2,200, 42, 32,180, 73, 96,228, 85, 64, 0, 1,
+216,187,130, 20,134, 65, 32,248, 1,159, 32,248, 12,207,130, 63,242,149,130, 79,240,228, 55,188,116,154,129,101, 91, 75,220,228,
+ 80,122,232,158, 36, 36, 16, 54, 58, 51,113, 71,246,119,139,192,223, 68,127,205, 1,151,180,255,199,241,147, 3,108, 19,151, 3,
+ 8, 46,125,100,172,214,186,125,118,237, 11, 79, 71,208,246,253,165, 41,252,170,161,104,164, 59,241,228,173, 39,191, 72, 39, 64,
+ 70,160,191,108, 40,173,129,239, 24, 66, 96,255,119, 16, 0,189, 64,250,162,110, 41,254,206,117,175,231, 0,236, 53, 0, 61, 9,
+145,147,156, 51, 16, 65,239,152,157,231,202,123,223,123,103,231,181, 57, 39, 25, 72,154,194,179, 38,108, 52,243,228, 35, 68,191,
+ 91,118,114, 4,238,113,179, 94, 68,183,237,164,198,160,227,179,148, 2,249,159, 82, 2, 31, 56,231,198, 24, 70, 2, 16, 4,167,
+144,186, 87, 18,184,170,253,185,142,144,177,214, 26, 6,128,254, 24, 35,242,134, 95,153,127, 29,120, 27, 15, 1,196,130,153,223,
+200, 54, 11, 45,117, 34,183, 95,144,155, 69,180, 43,253,129,201,142,194,165,114, 36,105,127,252, 4,231,120, 61, 39, 39, 23, 65,
+237, 88, 7,166,137, 4,192, 2, 5, 88,226,239,221,187, 23,126, 47, 60,124, 49, 40, 49,117, 24,214, 75,225, 33, 59,110, 8,110,
+ 10,195,172,212,115,115,115,241,148,254, 16, 32, 36, 36, 4, 25,226, 7,182,166,145, 27,254, 53, 53, 53,248,147, 28,133,251, 0,
+144, 67, 3,109,171, 4,193,250, 30,216, 21,219,182,109,219,159, 63,127, 62,124,128, 92, 10, 15,114, 9,176, 67, 0,228, 2,217,
+196, 55,228,129,246, 34, 47,253, 68,158, 30,192, 95,250, 51,144, 59,199, 67,121, 29, 80, 81, 81,113,240,224, 65, 96, 52,181,183,
+183, 3, 91, 12,192, 14, 16,100, 75, 4,193, 33, 62, 50, 90,241,200,122, 73, 5,192,154,233,233,211,167,200,251, 0, 46, 94,188,
+ 8,236,186, 1, 91, 21, 68,174, 91, 29, 9, 0,109, 18, 24, 25, 0, 4, 16, 11,254, 66, 28, 87,223,150,214,128,140,210,159,206,
+249,164,165,165, 5,255,254, 70,130,149, 37, 37, 67,186,144, 66, 19,178, 12, 31,200,128,236, 5,131,223, 11,143,167, 92,131, 92,
+236, 14, 44,188,144,231, 0, 32,205,219,178,178, 50,252,165, 45, 86,189,164, 14, 25, 17,217,240,167, 86,151, 20, 57, 28, 48, 47,
+133,199, 95, 7, 0,131,197,219,219, 27,216,146,101, 99, 99,251,249,243, 39,176, 14, 0,134,176,128,128, 0,176,192,194,115, 80,
+ 7,114, 62,130, 79,255, 2,237, 5,170,135,231, 29, 92,185, 12,146, 36,208,182, 13,147, 58,247,139, 57,230, 67,210, 40, 16,164,
+ 14,128,111,254,202,202,202,130, 48,128, 61, 33, 60, 90,158, 61,123,134,188,219,107,197,138, 21, 4, 79,248,193,165,151, 36,112,
+ 1, 12,208, 4,159,128,193,104,185,207,128,116, 39, 48,114,209,143,188, 10, 8, 32,128, 88,168, 88,190, 99,234,165, 79,109, 65,
+255,210, 31, 8, 68,193,128,108,237, 74, 96, 64, 45,199,192,199,127,144,203, 62,172,151,125,146,125,228, 3,133,122,177,246, 6,
+136, 4,100,207, 1,160, 37, 9,172, 93, 46,130,201, 6,216,173,188,123,247,238,254,253,251,191,127,255,254,247,239, 95, 3, 3,
+131,176,176, 48,130,113,119,226,196, 9,120, 55, 2, 46,130,204,198,149, 42,224,141, 3, 72,205, 1,204, 65, 4, 43, 27, 56, 8,
+163,236,254,100,178,115,144,180,180,116, 96, 96, 32,126, 53,205,205,205, 84,215, 59, 10, 72,170, 3, 48, 75,127, 32, 0, 8, 32,
+ 22,106,149,161,163,167, 53, 13, 56, 64,139, 2,226,143,132, 29, 66,158, 26, 16,163,148,193,128,120,245,192,254, 13,145,231,252,
+224,105, 28,144, 81,221, 82,171,134, 38, 21,136,137,137,145, 29,182,148,232, 29, 5,196,215, 1,184,164, 0, 2,104,244, 82,248,
+ 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70,111, 4, 27, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96,
+ 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17,
+ 10, 0, 2,136,134,151,194,143, 94,192, 61,170,119,136,234,221,236, 55,133,120,189,190,155,114,168,165,119,163, 47, 9,122,253,
+ 55,163,232,245,177, 1, 93, 47,202,200,200,248,251,247,239,251,247,239,255,250,245,139,133,133,229,201,147, 39,145,252, 10, 59,
+207,156,249,174, 39,107, 97, 97,193,204,204, 12, 89, 68,187,229,200, 83,106,133, 21,196, 94, 56,128,236, 80,185,122,245,170,148,
+148,212,187,119,239,128, 36, 39, 39, 39, 3,108, 67, 31,154,189, 88,245, 62,190,178, 36,221,246,209,178, 51,106, 44, 98,110, 60,
+188,124,184,244,142,166,103,226,245,226, 1, 0, 1, 68,194, 81, 16,248, 55, 37, 82,241, 2,110,137, 19,215,238,188,122,206,201,
+198,161,206,197,127,199, 78,135,110,149,225,144,184,128,123,176,129,155, 55,111,246,247,247,247, 86,129,216, 27, 14,131,206, 0,
+192,163,248,193,147,199, 79,159, 60,185,121,227,198,251,247,239,229,229,229,121,120,121, 61, 92,221,240,155, 15, 57, 34, 9, 2,
+112, 93, 94, 6, 20, 39, 62,166, 32,187,160,177,222, 33,140, 15,132,190, 3, 83,255, 65, 7, 49,173, 22, 34, 65,163,113, 63,131,
+ 82, 60, 56,121, 45, 96, 56, 91, 68,114,248,134,188, 65,216,187, 70, 4,143, 66, 96,233,249,245,235,215, 93,187,118, 1,147,113,
+ 40,171,176,132,172,232,143,175,223, 57,191,253,177, 46, 73,181,243, 13,223, 50,119,198,230,189,123,221,220,220,232,144, 36,254,
+254,253, 11,116,131,190,190,190,154,154,218,185,115,231,126,252,248,161,170,170,138,121, 56, 60, 86,240,231,207,159,139,103,206,
+203, 36, 27,150,153,105,159,216,213,179,246,178,131,170,142, 19,145,122, 71, 1, 25, 0, 32,128,136,170, 0,136, 57,210,135, 42,
+ 23,112,171,158,187, 43,248,246, 11, 35,195,255, 95,127,153,127,191,251,242,228,205,199, 7, 83,206,242, 56,154,139,104,107,224,
+209,117,118,127,186, 6,116,149, 54,243,250, 93,255, 14,159,254,159, 22,193, 0, 20, 41,106, 37,173, 40, 39,233, 2,110, 92, 53,
+ 7,173,175,236, 96,128, 28, 99, 89,207,200,216,132, 69, 10,148, 79,234, 25,195,174,135,210,103, 73, 56,172,244,255, 15, 46,253,
+237,142, 28, 57,130,167, 2,208,211,223,165,165,101,178,122, 53,223,201,227,160,109, 80,183,110,220, 4,146, 41,137,235, 62,126,
+201,249,252, 1, 95, 53,239,234,234, 10,172, 6,128,165,252,190,125,251,176,158,148, 71,252,166,127,204,148,156,145,158, 62,131,
+184,202, 3,249, 26,122, 18,128, 82, 60,226, 80, 54, 50, 42, 0,152,239,240,156, 60, 10, 1,119,239,222, 61,176,106, 85,147, 75,
+152, 65,116, 22,155,184, 32, 3, 11, 19, 3, 3, 19,195,191,255, 12,255, 88,255,253,252,239, 21,159,246,104, 82,199,177, 99,199,
+172,172,172,104, 93,152, 50, 49, 49, 25, 24, 24, 28, 56,112, 0, 88, 7,152,153,153,189,120,241,226,226,197,139,122,122,122,196,
+ 28, 51, 3,244,172,179,147,107,123,223,166,242,132,203, 22, 30,153, 22,230,123, 74, 38, 63, 81, 51,141,195,170, 23, 18,155,248,
+171, 7,160, 44,201,149,253, 48, 2,104, 23, 2, 35,250, 94,176,213,255, 0, 1,196, 66,100,134, 49,136,211,205,180,206, 33,190,
+ 14, 32,227, 2,110,153,187, 47,141, 56, 5,217, 36,249,255, 50,252,231,252,192,245,226,245,235, 23,159, 63, 42,178,243,220,216,
+121, 4, 24,189,162,184,235, 0, 96, 89,127,227, 46,211,255,255, 28,127, 25,217, 3, 92,127, 7,186,125,103, 96,248, 7,107, 55,
+145,152, 91, 73, 44,187,225, 71, 54, 66, 14,162,218,122,131,245,199,239,223,233,137, 38, 4,171, 1,130,117, 42,190,253,159,245,
+160,204, 0,185, 5, 9,171, 20, 49,224,246, 94,190,158, 85,145, 16,118,113,232,114, 53,151, 79,100,148,254,125,125,125,192,220,
+ 94,220, 6,189,248, 9, 79, 14,119,112,248,168,166, 6,108,122,111,182,181,157, 4, 23,140,138, 98, 0,223,225, 54,101,249, 42,
+124,117, 0,164,244,135, 28,236, 21, 30, 30, 14, 57,245,136, 96,129,136,181,237, 15, 57, 48, 3,238,206,140, 12, 98, 75,127, 50,
+129,113, 31, 3,236,162,118, 80, 5, 96,212,203,112,174,152, 70, 86, 1,107,199,233,129,105,138, 78,174, 12,204, 63, 25, 89,153,
+ 24, 89,152, 24,153, 89,255,255,103,252,247,245,207,255,191,127,129, 77,170,212,248,172,172,186,252,187,226,226, 36,109,106, 35,
+ 3, 0,243,130,164,164, 36, 48,156, 15, 30, 60,120,227,198, 13, 96,253,109,105,105,121,242,228, 73,109,109,109,130,122,143,236,
+ 93, 30,100,240,237,236,103,230,168,250, 47, 54,134, 19,115, 10,194,123,202, 63,148,247, 44, 85, 50,140,194, 83,184,195,139, 23,
+ 96, 20,163,137, 80,114, 30,229, 72, 0, 0, 1,196, 66, 76, 33,181,108,199, 82,101, 21,229,244,166, 84, 98,234, 0,242, 46,224,
+ 86,184,241, 76,157,141,155,237,255, 31,206,158,210, 63,223,126,113, 20,183,242,179,113,252, 96,253,254,245,199,119, 78, 6,198,
+231, 7, 79,176,201, 72,242,243,243, 99,213,123,227, 46,195,172, 21,192, 18,255, 27, 24, 49,216,154, 50, 5,186, 49,194,234, 0,
+ 6, 96,111, 96,214, 10,162,194,130,212, 11,184, 33,165, 63,164,232, 7,249,253,200,239,239,191, 64, 23,252, 58,151,239,238,236,
+116, 37,104,206,221,142,187,172,140,183,161,209,192,248,148, 81, 68, 3,198,126, 37,154,136,111,115, 60,176,237,143,124,153, 9,
+138, 84,250,106,176, 20,190,230,255,155,203,146, 53, 83,252,255, 51,252,111, 47,216, 96,238,160,182,108,218,225,222,213, 81, 12,
+171,255,215, 23, 77,147, 82, 39,182, 41,253,229, 97,186, 52, 7,195,183,183, 87,129,141, 47, 94, 49, 61, 72,233, 63,125,250,116,
+172,138,121, 5,174,168,169, 1, 99,228, 24,176,159,112,242, 36, 3,248,206, 62, 16,128,239,240,143, 12,155, 50, 99, 78, 53,211,
+ 63, 89,172,218, 33,165, 63,176,237, 15, 44, 83,240,220, 59, 70,176, 41, 3, 41,253,145,234,131,244, 25, 51,176, 39, 75,166,176,
+247,240,230, 3, 35, 24,255, 11, 69,149,101,132,140,202,128, 40,111,212, 62, 15, 83,248,123,200,128, 13, 16,252,251,151, 80, 80,
+ 80, 0, 17, 7, 50,128, 53, 1,147,106, 50,212, 96,176, 26, 52,189, 44,225,232,246, 34,223,195, 8,146,197,109,239,143, 31, 63,
+ 36,228, 21, 24,254,253, 98, 98,103, 96,100, 97,254,243,249,227,143,123,247, 95, 63,121, 42, 99,229,192,200, 38,192,248,251, 23,
+ 3, 51, 83,103,102,137,235,172,134,162,162, 34,178,203, 11, 92, 71,140,192, 75,100, 96,122,248,254,253,187,144,144, 16,176,125,
+ 0, 12,237,251,247,239, 47, 88,176, 64, 83, 83,243,195,135, 15, 4, 59, 88, 64,189,242, 76, 39, 37,229, 60, 62, 28,188,252,241,
+ 61,251,226, 45,127,182,157, 88,146, 23,202,201,242, 13, 24,107, 81,216,251,187,163, 0, 47,192,140, 44,180, 62, 1, 64, 0,177,
+224, 47,250,129, 65,236, 88,101, 63,235,224,204, 52,134,244, 11,139, 46, 51, 88, 19,182, 18, 82,238,127,251,182, 20, 24,167, 63,
+126,204, 19, 18,218, 67,204, 5,220, 98,207,223,137,137,115,112,212,103,253,125,243,238,207,179, 55, 44,108,172, 92,140,204,220,
+ 64,196,204, 34,196,202,241,254,243,135,231,251,142,241, 7,122, 98,213,139, 86,190, 31, 62,253, 15, 92, 1, 48,244, 85, 51,254,
+103,100, 96,252, 79,108, 87,128,212, 11,184,145, 75,127, 6, 22,230,123,207, 65,185,247,209,203, 31,114,226, 28,170, 9,155, 59,
+ 59,125,241, 27, 2, 44,253,129,229, 62, 51,227,155,191,255, 69,216,197, 24,185, 35,158,253,251,247,238,199,143,213,127,207,148,
+ 81,210, 83, 33, 88,123, 85, 79,241,179, 20,170,153,178, 33,153,135, 73, 14,200,205,202, 85,215, 55, 83, 90, 58,245, 96, 99, 95,
+246,204,153,196,118,150,129, 69, 80,122,225, 21, 72,190,181,177,177, 1, 86, 0,184, 74,127, 80,141,232,240,150,129,225, 18, 3,
+195,149, 15, 47,121, 84,229, 24,102,207,254,178,127, 63,131,170, 42,208,169,160,104, 2, 10,130,186,152,186,215, 47, 93,148,197,
+ 90,250, 3,219,182,255,192,128, 1,124,159, 12,169, 5, 22,156,141, 92,250, 51,128,166, 1,112,198, 14,176, 91, 0, 41,195,177,
+214,178,255, 96,229, 14,176,177, 3, 12,135,205,135, 80, 38,220,166,207,152, 9,233, 95, 40, 40, 40, 0,179,207,196,137, 19, 33,
+226, 64, 6,176, 2,216,185,115, 39,252,220, 74, 6, 12,189,144,238, 8, 80, 87,106,106, 42,150,241,113, 88,167,103,214,236,217,
+ 64,123,183, 28,126,138, 86, 26,178,240,242, 50,176, 50,255,253,246,225,250,182,189, 75, 87,173,153,246, 12,100,209,169, 70, 62,
+ 85, 59,175,159,143, 30, 95,189,120,246,242,253, 91, 31, 95,188,184,114, 5, 24,113, 18,100,148, 38,152,199,174, 97,150,224,207,
+158, 61,171,173,173,237,233,233,249,245,235, 23, 51, 51, 51, 47, 47,239,215,175, 95, 79,157, 58,133, 63, 89, 66,244,126,120,114,
+180,113,254,163,185, 5, 82,239,190,178,177,177, 48,201, 8,114,188,120,243, 43,189,235,143,190,137,177, 28,238, 94, 29,164, 26,
+128, 71, 52, 38, 99, 20,160,149,254,200,181, 2, 64, 0, 49,225,202, 51,144,115,207, 17,189,117,143,104, 98, 44,128,220, 0,243,
+237,219, 50, 72,233,207,113,250,193,183,157, 42, 12,132,110,134, 97, 57,112,150,255,221,231,127,108, 44,191,206, 94,253,121,253,
+222,143, 93,135, 25,190,255,100,251,255,159,139,129,153,133,129,241,231,191, 63,239,126,254,152,182,123, 11, 46,237,125,213,160,
+102, 62, 98,136, 60, 2,214,190, 98,248,127,243,206,255,162, 86, 18,154, 9,144, 11,184, 33,129,128,255,180, 78,160, 44,242,165,
+ 34,145, 19,158,236, 61,251, 30, 88,250, 67,234,128,219, 79,190, 51,184,172,194,111, 2,176,244, 7, 85, 3,159, 47,115,115,223,
+ 97,231,248, 12, 44,253,127,255, 62,203,204,172,244,235,235, 91,218,165,128,187,231,191, 0, 67, 6, 94,250, 63,191,249,223,200,
+151, 57,183,197,213,198, 21,216, 61,255, 15,150, 37, 12,150, 45, 91, 86,220,198,200, 35,170, 11, 12, 89,143,192,204, 35, 71,142,
+224, 81,252,143,233,177,152, 24,180,244,255,252, 22,116, 74,182,190, 62,168,244,143,139,131,150,254,159,223,114, 2,145, 16,215,
+115,172,218, 67, 66, 66, 28, 29, 29,157,156,156,194,195,195,153, 81, 1, 92, 4,191,107,209, 82, 50,177, 53, 28, 82,217, 4, 1,
+152, 92, 70,108, 77, 11,184, 70, 55, 55, 55,180,182, 54,176, 19, 0, 57,182, 15,230, 50,116,189, 27,102,206, 4,150,206, 16,195,
+225,222,132, 15,142,195,185, 88,237, 5,230, 23, 38, 46,246,223, 47, 30,206,172,169, 89,240,245,195,123,123, 11,136,248,220, 37,
+ 11, 26, 74, 82,212,138, 34,155, 46,239, 91,245,254,190,171,159, 31,145, 29, 92, 96,113, 15,204, 5,231,207,159, 71,170, 50,103,
+ 96, 29,229,131, 4,200,229,203,151, 15, 30, 60, 24, 25, 25, 9,236,165,125,249,242, 5,114,128, 54,176, 95,194,195,195, 19, 22,
+ 22,102,109,109,141,171,232, 7,233, 61,190,246,214,206,162,162,202,222,205,245, 82,215,159,178,124,252,194,252,143,145,225,237,
+151, 95,255,133,149, 11,171, 90,125, 2, 98,112, 86,213,192,106, 28,156, 97,103,130, 1, 86,198, 40,192, 85,250, 3, 1, 64, 0,
+177, 96, 45,250,201,232, 24,162,137, 0, 75,127,180,110, 1,158, 11,184, 89,222,126,120,247,159,149,237,237, 59,142, 13,251, 24,
+ 89,152, 24,126,252,250,255,249, 43,227,159, 63,172, 12, 12,127,255,255,251,241,247,207,231, 63,191, 24,254,225, 28,243,133, 76,
+246,246, 85, 99, 73, 93,224,201, 97,146,189, 67,204, 5,220, 40,205,127, 6,134,229, 57,146,112,182, 73,197, 61,214,255,111,126,
+ 51,138, 16,188,194,155,227,203,126,161,166, 37,175,139, 51,222,188,227,148,250,125,245,239, 95, 80,133,241,240,130, 4,237, 18,
+ 65,215,140,226, 20,183,153,240,210, 31, 34,104, 33, 88, 99,165, 29, 98, 41,116, 21, 40, 75, 48,207, 44, 93,186,244,208,161, 67,
+111,223, 58, 11, 11,239,229, 17,209, 1,166, 22, 38, 38, 38, 60,243,108,143, 30, 1, 43,203, 43,144,113, 35,160,135,223,125,101,
+ 48, 51, 3, 79, 66,220,102,152, 58,149,225,243, 39,134,175, 95, 24,190,124,101,224, 22,196, 55, 9,129, 57,226,127,247,238, 93,
+ 32,217,214,214, 6, 36,213,212,212,200, 27,205,128, 71, 55, 30,101,249,249,249,240, 86, 60,114, 81,142,223,112, 69, 69, 69,248,
+232, 63, 28, 64, 58, 1, 64, 41, 68, 39, 0, 21, 36, 75,171,221,186,122,237,169,160, 32, 48, 72,243,242,242, 38, 77,154, 68,188,
+189,182, 63, 5,254,255,251,146,210, 86,173, 27, 18, 50,179,173, 13,126,127,203,204,219, 87,160, 61,227,195,135,119,239,222, 13,
+180, 26,156,193,191, 17, 44,253, 33, 93, 58, 96,224, 0, 91,217, 6, 6, 6,192,154, 0,168, 49, 51, 51,243,241,103, 44, 85,236,
+147, 39, 79,252,253,253,129, 94,219,182,109, 27,228,202, 76, 6,240,146, 30, 6,240, 61, 66,120,230,105,129,226,247,110, 94,104,
+ 40, 75, 18, 86, 93,125,126,117,252,165,199,140,143, 94,178, 48,252,103,250,249,235,247,187,255,194,217,201, 89,228, 45, 1,162,
+228, 94,147, 17, 5, 0, 2, 8,203, 16, 16,176, 26, 71,230,126,120,250,158,152, 18, 19,222, 3, 0, 15, 1,129, 34, 12,216,252,
+103,191,242,244,175, 0,168,209,135,255, 2,238,107, 79, 30,125, 99,231, 84,250,243, 71,134,147,135,139,149,141,241,247,111, 96,
+ 55, 27,216,225,253,252,247,215,183,191,127,126,254, 7,230,254,255,255, 9,197, 40,176, 26,128,212, 1,224, 41, 1,104,185,223,
+ 87,205,220, 91,205, 88,220,250,135,212,112, 33,166,149, 84,190, 26, 20, 50,157,161,130,144, 66, 31, 58,176,243,255, 13,176,222,
+ 98,249,255,126, 81,138, 96, 36,222, 59,233, 88, 95,158,254,203, 0, 26,253,232, 97,225,143,124,249,240, 76,151, 12,183,132,230,
+199,167, 79, 95, 60,120, 70,211, 40,215, 55, 83,250, 10,142,210,111,156,215,184,190,107,173,107,252, 13, 17,183,118,209, 62,190,
+138,112,219, 63,208,238,208,134, 13, 46, 2,199,247,244, 87, 51, 20,182,254,183,179,179,195,191,244, 83, 65, 70, 22,121,210,113,
+203, 22,208,220,239,178,101,192, 78,192,255, 9, 19, 24,155,154,190,128, 42, 6, 6, 6, 85,117,193,226, 66,124, 86, 67, 26,191,
+192, 14,193,202,149, 43,225,237, 98, 15, 15, 15,204, 82,146,248,106,158,160, 26, 96,137, 9, 44,178, 49, 43,128,190,190, 62,228,
+245,169,152,192,197,197, 5,126, 21, 59, 50, 0, 10,246,247,247,227,234, 16, 31,186,246,168,170,169, 36,185,190,172,242,215, 47,
+160,165,152, 94, 3,218,187,103,207, 30,172,101,162,157,150,220,188,185, 83,141,163,162, 26, 27, 27,177,214, 19, 64, 65,160,246,
+217,179,103, 19, 19, 56,192,210, 31, 50,197, 10,172, 38,103,192, 0, 80, 4, 88, 19, 60,198,182,198,252,247,239,223, 91,182,108,
+113,118,118,190,125,251,246,215,175, 95,129, 92, 96, 13,244,235,215, 47,200,181, 57,248, 75,240,159, 63,127,158, 93, 27,101, 23,
+212,180,243,224,221,251,207,153, 63,125,101, 2,118,252,159,126,229,204,171,168, 38,168, 23, 50,181,131,127, 44,104, 20,224,106,
+254, 3, 1, 64, 0, 49,161,101, 9, 32,112, 0,131,139, 48,112,239,244,195,143,223, 63, 10,155, 17,181,246, 25, 82,202,115,113,
+ 69, 3, 75,127,214,135,111,129,165, 54, 91,242, 91, 6, 66, 23,112,179,178, 49,255,253,207,240,228,235,135, 71, 31,223,189,254,
+244,254,227,143, 31,239,127,125,127,253,243,251,243, 31,223,158,254,248,242,238,247,207,247,255,126,255, 66, 29,192, 69,105,251,
+152, 98,159, 18, 72, 9,231,249, 15,236, 25, 51,176, 17,227,114, 50, 46,224,126,244,242,199,222,179,239,225, 69, 63,164,244,103,
+255,247, 16,136, 26,220, 89, 30, 1,155,190,120,193,218,251,255, 68,123,161, 13,231,251, 95,255, 62,185,251,244,230,209,171, 47,
+ 30,124,160,117, 82, 88, 54, 13, 84,193,127,122,245, 31, 88,250, 59, 36,179, 4,213,179, 66, 80,239,170, 40, 70, 6, 70,252,153,
+205,223,230, 96,124,145,139,224,137,189,192, 92,183,241,168, 3, 3,248,184,124,130, 54,170,105,168, 35, 85, 33, 12, 83,166, 48,
+220,185, 3,234, 7, 52, 54,254,135, 3, 65, 65, 65,156,131, 72,224,168,255, 11, 6,192, 38, 63,176,237,127, 11, 12,128, 69, 97,
+ 73, 73, 9,193,112,166, 4, 64,154,234,104,229, 41,176, 79, 0,244, 62,174, 86, 60,188, 5,138,214,252,135, 0,172,130,112,112,
+152,253, 3, 35, 19,207,156,170, 86,158, 45,123,128, 89, 6,126,166,116,186,170, 78,190,177, 21, 23, 23, 23,176,186,173,173,173,
+ 5,122, 28,243, 22,173,185, 79,111, 61,215,214,146,150,150, 6, 6, 23,102,141, 5,233,127, 16,223, 55,130, 47,176, 1, 54,249,
+ 25, 96,155, 39,176, 94, 36, 7,241,172,172,172, 44, 48, 34,128,157, 12, 21, 21, 21, 22, 22, 22, 72, 13,109, 97, 97, 65, 76, 83,
+ 93, 89,195,112,214, 46,129, 75,219,234,109, 45, 53,185, 57,152,184,185,254,114,178,255,244,244, 39,234,110, 3, 96,121, 5,113,
+ 39,158,177,160, 81,128, 7, 0, 4, 16, 19,214, 48, 5,130,124, 48, 0,114,155, 51,154,127,191,250,195,201,201, 65,100,104, 66,
+234,124, 46,247, 59,255,153,153,106,215,125, 99, 32,226, 2,110, 77, 43,171, 63, 60, 92,239,255,255,189,246,245,253,149,143,111,
+175,126,122,115,245,211,187,107, 95,223,221,249,246,254,237,207, 31, 95,254,252,121,246,237, 43,158, 27,248, 2,221, 24,129, 45,
+125, 32,250,207,192,252,159,145, 41, 45,130, 49, 53,130, 45, 57, 92, 84, 89, 89,252, 31, 3, 43, 3, 3, 35, 49,165, 63,169, 23,
+112, 3, 21,131, 6,250, 25, 24,206,116,128,250, 10, 59, 75, 65, 43,148,128, 13,127,230,255, 95,127, 50,201, 3,217,239,222,189,
+ 35,230, 6, 87, 96,224, 0,243,243,178, 47, 95,191,255, 98,138, 95, 49,231, 21, 7, 39,144, 65,187,248, 46, 9, 91,126,252, 93,
+235,178,197,208,166, 62,176,249,111, 33, 88, 3, 97,183,102,111,153,129,123, 18, 24, 88, 40,244,215, 48, 36, 20, 57, 11,156,216,
+227,216,101,207,228,205,112,224,192, 1, 34,147,132,188,188, 60,156,237,228,196, 32, 32, 0,236, 96, 49,152,235,243,114,176, 49,
+ 51, 51, 65, 99,199,196,212, 20,103, 26,101, 98,130,140,248, 3,139,126, 53, 36,208, 4, 6,207,158, 61, 35, 88,196, 32, 15,226,
+195, 65, 70, 6, 81, 45, 68, 96, 75, 31,237, 70, 45, 96, 33,142,191,249,143, 60,247, 0,111,192, 66,216,255,112,183, 99,128,224,
+ 23, 35,227,191,111, 63, 89, 37,228,211, 91, 90, 18,184, 5, 4, 14, 28,135, 14, 13,197, 36, 52,244,204,185,221,183,188, 78,215,
+ 41, 76, 80,113,247,166, 77,152, 13,148,128,140,116,109, 29, 29,200, 4,245, 95, 24,128, 15,160, 33,115,177, 14,248, 0, 11,119,
+200, 28, 47,100,208, 31, 94,214, 3,155,252,144,198, 53,176, 38, 0,178,113,249,148,149,149, 53, 32, 32,224,227,199,143,192,154,
+137,147,147, 83, 84, 84, 84, 64, 64, 0,255, 45,146,112,189,236,236,236,193, 25,147, 22,156, 54,121,240,248,147, 56, 63,179,165,
+ 58,163,158,226,127,110, 62,190,209,210,153,214,205,127, 32, 0, 8, 32, 22,252, 29,100,120,163, 88,198, 94,138,200,182, 3,252,
+ 2,110,182,228,213, 12,196, 93,192,253, 69, 95,229,219,173, 91,223,254,252,252,244,245,219,221,223,191, 89,255,129,134,111, 62,
+254,254,241, 15,156,123,182,189,188,255,245,207,111,188, 99, 50,140, 69,173,136,196, 13, 30, 8,250,247,151,225,231,245, 59,159,
+231,173,252, 68,100,233,207, 64,226, 5,220, 32,247,116,134,177, 58, 79, 3, 50,223,190,133, 78,219,178,253,123,254,139, 73, 50,
+ 91,247,214,243,231,160, 98, 2,127,249,152,177,110, 22,188,106, 92, 13,187,175,118,197,229, 99, 52,221,195,165,234,252,137, 97,
+213,255,163,123,174, 2,217, 86,218,160, 93,181,101, 5,245,199,174,106,247,172,138,170,154,234,141,223,193,192,182,191,144, 16,
+100, 84,235, 0,184,134,115,249,255,127, 53,184, 96,253,191,122, 53,190, 11,114, 67,130,130,119,239,220,197, 0, 94,248,239,232,
+200,248,230, 49,255,215,247, 28,223, 63,177,173, 88,200,152,159,255,255,225,171,207,230,150, 22,122,218, 58,248,231, 0, 32,131,
+254,192,116,197, 0,190, 68, 16, 34,254, 10, 12,136, 25,231, 1,198, 44,176, 34, 65, 46,127,129, 77, 70, 98,118,129, 65, 6,205,
+225, 51, 1,144,222, 0,254,230, 63, 3,210,170, 7,228,245, 60,248,151, 66, 64,234,170, 63,159, 63,179,138, 8, 49,115,241,104,
+ 7,135, 52,185,185, 86, 65,150,114, 26, 26,253,253,254,131, 85, 88, 92,215,194, 65, 65, 70,113,210,245,227, 58, 58, 58,207, 79,
+163,220, 72,154, 1, 74,186,160, 74, 46, 11, 88,118,131, 87,139,254, 65, 42,241,129,141,114,160, 8,124,129,169, 55,106, 89, 0,
+ 44,217,129,126,132,140,243, 0, 67, 12, 50,212,131, 44,139,167,244,135, 56, 27, 88,220, 3,219,251, 55,110,220, 56,119,238, 28,
+ 48,178,184,185,185,191,125,251, 70,228, 96,189,184,184,184,191,191,255,137, 35,167, 38,172,222,205,199,200,166, 46,254,243,206,
+ 27,110, 27,245,223,240, 26, 2,215,128, 62, 80, 28,158, 97, 71,135,128,200, 3, 0, 1,196, 66,204, 56, 41, 48, 40,159, 28,124,
+198, 16, 69, 84,233, 15, 47,209,208,204,193, 95, 7, 72,137,137, 95,254,241,224, 35,211,191, 23, 63,190, 48,252,254,253, 23, 24,
+235, 12, 12,215,191,124,120,250,237, 19,228, 2,110,188, 21,192,127, 96,171,127,214, 10,104, 83,235,198, 93, 6, 13,229, 63,204,
+ 12, 95, 73, 42,253, 25, 72,191,128, 27,188,102, 52, 11,216, 7, 0, 54,246,129,253,223, 78, 87,134,242,221,118, 5, 58,199, 32,
+141, 68,130,205,127,228,142, 17, 50, 27, 82,198,225,111, 52, 49,212, 51,154,204,186,135, 57, 87, 1,221, 9,188, 7,223,229, 80,
+109,217, 91,170,167,250, 30, 95,245,223, 82,232,170,181,139,246,145,221, 87, 79,188,111, 97,100, 96,108,205,222, 12, 44, 90,241,
+216, 11, 44,253,129, 89, 46, 48, 48,112,246,236, 79,144, 44,201, 8, 91,143, 18, 26,138,136,238,205,135, 45, 49,245,102,231,229,
+ 78,157, 52, 25,216,252,255,245, 66,246,241, 7,246,127,160,190, 19,131,228, 87,241,210,180,207,187, 79,168,107, 89,226,171,243,
+ 32, 69, 63,228,150,215, 23, 47, 94, 64,250, 4, 47, 95,190,100, 32,101,174, 15, 50,153,137, 54,122, 62, 3, 36,152,142,103, 61,
+ 40, 60, 70,224, 51, 1,192,222, 0, 49,205,127,228, 66,138,120,197,192, 38,243,139,135, 15, 20,149, 85,255,253,249,201,248,231,
+ 47, 11, 47, 31,175,145, 9,143,161,233,191,175,127,254,126,251,249,255,207, 95,134,191,255,202,167,247,132, 71,133, 99, 54,174,
+255,172, 16,196, 99, 50,154,172,255,102,116, 5,192, 34, 30, 50,226,207,128,116, 15, 48,114, 29,128,223,131,234,234,234,147, 39,
+ 79,126,253,250,181,171,171,235,153, 51,103,128,165, 63, 80, 11,193, 59, 83, 33,122, 45,204,205, 51,146, 51,238, 63,185, 31,155,
+156,113,114,247,194,231,159,223,153,216,187,138,203,168,161, 39,108,108, 25, 1, 94, 64, 97,238,255, 26,221, 8, 70, 12, 0, 8,
+ 32, 22, 34, 51, 15,145,109,127,228, 18,141,164, 11,184,127,218, 27,171, 49, 24, 63,157,185,128,129,147,227,253,255, 63,191,254,
+252,249,247,255,159, 48, 63,255,147,175, 31, 9,222,137,138,182,208, 19, 54, 7,240,151,164,210,159,129,244, 83, 28, 32,251, 6,
+ 76, 76, 64,251,126,133,132,132,158, 63,127, 94,160,243, 28, 94,250, 19, 52, 10,235, 21,181, 68, 1,240,118, 95,228,221,118,104,
+ 82,248,129,176,222,211, 25, 51,103,220,218,195,215,187, 58,242,248, 42, 96,123,144,177, 36,108, 57,168,103,128,183,244,135, 68,
+ 28,184,160,255, 4,206,123, 12,104, 37,219,130,222,189, 64,146, 91, 14,152, 15,177, 76, 18, 2, 27,248, 64, 19, 68,196,118,253,
+253,124,134,145,153,225,219, 15, 78,198,207,127, 88,152, 88,196,149, 53,221,228,188, 88,254,227,116, 54,176, 64, 81, 81, 81,161,
+ 60,125, 66,134,137,129,117, 0,124,121, 12,188, 31, 64,252, 76, 0,164, 24, 34,216,252, 39, 27, 56, 57, 57,101,175,154,213,244,
+249,131,129,189, 13,147,184, 32,200,186,223,255, 65,199, 57, 48,176, 50, 50,179, 48,178, 49,207,158,209,199,231,108,162,172,172,
+ 76,245, 61, 80,144,161,158,233,211,167, 3, 73,125,125,125,146,244, 2,107,232,189,123,247, 50, 51, 51,219,218,218, 2,131, 23,
+109,232, 31,216, 33, 0, 22,244,104,193, 14, 7,192, 30,195,162, 5, 11,217,152,217, 67, 34, 67,128,106,108,188, 82, 80,234,173,
+ 63,127, 32,122, 71, 87,245,208, 98,252, 7, 8, 0, 2,136,133, 90,214, 80,229, 2,110,199,244,132,123,119,239,157,219,190,243,
+235,207, 95,192, 14,172,178,153,145,135, 92, 36,193,146,148,236,169, 30, 72, 9, 78,222, 5,220,112, 19, 32,107, 70,225,237,125,
+ 32,131, 24,247, 64,236, 37,207,217, 97,215, 67,193,190,198,226,206, 48, 66,189, 7, 56, 80,115,249, 52,211, 5,238, 78, 98,207,
+129, 0,151,242,140,241, 69,208,243,185, 32,185, 18, 40, 8, 44,247,185,229, 66, 9,106,127,249,220,237, 37,131,219, 63,166,199,
+252,124, 31, 25,132, 24, 64,199, 63,252, 98, 96, 33, 49,105, 81, 2, 32,117, 0, 25, 26,225, 51, 1, 36, 53,255,241,180, 94,177,
+ 2, 96,201, 46,145,151, 55, 97,215,174,123,205, 27, 66, 89,133, 5,192, 7,186,125,255,246, 39,191,164,146,153, 75,104,219,194,
+153, 23, 69, 24,221, 72, 57,204,231,239,223, 63,196,204,129, 17, 57,212,131,203,119,183,110,221, 2,146, 26, 26, 26,111,223,190,
+101, 97, 97, 1,150,218,194,194,194, 12,176,243,233,216,216,216, 32,157, 54,172,122, 79,157, 58,245,239, 15,163,149,181, 62,176,
+135, 7, 84,249,235,215, 47, 25, 25, 25,136,212,199,143, 31,129, 29, 29,160, 33,236,236,236,120,218,157,144,186, 1,153, 49, 58,
+ 4, 68, 60, 0, 8, 32, 22, 26,153, 75,126,161,172,172,164,148,147, 73, 55,255,147,125, 1, 55,102, 53, 64,134,189,228, 89,135,
+199,181,180, 62, 3, 14,220,192,103, 0, 31,198,131, 44, 24, 74,146, 33, 76,255,100, 63,127,144, 29,168, 20, 79,222,209, 96,192,
+ 86, 63,193, 17,124,172,128, 36, 93,192, 82,143,139,139, 43, 48, 48, 16,114,164,243, 35,216,145,206, 71,247,238,134, 28,233,236,
+108,225,140, 75,239,236,247,237,169,130,149, 40, 66,120, 79, 15,197, 85, 7,144,225, 71, 83, 83, 83,200,146,255,127,255,254, 1,
+ 75,112, 32,227,245,235,215, 64,146,135, 7,180,202, 25, 34,194,202,202,138,213,191, 62, 62, 62, 16, 5, 64,189, 63,126,128,247,
+ 81,130,151,117, 65, 86,133, 65, 68,128, 21, 3,214, 30,192,232, 34, 31, 98, 0,254, 91,223, 1, 2,104,244, 82,248, 81, 48, 10,
+ 70,193, 40, 24,161, 0, 32,128, 70,111, 4, 27, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130,
+ 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,136,101, 52, 8,134, 10, 48,196,113,185, 15, 30,112,126,
+116,130,103, 20,140,130, 81,128, 27, 0, 4, 16, 13, 47,133,167,131, 94, 54,182, 93,156,236, 47, 88,217, 62,252,251, 7, 90,146,
+200,204,204,196,196,200, 12, 34, 65,235,134,153,254, 51,178,128, 40,134, 63,155,183,178,254,255,255, 95, 79, 47, 97, 48,184,153,
+ 18,189, 50,164, 44,123,120,130,186, 12,110,244, 18,237, 81,189,163,122, 71,166, 94, 60, 0, 32,128,134,118, 15,224,208,145, 59,
+102, 38,191, 5, 5, 24,222,189,103, 60,127,145,131,133,137,197,203,253,239,238,253,162,192, 98,159,145,137,137,131,151,193,201,
+236, 3, 3, 3,139,141,229,255, 83,103, 8,248,116,255, 49,208,161,246,172,255,127,155,219, 58,125,124,249,232,242,237,135,127,
+191,253,160,207,205,186, 35, 13, 92,191,121,238,215,143,111,188,188, 82,180,190, 60,153,138, 64, 81, 81, 17,114,148, 63,228, 68,
+101,146,244, 34,159,132, 72,222, 90,210, 81, 48, 10,104, 4, 0, 2, 8,189, 88, 92,184,104, 46,126, 13,241,113,201,184,164, 40,
209, 75, 54, 56,117,134,213,195,245,239,197, 75,156,108,172, 44, 44,204, 44,172,172,255,217,153,127, 51,176,240,178, 48,124, 55,
211,254,195,193,198,254,159,129, 65, 82,156,193,207,235,223,205,123,248, 74,255, 59,215,111,169,104, 41, 75, 73, 11, 60,121,120,
131,149, 83, 68, 75, 67,109,251,198,141,123,246,236,161,117, 29, 64,231, 11,229, 7, 22, 92,186,184, 71, 65,230,167,174,242,255,
-127,255,254,126,252,248,228,198,149, 51, 95,126, 74,154, 24,219, 18,169,253,227,235, 57,204,204,208, 61,107,119, 38, 84, 24, 52,
-253, 34,222,106,228, 82,123,237,218,181, 37, 37,164,237, 53, 1,150,254, 5, 5, 5,192, 14, 37,158,195,156,241, 0, 50, 47,148,
- 31, 25, 0,255, 81,193, 12,224,128,155,133,237, 20,107,248,165,240, 48, 85,255, 97,251, 19, 17,161, 61,194, 47,133,135, 0,228,
-107, 32,209,214,253, 3, 4, 16,253,122, 0, 76, 12,212,223,204,237,229,246,251, 63, 3, 51, 11, 51,171,149, 57,163,152, 40, 19,
- 11, 11, 19, 59, 43,179,134, 26,211,195,199,127,204,140,153,132,133, 56,182,239, 3,157, 41,200,252,255,251,255,255,255, 36,164,
-113,150,254,151,206,156, 81,144,146,185,116,252,196,201, 95,191,223,191,121,207,198,206,171,105,104,173,111,237,182,127, 51,104,
-135, 48,141,234, 0,180, 11,229, 33,103, 49,166,164,164, 12,254,106,224,194,249, 61,236, 44,239, 88,152,126,253,248,241,247,227,
- 87, 78, 27, 59,194, 39,247, 94,187,113,142,151,227,173,147, 53,187,130,188, 50, 31, 31,255,239, 63,127, 94,191,126, 35,254,232,
-241,237,187,247,142, 29,125,103,101,237, 79,140,189,192,210,255,239,157, 86,178,157, 77,246,217, 27,144,219, 93,224,103, 1,225,
-185,209,101,176, 1, 96, 11, 6, 88,219,161, 28,127, 68,195,210,240, 63, 35, 3, 35, 25, 85,220,255, 71,235, 24, 79,166,192, 10,
-113, 6,216,101,107, 8,147, 82,102,124, 53, 11,159,140,181, 90,221,190,125, 59,132,237,225,225,177, 99,199, 14,172,236,209,210,
- 31,147, 11,175, 6, 0, 2, 8,123, 5,112,244,200, 73,107, 27,115,234,186,227, 31,161, 19,249,137,188,161, 9,165, 82, 97, 97,
-126,255,142, 69, 66,140, 85, 66,140,237,203, 23, 86, 14, 86,150,191, 44,236, 70,186,140, 6,122,204, 76,140,172,160, 77,228,172,
-108,172, 76, 63, 25, 57,216,254,124,195, 89,250, 31,217,183, 87, 81, 82,244,202,197, 43,213,205, 13,112,241,214,198, 54, 38,102,
- 70, 35, 99,163,237, 59,246, 18,172, 0,254,253,251, 7, 44,196,239,220,185,195,201,201,169,171,171, 75,240,236, 26, 6,140, 11,
-229,225,183,173,206,153, 51,103,160,234,128,243,231,207, 27, 26, 26,226, 87,115,229,218,185,255, 63, 31,200, 75,254,224,231, 99,
-103, 98,226,250,254,253,207,219,119,223, 15,238,153,192,193,103,100,110,102,135, 71, 35, 7,243,107, 53,197,255,218,218,154,207,
- 95,188, 63,123,254,220,151, 47, 95,249,249,121,149,148,228,153,152, 89,255,254,125,116,254,194, 17, 67, 3,155, 65,155,133,128,
-205,127,248,237, 46,192,126, 0,176, 14, 32,242, 90, 21,140,134, 44,189,123, 0,144,164,187,102,205, 26,242,238,213, 34, 30,192,
- 27,227, 51,103,206, 32,213, 30, 38,249, 96,136,222, 83,237, 60,104,141, 68, 9, 1, 38,105, 33,166,193, 19,158, 67, 23,192, 75,
-124,180,250, 0, 32,128,112,246, 0,128,117, 0,144, 36,181, 26, 56,146,119, 27,171,184,205, 36, 85,226,115, 8,164, 7, 71, 76,
- 53,176,231,128, 24, 43, 11,171,172,212,151,207,159, 89,207, 94,145, 5, 93, 3,201, 8, 58, 12, 78, 91,245,155,186, 42,232,170,
- 0, 54, 86,118, 54,102, 70, 99,189, 95, 66,130,255, 14,157,198,110,136,166,162,248,195,187,175,144, 75,127, 32,168,174,175,106,
-107,238,146,180,212, 19, 20,224,197,239,134,239,223,191, 3, 75,132,135, 15, 31, 66,184,192,166,135,151,151,151,191, 63,129, 38,
- 45,218,141,146,200,160,183,183,183,184,184,152,206,219,220,129,165, 63,252, 74, 13, 60,224,231,215,167,138,210,223, 69,132,185,
-101,164, 37,184,184,185, 30, 62,124,250,247,239, 63,105, 41,222,171,215,143, 95,224,228, 54,208,197,126,241,195,229,203, 71,244,
-212,126,201,201, 41, 94,187,254,240,236,217,235,175,223,124, 6,198,179,160, 32,231,183,111, 95, 12, 13,181, 63,124,248,248,244,
-236,249,139,151, 57,245,117,141, 7, 97,206, 65,187,220,145,224,181,142,200, 35, 27,104, 71, 25, 3,217,240,225, 14, 50,198,145,
-154,155,155,125,125,125, 73, 61,173, 1, 88, 7, 0,237, 93,181,106, 21,174,227,216, 24,192,103, 41,163,245, 12, 32, 87, 66, 2,
-197,209,218, 4,192,130, 30,243,236, 0,248,241, 74, 64,255,166,167,103,144,212,201, 64,214,107, 86,249,229,116, 59, 15,188,232,
- 31, 45,181,169,213,252, 71,142, 50,180,232, 3, 8, 32, 2,161, 12,172, 6, 32, 53, 1,145, 0,107, 65, 79,100,233, 15, 1, 7,
- 15, 30,124, 10, 6,196,156,229,196,252,255, 59, 11,227, 15, 54, 86,214,243, 87, 68,153, 89, 88,120,217,190,241,113,124,231,229,
-255,251,244, 41, 47, 59, 27, 7, 59, 59,123,168,223, 31, 63, 79, 38,105, 41,118, 46, 78,236,119, 83,124,251,240,248,197,187, 47,
-197,117,117,152, 82, 31, 62,190,123,255,250, 5,193,171,196, 86,175, 94, 13, 47,253, 33, 96,219,182,109,215,175, 95,199,223,252,
- 71, 62,255, 25,210,252,255, 8, 3, 64,118,125,125, 61,217, 71,197,145, 93,250, 19, 84, 6,108,254,115,176, 60,231,228,100,229,
- 96,103, 83, 84, 84, 48, 49, 51, 19, 20, 20,100, 97, 97,102, 99, 99, 22, 18,228,120,250,248, 1, 46,141, 44,255,159,242,242,112,
-126,251,254,231,202,149,219,207, 94,124,124,244,228,211,173,123,191,158,191,248,252,250,245,135,219,183,238,169, 40, 43, 75, 75,
-241,189,125,253,104,112,102, 33,200,232, 63,178, 8,176, 55,128,114,183, 59,158,182, 45,120, 57, 26,214, 11,229,201,235, 64, 0,
- 11,101,120,103,145, 72,176,119,239, 94, 96, 18, 37,120, 53, 35,242,229,239,200, 23, 2, 35, 91,135,203,106,136,177,144,187,195,
-200,235, 21,173, 42,228, 70,110,245, 67, 74,127, 96,219, 95, 10,212,252,199, 23, 92, 30, 30, 30,158,158,158,144,113, 30, 8, 3,
-194,246,128,129,209, 58, 0, 63, 0, 8, 32,162,230, 0,200,235, 13,144, 13,110,223, 6,117, 35,128,117,128,180,180, 52,254, 54,
- 41, 11, 11, 11, 43, 51, 43, 43, 43,163,157, 53,195,183,175, 63,239,223,101, 3,118, 8, 88,254,178, 88,152,255, 7,214, 10,204,
-204, 76, 12,255, 25,223,189,103, 56,125,142, 5,116, 19, 8,182,202,238,220,249,187, 95,190, 96,153, 75,236,168,175,103,103,231,
-248,254,253,227,223,127,127,240,187,246,220,185,115,152,130,103,207,158,213,212,212, 36,178,249,143,220,166,219,188,121, 51, 92,
- 13,141, 58, 1,104, 67, 61,240,210,159, 96, 6,126,255,238,149, 8, 47,227,159,191,255,126,253,254,243,250,205, 59, 86, 54,142,
-159, 63,127,255,254,243,247,207,159,127,127,254,254,255,240,254, 13, 46,141,108,172, 95, 57, 56,101,222,190,253,248,233,243,183,
-119,239,191,243, 9,235, 91,233,233,157, 58,186, 67,234,215,159,143,159, 62,170,171, 43,179,179,177,124,253,252,110,112, 54,255,
-129, 37, 20,218,101,138,192, 30, 0,145, 51, 1,192,154, 3,243, 14, 72,248,177,210,184, 0,252,114,133,140, 12, 33,103,103,196,
-233,111,192, 28, 1, 36, 55,109,218,244,230,205, 27, 34,231,165,246,236,217, 3, 41,253, 33,234,215,174, 93,139,171, 20, 70,238,
-255, 97, 94, 8, 12, 17,135, 92, 11,140,213, 4,200, 49,162, 64, 18,210,111,192,234, 65, 92,233, 25,232,188, 16,203, 61, 43, 25,
- 24,194,251,191,154, 86,126,193,170,215, 44, 28,187, 7,145,199,250,113,205, 7,140,150,242,200, 35, 63,104, 61, 0,128, 0,162,
-126, 63, 11,173,189, 79, 82,243, 31,210,254,133, 87, 3,192,204,131,191, 31,192,204,204, 98, 97,246,143,153,137,229,244, 25,142,
-155,183, 57,188,221, 25,124, 60, 25,124, 61, 24, 37,197,217, 56,216,216,129,136,147,131, 93, 90, 18,200,224, 0,178,177,154, 80,
- 91, 93,211,217,222,132,153,109,148, 21,229,249, 5,184, 57,254,253,250,242,237, 55, 45,226,227, 8, 24,192, 11,125, 56, 0,114,
-223,190,125, 11,236,233,211,174,177,143,220,172,131,112, 33, 61,113,130, 99, 11,127,255, 50,124,253,246,251,235,215, 95,159, 62,
-253,124,249,242,253,179,103,111, 62,127,254,249,229,203,111, 96, 13,250,245,235,239,143, 31, 62,226, 28, 56,250,249,231,199,143,
-191,191,127,255,226,229,101,147,149,230,227,226, 6, 53,247,148,148, 21,100,164,248,248,249, 56,254,255,255,251,251,207,191,159,
- 63,191, 14,206,230,127, 81, 81, 17,214,146,157, 96, 39, 0,243, 46, 73, 8, 0, 10,238, 33,238,212,110,240,136, 10, 2, 64, 10,
- 95, 96, 53, 0, 44,211,137,233, 31, 3,219,254,107,214,172,129,151,254, 64, 50, 36, 36, 4, 87,241, 13, 52, 28,243, 74, 72, 72,
-155, 0, 46, 14,116, 15,161,195,180,255,163, 13,228, 34, 15,127,225,210, 35, 34, 34,194, 8,107,231,147,170,119, 20,144, 84,250,
- 51, 96,204, 1, 0, 4, 16, 81, 61, 0,186,181,253, 97, 5,205, 95,200,165,210,132, 29,102,246, 79, 76,148,253,211, 39, 22,118,
-150, 63,236,108,204, 7, 78,178,121, 59,178, 2,219,254,159, 62,177, 30, 61,195,205,199, 1,186, 74,194,195,229,151,191,247,127,
- 38,166,255, 11,214, 18,101, 59, 48,115, 50,115,113,188, 99, 21,225,250,253,228,206,211,255, 78, 14,118,248,213, 3, 91,211,199,
-142, 29, 67, 19, 36,120, 13, 50,228, 82,239, 5, 11, 22, 36, 36, 36, 64, 68,224,247, 74, 2, 69,240, 95,115, 72, 9,128,180,253,
- 33,205, 52,248, 10, 57,204,161, 94,172, 64, 80, 72,244,217,253, 43,192,112,254,245,251,223,143,159, 79, 30, 63,121,251,238,253,
-167,119,239,190,189,125,247, 29,136, 4,132, 20,112,105,124,249,230,255,139,151,111, 52, 53,149, 63,188,127,207,202,194,244,233,
-243,147,175, 31,254,105,169,124, 21, 23, 21,229,226,226, 98,103,231,124,254,226, 51, 35,179,224,224,204, 60, 88,175,113,135,204,
- 4,224,215, 8,233, 31,192,239,146,132,215, 28, 12,164, 92, 41, 19, 22, 22, 6,111, 17, 67,110,173, 0,198, 90,112,112, 48,176,
-250,193,191,217, 7,173,237, 15, 1,200,253, 9,100,128,235, 74, 72,136, 56, 48,181, 64,238, 94,135,136, 63,198,102, 47, 80, 77,
- 86, 86, 38,228,118, 29,112,181,241, 31, 82,164, 3,117, 65,220,143,167,230, 0,234,157,234, 40, 24, 62,225, 27,218, 88, 16, 80,
- 4,162, 55,201,145,117,180, 16,167, 4,164,149,119,192,217,179, 58, 43,128,117, 0,188, 31, 0, 16, 64, 44,180, 40,250,129,173,
-126,200,108, 48, 73,205,127,164,118, 61, 51,242, 24, 31,158,123,196, 68, 68,152,153, 24,153, 69, 69,152, 85,149,255, 63,123,198,
-194,196,204,200,202,194,194,202,194,122,233, 50,183, 16, 55, 43,208, 28,107,243,191,156,156,236,255,254,253,103,248,255,151,200,
-210,159, 71, 92,246,229,151,255, 95,239, 28, 96, 97,100, 46,173,175, 38, 38,139, 62, 6, 3,100, 55,227, 25,255, 97, 0,175,247,
-135, 20,247,144,210, 31,216,222, 7,214, 4, 16,169, 79,159, 62, 1, 75,255, 45, 91,182, 16,115,161, 60,121, 0,114,241, 19, 48,
- 72, 33, 83,148,196,180,253, 33, 64, 95,215,248,250,149,179,255,159,126,250,246,253,247,123,246, 31,255, 25,222,255,248,241, 7,
-216, 27,120,245,230,219,179,231, 95,108, 29,229,113,105,252,254, 75,228,222,253,215, 74,138,114,138,138, 50,111,223,190, 17, 20,
-248,171,170,202, 47, 38,170,196,193,201,249,225,195,151,179,231,110, 60,121,250, 73, 66, 70,123,240,100,152,255,224,219, 46, 33,
- 5, 47,188,252,197,186,150, 31,203,104, 5,210, 10, 70, 96, 39, 0,126,151, 36, 4,244,245,245,237,218,181, 11,151, 94, 72,140,
-164,167, 11,194,172,251,143, 92,100, 67, 42, 0, 96, 43, 30,207,248, 15,210,240,209, 94,146,110, 55,194,117, 37, 36, 68, 28, 82,
-124,227, 42,196, 33, 75,140,166, 77,155, 14,153,225, 48, 48,208,135, 15,220,195, 90,244, 56,111, 26,128,232,101, 10,123, 15,209,
- 27,234,164, 0, 15,152,176,254,107, 12, 12, 12,248, 91,255,192,188, 6, 95,224,228,233,233, 9,143,157,209,145, 31, 34, 1, 64,
- 0,177, 12,146, 86, 63, 4, 68, 68, 68,144,164, 30,216,192,103,102, 6, 33, 77, 53, 38, 67,221,191,236,108, 28,160, 10,128,149,
-213,202,156,129,157,157,129,149,153, 93, 68,132,131,153,249,235,223,191,255,254,253, 35,106, 36,231,219,187, 23, 28, 50, 26,247,
-247, 44, 17,101, 97,138,173,174, 34, 70, 11, 39, 39,103, 85, 85, 21, 73,203, 64, 33,183,207,231,228,228, 64,184,144,246, 62,176,
-232,255,246,237, 91, 82, 82, 18,144, 61,109,218, 52,218,173, 2,130, 92,254, 7,191, 67,149,164, 85, 37, 50,242,234,103, 78,236,
- 20, 19, 1, 54,220, 89,192, 99, 59,127, 63,125,254,245,238,253,119, 89, 69,109, 27, 43,123, 92,186,188,188,130,119,109,159,127,
-226,212, 85, 91,107,125,121,121,249,223,191,126, 24, 26,232,113,243,243, 63,188,247,232,233,179, 15, 71,143, 95,127,255,153, 63,
-208,210,126,240,228,138,204, 12,200, 0, 11, 99, 38,176, 64, 4, 23,232,255,144,202,125, 38, 38, 70, 60, 23,172,131, 46,103,255,
- 15, 47, 0, 25,129, 41, 15,222, 9, 0, 50,128,165,149,135,135, 59,172,146, 97,240,142,174,197, 28,235,192, 85,106, 3,101,241,
-151,254,200, 0,168, 18, 87,123, 31, 79,170,192,188, 18, 18, 46,142,231,178, 48,120,205, 1, 44,127,193,205,127, 70,228,250, 3,
-191,189,200,122, 87, 21,242,128,194,133, 67, 28, 34,181,170,240, 17,164, 50,216,121,241, 55,174, 0, 65, 30,247, 31,157, 3, 32,
- 3, 0, 4, 16,246, 10,192,202,218,140,194,113, 55,242,218,254,240,104, 35, 18,188,123,207, 40, 41,206, 4, 57,248, 97,215, 94,
-208, 64, 63, 59, 59, 7, 59, 27,187,175, 39, 35,144,226,228, 96,124,247,150,249,212, 89,222,191,255,254,202,202, 16, 30, 98, 6,
- 54,255, 63,124,251,254,254,204, 54, 85, 89,214, 43, 79, 73, 24,146, 6,214, 67,102, 96, 64,188, 22,240,133,242,157,144,209, 30,
- 96,111,192,220,220, 28,216, 90,244,247,247, 7,178, 99, 99, 99,105,215,252,135, 15, 4, 65, 90,115,196,140,252,160, 68, 43,184,
-148,191,117,227,218,179,123, 15,129,229,224,223,191,255, 57, 56,133,212, 52,117, 2, 3, 8, 92, 10, 38, 38,173,119,226,212, 14,
- 96,143, 65, 87, 71, 73, 90, 74,228,209,227,151,239, 47,223,189,121,235,209,222,125,151, 30, 62,253,159,146,154, 75,164, 3,238,
-111,249, 76,182,175, 31, 60,120, 64,164,202,127, 43, 5,137,151,245,221,132, 87,239,221,249,240, 78, 0,104,212,232,222, 2,100,
- 5,104,122,177,118, 8,144,203, 74,146,252, 75,106, 22,198,117, 37, 36, 49, 87, 69,194, 11,122, 52,101,196, 52, 47,254, 61, 92,
-187,102, 66, 28,168,251,226, 36, 7, 47,253, 65, 92, 47, 83,240,104,233, 5, 92, 21,192,232, 62, 0, 34,193,172,206, 10,228, 81,
- 32,100, 0, 16, 64, 44, 84, 73, 58, 84, 1,100,180,121,207,156, 99,231, 96, 99,243,245, 2,214, 0,140,102, 38,127, 46, 95,225,
-100, 2, 95, 33,253,225, 3,147,148, 4, 51, 19, 35,219,197,203,108, 28,236, 12,191,126,255,122,248,136,147, 96,233,127,247,214,
-121,115,103, 31, 22, 17,243,187,183, 78,177,188, 88, 83, 86, 90,217,213,221, 78, 35,207, 34, 95, 40,175,163,163,243,254,253,123,
- 32, 27, 72,230,229,229,209,103, 23, 24,169, 69, 63,114, 29, 0, 68, 23, 46,159,125,249,226, 37, 55, 55, 55,158,134, 63, 74, 65,
-160,103, 12, 68, 75,151,204,188,118,243,164,164, 56, 15, 7, 7,235,151, 47,191,158, 62,255,196,200, 34,155,146, 26, 71,164,213,
- 60, 66, 69,100,251, 23,178,156,127, 0,192,185, 98, 6,229, 68,196, 66,210,179, 36,120,129,140,108,152,145, 33, 4,171, 54,200,
- 41, 28,113,149,215, 4,203,113,242,238,146,132,123, 51,212,146, 29,228,224,239,207, 65,104, 20, 80, 15,248,196,212, 66,102,125,
-129,117, 0,178, 32,156, 13, 16, 64,232, 21, 0, 37,199,245,208,226,168, 31,194,169,135,129,241,253,123, 70, 46, 9, 70, 97, 33,
- 70, 19,163,223, 28,108,204,236,108,191,133,133, 56,192,121,128,209,194,228,239,169,115,172,160, 46, 2,222,188, 4, 44,253,181,
-213,249,138,243,155,190,179,201,172,219,243, 84, 89, 13,212,150,231, 57,189,165,184,164,178,183,135,134,117, 0,228, 66,121, 96,
-147, 31,222, 45, 24, 42,215,156,130,246,124,233,146,172, 43, 58, 38,253,200,177,131,175,223,190,254,254,226, 27, 7,135,176,140,
-162, 30,145,245, 7, 3,101, 23,192, 82, 37, 84,255,255,255,199, 64,222,113, 38,247, 22, 64,151, 3,221, 91, 72,235,120, 33,105,
-216,103,144, 0, 55,159,112,130,109,121, 92,157,235,209, 57, 0,226,235, 0,204,210, 31, 8, 0, 2,104,200,223, 7,240,159, 1,
-180,194,135,145, 9, 24,243,255,133, 4,254, 31, 60,194,194, 1,218,254,203,226,231, 5, 76, 12,255, 4,133,255,252,249,203,248,
-239,223, 95,112,238,197, 9,244, 20,190,120, 7,135,126, 97, 81, 21,227,225,142, 10, 20, 90,182,254, 50,164, 14,248,253,119, 29,
-173,221, 79,198,133,242, 67, 26, 16, 95,226, 15,100,151,249,125, 71,154, 96, 5,138,208,106, 33,242,245, 2, 91,253,103,139, 24,
- 70, 1, 14, 16,146, 61,101, 0,235,245, 17, 82, 7,224,146, 2, 8,160,209, 75,225,135, 12, 24,189, 16,102, 20,140,130, 81, 64,
- 93, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 39, 46,141,130, 81, 48, 10, 70,193, 8, 5, 0, 1,
- 52, 90, 1,140,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52,240,151,194,
-219,155, 73,227, 82,249,245,221, 11, 8,131, 91, 72, 2,194, 56,120,234, 41,178,130,159,162,226,184,244,238,238,135,238,179,117,
- 45,132,174, 49, 96,127,253,146, 72,123, 49, 1,241,246, 98, 2, 52,123, 77, 12,165,112,169,124,115,255, 42,132, 33,162, 8, 61,
- 23,225,204,249,103,212,242,175,199,110,236, 7,208,243, 75, 73,197,194,142, 2,158, 34, 14, 53,127,135,107, 26,181,226, 23, 89,
-239,205,155, 55,145,207, 71, 43, 44, 44, 84, 87, 87,167, 81,186, 26,213, 75, 21,189,151, 47, 95,134, 48,116,117,117, 73,213,139,
-121,197,211,104, 56, 15,136, 94, 60, 0, 32,128,176, 47, 3,253,243,231,207,143, 31, 63, 24,153, 65,151,106,253,253,243,155,141,
-149,133,157,157,157,212,186, 5,104, 8, 3,248,196,102,146,116, 1, 11,125, 96,113, 15, 41,250, 37,100, 21,128,228, 11,220, 7,
-205, 99, 22,130,192,226, 15, 82, 20, 78,221,116, 10, 72,102,251,153, 49, 12,110, 0, 44,244,129,197, 61,164,232,215, 54,177, 6,
-146, 87,207, 28,165,181,127, 55,127,249,178,243,235, 87,119,110,110, 32,201,240,242,229,169,242, 50,160,160, 89,103, 23, 77,125,
-122,224,192,129, 21, 43, 86, 0,211, 21, 92,132,131,131, 35, 34, 34,194,193,193, 97,180, 33, 54,168, 0,176,208, 7, 22,247,144,
-162,159,212, 52, 9, 57,185, 11, 82,244,147,148, 38,145,207, 55, 37,111,125, 39, 25, 87, 10,142, 2,128, 0,194, 82, 58,127,250,
-252, 69, 82,205,212, 94, 87,131,139,157,245,255,255,255,127,255,254,191,114,251,225,253, 75,135, 57,217, 89,137, 60,164, 19, 8,
-120, 56, 30,104,171,222,187,114, 75,233,235, 79, 5,226,139,126, 32,201,201, 47, 12,100, 64,138,126,172,189, 1, 60,237, 95,179,
-232, 10, 32, 3,146,236, 48,101,177,174,119, 66, 54,150,141,141,141, 1,188,191, 28,116,121, 0,248, 80, 82,136,123,152,152, 89,
-241, 55,186,129, 64, 82, 12,212,118,254,245,233,195, 79,112,181,247,229,207, 95,136,123,248,197,100,240,183,247,249,165,148,129,
- 12, 72, 54,195,214, 27, 16,164,174,127,129, 32,231, 37,168,103, 0, 41,253, 33, 69, 63,168,109,190,107, 55,178,172, 15,222,152,
-250,200,253,230, 45,207,235, 15,111,239,136, 9,104,202,188, 81, 33, 38,114,129,109,255,149, 43, 87, 34,151,254, 64, 0,228,114,
-114,114, 74, 74, 74,162,245, 3,134, 55,216,179,103, 15, 73,183, 76,227, 57, 12,145, 22, 69, 63, 36, 77, 2, 25,152,105, 18,214,
- 27, 16,196, 83,254, 2,211, 36,144,129,153, 38, 33,178,184,210, 36, 80,246,208,241, 83,204,204, 44,127,255,254,249,248,249, 75,
- 84,176,127, 79, 79, 15,121,165, 63,157, 67,108,144,131, 45,216,214,142, 35,199, 2, 64, 0,161, 87, 0, 95,191,255,114,246,139,
-146, 21,227,231,226, 0, 93,162,242,247, 31, 3, 11, 51,163, 16,191,134,182,170,220,158,157, 91,255,254,254, 74, 76, 29,240,235,
-215, 47, 77,237,251,250, 26,247,153,153,254, 30, 56, 35,205,198, 74,248, 52, 87, 96, 65, 12, 44,106,249,249, 64,247, 47, 66, 72,
- 52, 89, 96,149,128,171, 43, 0, 44,239,128,201, 46, 62, 60, 8,200,134,144,104,178,192,228, 72,176, 25, 2,244,151,140,140, 12,
-144, 4, 58,254,235,215,175,192,210, 31,114, 98, 51, 81,181, 29, 11,243,188, 9,235,217,249, 25, 94, 62, 96, 56,253,229,233,235,
- 23,119, 22,247, 87, 18,108,248, 3,179,153,140, 20,104,104, 11, 66, 98, 29, 11, 34,207,191,120,206, 1, 0,150,239,192,162,191,
- 57, 39, 27,200,110,134, 21,253, 75,110,221, 66,148,254,132, 14, 17,120,240,255, 48,131,217,211, 8,185,152,159,255, 84,216,255,
-253,191,254,102,239,249,221, 55, 85,254,101,225,247,111,127,127,255,247,239,223,145,143,191,134,176,129,130,192,126, 0,169,167,
-220, 92,191,126,125,226,196,137,180,188,223,156,134,165,255,170, 85,171,222,191,119, 93,189, 58,148, 24,245,144,211,249,233, 83,
-162, 1,203,119, 96,154,188,117,254, 24,176,232, 71, 78,147,251,182,174, 19, 23, 23,135,143, 5,225, 42,127,241,164, 73, 80,233,
- 12, 63, 94, 21, 3, 0,227,241,197,171, 55,231,175, 92,131, 53, 11,126,118, 77,158,149,158, 16, 57, 90,136,211, 1, 0, 4, 16,
-202, 36,240,231,207,159,109,220, 2, 53,228,132,217, 89,153,128,165,255,139, 23, 47, 46, 95, 60,255,235, 15,144,249, 95,152,159,
-203,205,211,231,251,207, 63,196, 24,202,206,250, 74, 89,238, 5, 3, 51,163,150,234, 99,118,150,151, 36,149,254, 40, 45,205, 79,
-159,129,133, 62, 80, 10,179, 67,128,181, 52, 68, 6, 11, 87,174, 3, 22,250, 64, 41,204,198, 8, 26, 0, 54,252,129,229, 62, 31,
- 31,223,189,123,247,128,133, 62,168,218, 35,186,244, 7, 54,252,129,165,127, 96,110,139,103,148,213,150, 43, 79, 95,124,103, 32,
-181,244, 71, 6, 79,158,189, 0,246,181, 69, 5,249,192, 85, 51, 51, 25,254,245, 8,142, 7,181,208, 88, 88, 9,150,254, 64, 80,
- 59,101, 42, 16, 65, 74,127, 96,111,160,212, 13,220,238, 23,101,195, 87, 30,241,111,115, 11,145, 74,148,207, 98,101,226,225,102,
-224, 98, 98, 96,150, 22,183,182, 9,118,190, 39,213,143,127,240, 7,228,194,133, 11, 33,229, 62, 26, 9, 87, 64, 12,248,246,237,
- 27, 65, 17, 26,129,180,180,180,208,208,213, 75,151, 46,165,188,244, 23, 18,218, 67,164,150,153, 96,192,200,200,136,124,101, 35,
-237, 74,255,214,170,194,213,171, 87,207,153,220,131, 92,250, 3, 69,166, 76,153,130, 39, 77, 34,151,254,152,105,210,211, 26,124,
-234, 20, 47, 55, 46,189,189,147,167, 67, 74,255, 87,111,222, 2, 17,176, 7,192,202,202, 50,125,193,114, 98, 46,189, 25, 5,196,
- 0, 96,147, 31, 25, 33, 75, 1, 4, 16,162, 2, 0,150,122,194, 10,122, 10, 18, 2, 63,126,255, 5,214,214, 59,119,238, 88,180,
-112,193,165,139, 23, 75,139, 10,152,153,153,128,125, 1, 62, 46,118, 5, 61, 27, 96,147, 13,191,101,191,127,255,214, 86,125,200,
-199,243,109,222,194, 87, 76,140,255,205,116,111, 2, 69, 8, 58, 17,173,244,135, 20,253,223, 63,190,133, 87, 12, 64, 17, 92,122,
-209, 82, 30, 36,217,157, 90,218, 1, 79,148, 64, 17, 60, 86, 43, 43, 43, 11, 11, 11,127,250,244, 9, 88, 19, 48, 49, 49, 1, 61,
- 8, 44,253, 33, 29, 29,130,167,113,173,221,176,190, 96,194,174,245,147,107,128, 53, 1, 23,183,208,227,191, 79,129,165, 63, 15,
- 56,159, 48,227,213,139, 86,250, 67,138,254,143,207,238,106,200,136,125,254,246,131,157,139,157,225,239, 95, 82,253, 91, 57,123,
-203,213,115,199,117,148,180, 62,254,197, 89, 79, 67, 74,127, 96,171, 31, 88,244, 67, 68,128, 69, 63, 16,221, 75,111,220,117,237,
-146,182,153, 18,195, 91,156,145,117,145,109,139,181,131,168, 40,183,230,247,255,159, 25,126,190, 98,251,249,238,231,223,207, 63,
-254,125,255,199,198, 35,109,107,178,230, 66, 27, 46,141,144,161,127,200,181, 86,240,108, 15,103, 3,165,128, 10,136, 73,199,111,
-222,188, 41, 42, 42, 2,182,253,111,220,184, 1,228, 30, 62,124,184,173,173,173,166,166,134, 62,185, 8, 88,112, 83,165,237, 15,
- 44,253,171,170,136, 58,105, 28, 94,232, 35,223,203, 72, 59, 0, 76,147,144,171,131,207,158, 61, 11, 44,247,129,105, 18, 82,250,
- 51,128,111,109, 36, 47, 77,118, 37,248, 92,185,251, 88, 66, 73,146,225, 43,129,122, 26, 88,244,255,254,253, 7, 92,128,252, 1,
-162,199, 15, 31,144,228,120,228,238,194,104,215,129,120, 0, 16, 64,136, 33,160,159, 63,127, 26,106,104,112,113,178, 2,219,251,
-127,255, 49, 28, 61,124,164,177,185,229,223,127,134,219,119,238, 92,186,120, 65, 71, 71,159,153,153, 81, 93, 73,230,222,185, 63,
-156,120, 15,214,100, 99,121,165,166,240,140,129,133,241,241,243,223, 64, 82, 79,227,225,169,203,175,254, 51, 16,187,228, 6, 62,
-206,131,214, 39, 0, 86, 6,224,181, 64, 79,241,232,133,143,243,160,181, 71,128, 9, 17,180, 54,230, 53,246,190,200,159, 63,127,
-184,184,184,128, 69,191,160,160, 32,176, 57,249,245, 43,232, 32,104, 81, 81,209,183,111,223, 18, 60,163,234,199,123, 6, 51, 78,
-206,210,201,135, 93,245, 25, 30,158,103, 56, 13, 22, 4,114, 39, 21, 58,254,253, 71,212, 21, 52,240,233, 53,103, 99, 13, 22, 94,
-166,157, 7,174, 25,106,200,242,241,176, 31, 60,115, 71, 68, 81,251, 1,234, 42, 32, 92,254,221,116,237, 63,195,115, 6, 63,103,
-198,217, 91,238, 9, 11, 42, 6, 89, 51,226,241, 47,100,204,103,231, 87,232,121,215,255, 27,250, 25,164, 63, 50,166,214,255,111,
-108,102, 96,250,206,120,170,109,138,184, 56,214, 83,185,127,104, 60,148, 23,240,250,244,247,203,207,247,119, 22, 63, 90,118,196,
-239,189, 86,138,163, 91, 46, 15,167,160, 58, 7,139, 32,139,223,199,211,235, 78,155,154,152,226,236,108, 50, 49,193,195, 19,153,
- 77, 60, 16, 17, 17,201,207,207, 63,114,228,200,206,157, 59, 65, 85,215,206,157,154,154,154,129,129,129,244,201, 42, 1, 1,191,
-168, 85,250,203,203,203, 19, 89,168,193,203,125, 72, 39,128,236, 51, 92,137, 4, 78,222, 65,192,126, 48,176, 2, 0,150,251,198,
- 96, 6, 3,248,122, 59, 15,123, 19, 72,154,212,213,213,125,128,119,133, 9, 60, 77, 62,223,208,193,171,205,193,163, 90,176,170,
- 35, 69, 95, 71, 66,221,167, 5,232, 29,172,171, 83,128,109, 59, 14, 14,208, 26, 19, 96,195,255,219,183, 31,100, 59,126,180,220,
-199, 5,240, 28, 6, 7, 16, 64,136, 10,224,223,191,127, 92,236,108,191,254,252,103, 98,100, 0,162,250,166, 22, 96, 53,240,245,
-235,151, 23, 47,158,139,139, 75,252,255,255,239,207, 31, 6, 14, 86, 22,102, 86,124, 67, 4,192,194, 84, 75,249,137,136,224, 39,
-208,144, 31,248,162, 79, 70,198,255, 70,218,183, 79, 94, 18, 39,102, 57, 16,164,153,143, 57, 28,132,167,249,143,220,232,192, 44,
-250, 9, 54,255, 33,237, 74, 49, 49, 49,200, 50, 39, 96,103, 5, 50,247,203,207,207,207,202,202,250,248,241, 99,252,211, 23,243,
-247, 28, 76,241,177,119, 0,179,111,253, 1,141,255, 0, 25, 14,106, 12,124, 45,251, 11, 75,172, 8,186, 25,216,200, 2,146,114,
- 98, 66,239,127,254,100,225, 99,254,241,250, 27,176,104,148,148,151,217,181,239, 52,145,254,141, 47,110,189,127,116, 47,203, 11,
-134, 15,226, 12,192, 74,204, 66, 65,209,201, 30,223, 18, 85,228, 17,255, 37,225, 41,107,127,222,100, 80,249,193,112,146,133,129,
-135,133,193,215, 88,198, 55, 30, 95, 87, 73, 90,232,215,175,119,172,127,126, 3, 75,255,227, 9,252,118,129,254, 26, 98,154, 87,
-118, 29, 48, 12,253,202,250,235,235, 31,141,127,175, 95,226,155,168,135,148,248,144, 57, 0,100, 54, 73, 0, 88,226,115,115,115,
- 95,191,126,157, 11, 12,162,163,163,105, 61,236, 3, 44,181,129, 69,127, 52, 24,208,179,244, 71, 27,243,129, 92,156, 66,135, 50,
-206, 35, 56, 70, 73, 73, 9, 88, 1, 64, 74,127, 96,219, 95, 92, 82,146,164, 52,153,230,107,119,226,217, 43, 94,125,222,167, 59,
-239, 50,112,176, 7,231,198, 9,201,248,224, 45, 52,254, 62,125,254, 18, 88,250, 67,122, 0, 64, 64,106,243, 31,115,176,104,180,
- 50,192, 83, 25, 32,215, 1, 0, 1,132, 50, 7,240, 31,178, 6,230, 63, 3,176,232,103, 2,149,221, 12,235,214,174, 9, 12, 10,
- 17, 17, 21,131,100,218,255,132, 14, 25,103,102,122,165,173, 2,189, 28, 81, 79,135, 11,220,116, 97, 48,210,186, 7, 20, 39,198,
-113,200, 99, 62,104,226,240,173, 0,184, 0,242,152, 15,154, 56,124,105, 60, 86,240,233,211,167,207,159, 63, 3, 59, 64,192, 42,
-240,245,235,215,144,241, 31, 96, 87,224,203,151, 47, 4,135,128,214, 79,174, 57,112,133,225,227, 3,134,223,223, 25, 38,149, 59,
- 66,198,127,206,157,103,184,240,252, 40, 49,235,165, 62, 62,187, 43,196,207, 45, 44,196,173,174,166,121,239,254,235, 91, 79,223,
-202, 9,243,255,124,249,234,207,239, 63,240,173, 0,120,252,107,229,224,111,227, 24,185,126,243,170,253,135, 86, 45,235, 43, 14,
- 46,110,187,244,155,225,245,219, 87,120,252, 11, 31,241, 79,180, 50,143,214,146, 95,181,126,223,165, 75, 15,250, 46,159, 93,225,
- 26,199, 48,247,216,211,167,175,225, 91, 1,176, 12, 17,252, 96,255,251,235,205,175, 95,160,203,223,197,165,101, 53, 52, 53, 63,
-113,130,102, 74,190,255,251,198,244,243, 43,231, 87,230,151,207,177, 87, 0,144, 96,252, 1, 6,240, 97, 31,180, 21, 65, 68, 2,
- 96,188, 44, 89,178, 4, 88, 13, 20, 20, 20, 0,107,110, 72, 87, 96,208, 14,251,144, 93,250, 35, 55,255, 33,115, 15,240, 78, 0,
-173, 11, 8, 96,154, 68, 19,129,167, 73,248, 86, 0, 60,105,210,214, 84,221,197, 90,173,181,169,167,119,194,182,186, 37,251, 50,
-156, 76, 94,108,220,246,241,253, 39, 92, 37, 50, 80, 60,212,207, 3, 50,236, 3,175, 0,128,160,173,190,146,248, 66,124,180,184,
-199, 15,208, 70,255,145, 59, 4, 0, 1,196,132,220, 67,255,248,229, 27, 51, 19, 35,176, 66,254,247,255,255,159,127,160, 73,251,
-139, 23,206, 59, 57,131,110,176,251,251,255, 63, 51, 19,243,231,111,191,254,252,250,137,179, 38,255,251, 87, 81,250,185,168,208,
- 71, 72,101, 98,101,198, 3,185, 92, 21,216, 9, 48,212,188,243,231,239, 95, 98,154,255, 88,167,130,137,109, 14, 99,155,134, 34,
-168, 87, 80, 80, 16, 88,238, 3,123, 0,192,106, 64, 84, 84, 20, 50, 33, 12, 44,158, 62,124,248, 64,176, 2, 72,107, 93, 1, 44,
-247,249, 21, 24,128,213, 64, 94,231,126, 96,233, 31,148,223,254,228,223,139,165,125,101,192,144, 36,166,249,111,108,172, 38,170,
-164, 32, 38, 42,194, 6, 12,121,198,255,175,191,126,127,255,249, 7,145,254,237,237,216, 16,160,169,200,199, 39,204, 37, 42,245,
-251,221,251,243, 91,150,127,120,247,136,200, 52, 49,175, 35,135,161,208,133,229,207, 47,133,175, 12,175,152, 63, 77,122,126,154,
-129,141,143,192,120,215,221, 79,111,152,190, 63, 98,251,102,162,226,168, 21,199,115, 79,240,128,168,232,121, 89,139,123, 31,153,
- 62,255,252,255,253,219,146,127, 28, 60,188,120,218,254, 84, 1, 15, 31, 62, 4,146,192,198,184,136,136, 72, 96, 96, 32,164,149,
- 74, 59,144,158, 46,136, 57,242, 67,252,108, 48,217,165, 63,114, 65, 15,175,132, 32, 55,182,211,212,191,192, 52,121,252,248,113,
-200,184,191,177,177, 49, 3,248, 34,226,149,155,182, 17,159, 38, 55,174,111,112, 47,207,245,242,114, 22, 97,103,254,204,248,127,
-231,173,199,199,175, 60, 37, 88,124,103, 38, 68,222,187,115, 7,216,240,135, 32, 96,233,143,181, 93, 63, 10,200, 43,250,113,141,
-255, 0, 1, 64, 0, 33,134,101,128, 37,224,237,107,151, 20,164,132, 56, 89, 89,254,254,253, 7,190,162,153, 33, 45, 61, 27,216,
- 37,248, 11,222, 13,240,237,199,143,235,183,238,177,177,225, 28, 20,249,243,251,157,161,214,125,120,166,207, 42,188,191,118,137,
- 42,164,207, 96,162,115,247,196, 69, 77, 22,102, 81,130,205,127,180,162, 31, 40,200,128,180, 19, 24,127,243, 31, 45, 57, 2, 5,
- 25,144,118,198,226, 2,127,255,254,149,144,144, 0,246, 0, 94,190,124, 9,100, 3, 75,150,183,111,223, 2, 73,200, 45,213,248,
-245,190,126,113,167,166,101, 63,176, 7,208, 93,108,251,229,207,223,162,206,213, 19,203, 67,139,251,182,176,128,238,160, 33,220,
-212,146, 20, 17, 96,101, 96,253,203,192,248,252,254,213,135,175, 62, 42,139, 10, 93,124,247,236,220,221,167,196, 52,255,131,147,
-138, 88,133, 24,152,152, 25, 22,108,187,191,118, 90,105, 82,199,204, 34, 95,253,108,103,121,130,254, 5, 54,255,123,253,194, 24,
- 62,112, 48, 48,178, 50,244,246,132,156, 62,188,203, 57,147,177, 61,151,241, 68, 25,158,230, 63, 16, 92,124, 33, 98,243,253,227,
- 23, 78,230,111, 28, 28,202,193,172,192, 66,255, 35, 19,235, 31, 6,181,255,127,191,253,126,243,252,232,228,143,209, 81,202, 52,
- 74,199,240,193,104, 77, 48,128, 8,218,130, 1, 77,243, 15,214, 5,251, 68,118, 11,200, 46,253, 25, 80, 71,255,209, 22,140,210,
-116, 38,224,214,249, 99,240,160,206, 74, 10,219, 1, 27, 11,218,174,164, 68,112,239, 2, 48, 77,134,187,152,243,255, 19,252,198,
-192,186,182, 63,119,218,150, 11,165, 30, 54, 9,125,203, 66,218, 22, 19,172,183,224,123,199,208,184,163, 43,250,105, 13, 0, 2,
- 8,209, 3, 0,182,124, 63, 60,191,115,247,241, 91, 22, 86,102, 96, 31,224,247,159,191,231,206,157, 93,180,104,254,175,191,255,
-127,255,253,199,198,194,244,234,253,151,167,215,143,115,226,152, 2, 6, 22,157,154,202, 15,161,205,127,112,191,127,237, 18, 53,
-208, 0, 16,211,127, 32, 98, 98,250,103,161,127,253, 47,238, 78, 0, 90,243, 31,190, 10, 8, 88,244, 19, 44,253,209,154,255,240,
- 21, 8,192,162,144, 96,105, 8,206,207,239,191,124,249,194,202,202, 10,105,254,255,251,247, 15, 66, 18, 83, 1, 44,238,175, 60,
-247,244, 32,143, 4,104,226,151,151,133, 25, 88, 31,240,177,179,126,120,247, 4,216,252,103, 97, 98, 34,216,252,151, 21,226,189,
-118,239,254,159, 95,191,216, 89,216,190,124,249,113,241,254, 51, 96,209, 79,176,244,135,248,215, 63,167,121,233,164,137,223,254,
- 49,200, 42,203, 92,185,122, 2, 88,250, 19,233, 95, 32, 40, 82, 54,217,124,123, 31,195,199, 63, 12, 28, 34,187, 79, 93, 3,150,
-254,192,162, 31,127,233, 15, 4,250,191,124,142,238, 62,197,240,235,243, 23,198,207,239,153,190,124,100,249,253,251,239, 39,246,
- 31,223, 56,158,221, 95, 81,117, 91,193, 64, 13,207, 12, 48, 16,192, 83, 14, 7, 24,160, 9,226, 7,179,193, 96, 0,243, 9,164,
-213, 15, 44,211, 25,192,179,193, 4, 39,132, 41, 41,253,129, 69,252,127,220, 75,230,105,183, 28, 8,152, 38,225,107,126,106,106,
- 11,129,105, 82, 92, 92, 28,178, 46, 8, 34, 78, 48, 77,166, 56,232, 21,244, 76,252,252,242,149, 40,159,216,213,107,143,128,165,
- 63,100, 25, 43,145,117, 30, 28, 32,143,234,140,246, 3, 40, 1, 91,150, 52,111,193,123,143, 8, 64, 0,161, 76,204,242,242,242,
-158, 61,176,225,255,127, 63, 5, 41, 97, 94, 46,118, 45, 29, 3, 45,109,125, 22, 38,134, 47,223,255, 62,122,254,238,212,129,173,
- 60,220, 92,184, 12,250,250,237,155,154,252,243, 31, 63, 57,254, 67,174,205,251,207,192,201,241, 3,152,140,223,125, 96, 7, 10,
-240,114,255,209, 85,123,112,248,140, 33,208, 10,252,205,127,120,171, 31,200,101,253,255,155,225, 15,116,245,216, 95, 22, 46,130,
-205,127,120,171, 31,194,253,248, 10,186,228, 0,207,118, 92,120, 29, 0, 36,129,253, 0, 32,249,238,221, 59, 62, 62, 62,200,248,
- 15, 49,151,178,130, 87,253,183,103,134,218, 51, 76, 58, 60,173,218, 59,164,120,226,178,142,108, 96, 15,128,141,157,131, 96,243,
-255,218,163, 87, 42,178, 34,123,247,156, 96, 0,111,191, 4,146,191,127, 66,251,218,172,184,181, 67,154,255, 45, 73,206,121,245,
- 11,100,149, 24, 73,242, 47,164,249,239,182,126,222,174,232, 72, 70, 25, 11, 6,240,150, 96, 6,240,225, 16, 16, 5,190, 60, 60,
-120,156,173,247,179,236,226,246, 45, 63,212,143, 41,168,234,124,226,100,184,207,240,240,243,131,215,175,219,254,126,121, 47, 83,
- 24, 87,140, 63,160,166, 79,159, 14, 44,238,191,127,255, 14, 47,194,128, 92,160,224,144,200, 72,144, 86,255, 75,240, 54,105, 98,
-102,131,129,237,101,242, 74,127, 6,216,229,239,120, 10, 62, 82,247, 18, 19, 9,128,105,178,181,161,102,221,230,237,238, 54, 70,
-240, 52, 9, 68,198,247,238,121, 4,199, 60,122,251, 77, 78,152, 11,127,243,191, 96,214,230,170,100, 55, 41, 9, 7, 72, 45, 2,
-113, 42,158,190, 20,145,221,130,209,126, 0, 21,235, 3, 52, 17,128, 0, 66, 95,153,195,199,203,115,238,192,134,251, 50,234, 74,
-170,154,124,220,156,255,254, 51,124,255,249,235,222,189,123,175,239, 93,224,229,225,102,194,221,170,229,228,224, 88,181,195, 30,
- 79, 27, 31,168,151,155,155, 64,115, 15,178, 6, 20,216,228,255,247,247, 55,168,244, 7,131,223,140,172,184, 14, 99, 64, 6,144,
-245,103,192, 38, 48,188, 28, 36,178,244,135,215, 1,240,205, 95,192, 58, 0,103, 0,225,168, 3, 22,195, 54, 66,205,110,131,237,
-137,253,253, 5,255, 53,228,192,230,255,169, 55, 31, 46,220, 6, 13,248,192,203,125,130,165, 63, 4, 0,155,255,107,141,184,115,
- 2, 53,200,240, 47,176,249, 95,188,105, 21, 99,107,253,118,113,243, 9, 95,174,192,197, 13, 89, 88,101, 56, 8,159,248, 4,236,
- 7,108,223,244,227,201,251,187,175,223, 62,127,121,139,135,249, 47,159,181,158,173, 99,156, 35, 77, 19,238,128,111,250, 37, 99,
- 13,104,122,186, 32, 25,165, 63,195,128, 78,105, 2,211,164,165,165, 37, 90,154, 4,150,254, 12,160,169, 96, 46,252,122,129,205,
-127,215, 61, 39,163,235, 23,217,217,217,137,163,246, 38,201,174,174, 32,117, 0,193, 0,193,172, 44, 71,235, 12, 60,229, 62,242,
- 76, 0, 64, 0, 97, 41,223,128,237,223,159,239, 30,159, 59, 0, 90, 46, 2,185,112,153,157,157, 29,115,110, 22, 13,176,178,178,
-242, 19,113,228, 3, 30, 0, 25,240, 97, 6, 54,249,255,124, 99, 70, 42,250,137, 57,177, 26, 50,224, 3, 44, 10,145, 75, 67, 98,
-138,126,126, 81,169, 95,184,167,181,241,131,232,230,197,183,111, 92, 37,219,191,167,110, 61,134,100, 51,228,210,159, 96,209, 15,
- 1,113, 70,220,228,249, 23, 20,167,253,101,144,162, 31, 94,250, 19, 89,244,195,129,167, 98, 8, 3,164,114, 35,110,141, 12,176,
-248,134,108,250, 5,182,247,225,187,127,129, 12, 72,243, 31,200, 24,252,135, 58,144,177, 6,148, 22,141,116, 90, 3,172,105,146,
- 96,209, 15, 1,174, 53,179,169, 88,244,147, 84, 29,142,150,245,184, 0,218,141,240, 12, 24,243,192, 0, 1,132,189,129,203,194,
-194,130,107,172,134, 22, 0, 50,202, 15, 41,250, 25, 72, 44,250, 33,163,222,228, 21,133, 12,160,149, 75,255,136,233, 94, 96, 5,
-175,222,125, 36,222, 34,100, 0, 25,229, 39,175,232,167,196,191,144, 81,254,205, 95,190,144, 93,244,143,130,225, 10, 32, 75, 60,
- 31,189,253, 70, 70,209, 15, 41,127,225,163, 61, 67,183,254, 27,174,117, 0, 30, 89,128, 0, 26,189, 19,120, 20,140,130, 81, 48,
- 10, 70, 40, 0, 8,160,209, 27,193, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,
-128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 26,248,
- 75,225, 71,154,222, 31, 47, 30, 19,175,151, 67, 66,118, 52,156, 71,245,142,234, 29,213, 75,163, 75,225, 1, 2,104, 80,247, 0,
- 72,221, 5,126,239,222,189, 61, 48, 0,100,143, 86,239,120,192,199,143, 31, 31, 61,122,116,252,248,241,115,231,206, 1, 25,228,
- 25, 66,197, 83,222, 70,193, 32, 7, 55,111,222, 36, 73,113, 70, 70, 6,217, 22,145,173,119, 20,144, 10, 0, 2,136,101,208,186,
-140,212, 18, 28,168,190,163,163, 35, 44, 44, 12, 89,187,146,146, 18,241,218,129, 96,245,234,213,161,161,161, 74, 96,128, 95,125,
- 90, 90, 26, 65, 51,129,142,193,186, 26,122,247,238,249,196,232,125,255,158,155, 70, 97,251,234,213,171,159, 63,127, 50, 50, 50,
-114,112,112,252,248,241, 3, 88, 1,156, 62,125, 90, 95, 95, 95, 69, 69,133, 36,115,136, 57, 42, 3, 92,145,103, 18,163,108,230,
-204,233,212,214,155,142, 67, 49,250,209, 99, 4,211, 21, 67, 61, 35, 99, 19, 70,229, 87,207, 24,118, 61,148,129, 93,131,160,243,
-220,221, 65, 71,234,146,119,120, 53,228, 44,232,244,116, 65, 74, 86,214, 3, 75,213,254,254,126,130, 27,238, 82, 83,211,128,222,
-194,140,213,146,146, 98, 98,180,195, 83,197,132, 9, 19,236,237,237,129,229,248,178,101,203, 62,125,250, 68,208, 82,148, 34,137,
-133, 57,194,138, 45, 61, 35,189,107, 71,119,137,107, 9, 68,112,246,236, 89, 88,245,198,196,128,118, 41,115,115, 99,201, 41,144,
-155,157, 18, 18, 18, 70,119, 36, 32, 3,200,190, 48,248,234,127,128, 0,194, 94, 1, 96, 30, 54, 66,163,227, 71,168, 88, 1,192,
- 75,127,160, 59, 33,123, 82,128, 38, 16, 89, 1, 64, 50, 57,164, 56,131,156,123, 85, 94, 94, 78, 88,239,106, 33, 66, 6,227, 12,
-177,175,190, 4,110, 81,103, 32,226,144, 52,242,238,193, 0,182,253,197,196,160, 23, 60,112,114,114, 2, 43,131, 15, 31, 62,240,
-243,243,159, 58, 5,186, 60,153,152, 58, 0, 24,188,144, 80, 2,134, 88,112,112, 48, 48,192, 9,214, 4,155, 54,109,128, 48,252,
-252, 2,112,177,113,233,253,126, 44, 7, 26, 36, 86, 83,224,108,100, 46,144,129, 75,239,142, 29, 40,151,155, 29, 58,116,168,173,
-173, 13, 57,160,150, 44, 89,130, 63, 97,116,118,118,118,176,119,130, 11,226, 80,148, 44, 80,207, 72,106,146,166,127, 38, 66, 46,
-253,129, 94, 6,198,248,210,165, 75,143, 28, 57,226, 21, 85,141, 75,241, 49,140, 43,180,215,175, 6,149,254,255,254,253,155, 53,
-107, 22, 80, 59,159,156, 61,214, 66, 31,222, 29,188,113,227, 6,144, 27, 25, 25, 9,100, 71, 69, 69, 17, 83,109,244,236,134,222,
- 66,252, 98,231,115,160,222,101,249, 92, 64, 35,203, 61,202, 24,192,177,183,124,225,178, 12,123,124,125, 2, 99, 99, 99,226,155,
-122,163,165, 63, 50, 0, 8, 32, 38,172,197, 10, 48,123, 3, 35, 27, 45,195, 19, 57, 32, 67,201,216, 11,178, 94, 72, 99,156,120,
-189, 64, 7,187,128, 1,164, 14, 32, 41, 65, 64, 74,127,160,117,160,235, 41,192,150, 18,233, 11,198,176,247, 16,132, 71, 4, 23,
-224,217, 50, 29,130,240,136, 16, 44,253,255,131, 1,241,163, 49,239,223,191, 7,150,245,192, 10, 32, 41, 41, 41, 58, 58,154,141,
-141, 13, 88, 7, 0,251, 1, 64,239, 51, 51, 51, 19, 60, 94,255,218,181,107, 64,123,215,172, 89, 3, 9, 46,160,165,107,215,174,
- 5, 54,244,128,226,116, 78,202,104,149, 1,141,154, 32,192,210, 31,152, 36,194,111,132,129, 90,250,168,129, 95,241,179, 28,173,
- 79,128, 11, 0,195,167,180,180, 84, 81, 81,145, 12, 55, 0,245, 2,219,254,194,194,123, 41,111,251,195, 75,127,146,180,195, 75,
-255,226,226, 98, 60,218,145,147, 31,176,249,111,103,103, 7,100, 0,235, 0, 96, 63,128, 96,185,129,166, 55,220, 18,212, 42, 93,
-150,207, 9,236, 7,148,185,151,226,215, 11,108,251, 3,237, 2,118,199, 93, 48, 0, 68,106,180,249,143,167,244, 7, 2,128, 0,
- 98,194,214,229,132, 94, 12, 13,105, 71,195,155,123,196, 20,199,144, 60, 67, 73,126, 35,111, 0, 7,107,153, 78,170, 22,120,229,
- 1,108,254, 19, 60,255,118, 96, 1,188,244, 7,146, 79,159, 66, 47,220,120,242,228, 9,254,204, 6,108,251,127,251,246,141,137,
-137, 9,232, 71, 32,251,217,179,103,172,172,172, 44, 96, 0,100, 64,142,234, 68,219,208,143,150, 81, 39, 78,156, 8, 44,250, 67,
- 66, 66,128, 5, 10,208, 16, 96,225, 8,100, 3,165, 38, 77,154, 52,204,114, 11,188,244, 7,178,129,101, 55,188,109, 1, 9,124,
-120, 7,145,200,242, 5,168, 12, 24, 98,192, 68, 69,222,172, 73,101,101, 37, 80, 47,158,168,193, 83,250,247,245,245, 1,163, 12,
- 88,145, 0,139,239,195,135, 15, 51,128, 79,100, 34,190,244,135,104, 7,166,153, 51,103,206, 64,180, 19,180, 17,168, 62, 34, 34,
- 2,194, 5,214, 1, 14, 14, 14, 64,219, 55,110,220, 72,112, 32, 17,216,252,103, 96,100, 88,154, 7, 61,127, 2,216, 15,136,180,
-102, 7,245, 3,240, 2, 60,165,196,104,183, 0,173,244, 79, 43, 71, 47, 21, 1, 2,136, 5,107, 98,133, 95, 12,125, 15,233, 98,
-104,130,105,157, 90,165, 63, 85, 42, 0, 74, 0,176,242, 32,219, 35,116, 3,192,162, 4, 88,244,191,120, 1,189,133, 17,153,141,
- 11,188,126,253, 26,152,147,129, 45,253, 59,119,238, 0,181, 3,243,234,175, 95,191,128,217, 15, 88, 1, 0,201,191,127,255, 2,
-171,135,245,235,215,227,138,232,189,123, 65,237, 80, 96,137,143,172, 0,194,134, 20, 79,120, 82, 8,242, 8, 15, 46, 54,158,198,
- 62,174,177, 32, 60,131, 63,104, 35, 63,144, 54, 41, 73,105,160,131,189,147, 17,181, 66,133,140,251,223, 35,102,120, 16,169, 9,
- 15,169, 35, 33, 37, 29, 48, 12,137,111,147, 66,244,170,170,170, 50, 16, 61,221,130, 12, 50, 51, 51,225,131, 93, 64, 54,176,248,
- 6, 26, 66,124,233,111,111, 13, 58,146, 17,216,246, 47, 41, 41, 1, 54,204, 33,218,125,253, 82,241, 95,236, 7,111,254,195, 1,
-100, 44,104,219,182,109, 26, 26, 26,192, 38, 59,126,189,225,150, 40, 7,115,129,199,130, 24,150, 47, 59,127, 83,226, 38,126,189,
-163,128,140,210, 31, 8, 0, 2, 8,251, 28, 0,176, 75, 5,105,248,195, 47,134, 38,169,244,199,218, 14,197, 51, 60,141, 75, 47,
-178, 56,237, 14,252, 3,250, 20,126,236, 56,178, 27,200, 27,177,253,191, 74,144,108,151,124,241, 33, 60,225, 9,119, 36, 90,137,
- 32, 35, 35,131,172, 0,107,112,189,123,247,142,151,151, 23, 72, 30, 59,118, 12, 88, 13, 0, 75,127, 96,147, 31,114,245, 13,176,
-104,251,253,251,247,207,159, 63,241, 52, 81, 33,189, 34,204, 48, 1,138,172, 89,179, 6, 40,139, 39,184, 40,159, 3, 0,150,245,
-200,197, 61,132, 77,100, 53, 0, 44,146, 72,174, 3,192, 67,252,144,148,143,152, 76, 2, 11, 18, 63,183,132, 92, 71, 50,192, 46,
-118, 39,111, 80, 2,216, 9,128,204, 94, 16,175, 29, 24,149,240,241,119, 27, 27, 27, 96, 9, 78, 82,219, 31,168,253,207,159, 63,
-200,218, 15, 30,253,219,211,153, 65,176,249, 15, 41,241, 49, 65,127,127,191,119,116, 13, 46,189, 72,163,255,168,253, 3, 34,244,
-142, 2,178, 1, 64, 0,177,224, 73,181,144,230, 63,157,219,254,200, 35, 81,244, 89,202,137, 60,218,131,188, 62, 4,127,137,134,
-179, 63, 11, 27,253, 39,163, 38,128,143,254,227,175, 9,162,163,163,185,185,185,121,120,120,128,165, 57, 63, 63,191,160,160, 32,
-176,121, 21, 27, 27, 11,145,229,224,224,112,115,115, 3,250, 2,243,152, 63, 96,137, 15, 44,253,127,252,248, 1,212,197,206,206,
- 14,204,222,255, 65,151,125,254, 5,138, 3, 75,127, 32,131,224, 0, 5,174, 97, 64, 96, 67,149, 14,131,102,184,102,131,137, 1,
-144, 58,128,132,120,108,194,226,217,176,235,161,224,169, 41, 98, 13, 65,110,254,195,171,109, 34, 27, 22,200,205,127,172, 85, 62,
-126,176,108,217, 50,136, 33,192, 58,128,140,161,127, 72,203, 15,216, 53, 44, 44, 44, 60,115,230, 12, 76, 59,129,228, 49,113,226,
- 68,180, 75, 58, 87,172, 88,113,240,224, 65, 96,186,130,180, 72,240,172, 79,159, 48,113, 66,132, 5, 74,243, 63,122,210,183, 21,
-199,126, 3,245, 26, 70, 25,102,216,103, 16,191,182,125, 20, 16,217,252, 7, 2,128, 0, 98,194,211, 46,134, 36, 2,248,100, 0,
-254, 97,184,242,242,114,242,220,135, 75,175, 18,248, 62, 82,226, 91,241,104, 0,178, 34,136,212, 97, 83, 98, 22,119, 14, 6, 48,
-107,214,172,190,190, 62, 56, 23, 82,250,251,129, 1,144, 1,204,114, 88,117, 1, 43, 12, 96, 41,255,254,253,251, 55,111,222, 0,
-201,111, 96,240,229,203,151, 79,159, 62,125,252,248, 17,216, 27, 0,246, 0,240, 92,233, 3, 44,128,128, 45,125,130,149,232,160,
- 2,135,144, 0, 92, 16,232,125, 56, 27,207,184, 54,242,184, 63,114, 91,158,164,102, 1,154, 98, 96,113, 12, 12, 67,178,103, 2,
-128,122,137, 73,210,192, 18, 31,152, 6, 32, 19,191,192, 58, 0,226,119,226, 47, 93,168, 46,183, 7,106,255,183, 82, 0,168, 29,
-216,244,134,104, 63,116,236, 31,172, 57,142,179,249, 15, 31,240, 1,141,219, 44, 95,154,153,153, 9, 52,167,160,160,128,160,213,
-160,230, 63, 3,227, 82, 88,243, 63,106,226, 55,230,136,143,203,143,253, 2,234,237,220,209, 53, 90,136,211,168,244, 7, 2,128,
- 0, 98,193, 85,190,192,135,254,225,147, 1,248, 11, 71, 72, 57, 14,105,203,147, 58, 92,131,166, 23,210, 39, 0, 10,146, 55,236,
- 3, 95, 6, 74, 79, 0,105,248,147, 55,254, 3,105,248, 19, 51,254, 3,207,222, 16, 70, 99, 99,227,252,249,243, 97, 67, 40,126,
- 16, 6,176,249,143,171, 2, 16, 22, 22,126,251,246, 45,176,189,255,250,245,107, 96, 15, 0,216,190,131,244, 0,190,126,253, 10,
-172, 9,128,165, 63,176, 26, 40, 43,195, 57,231, 6,105,230, 99, 93, 34, 12,145,197,227,102,170,204, 1, 16, 41,142, 12, 32,195,
- 38,232, 5, 92,117,117,107,107,171,136,136, 8, 77,147, 4,102,243, 31, 14, 8,206, 4, 96, 54,255, 73,106,251, 3,251,136, 49,
- 49, 49,192,200, 5,122,191,170,170, 10,216,251, 33,254, 66,155,154, 10,251, 3, 7, 14, 48,174, 1,221,207,186,171,134,215,173,
-229, 51, 80,123,107, 39,168, 21,143,191, 11, 2, 89,251, 15,110,245, 47, 59,120,240,240,127,198,255,133, 5,133,234,234,234,196,
- 88, 10,212, 27, 97,197,138,104,245, 51,128,244,138,187, 73,144, 49,243, 49, 10,176,148,231,157, 21,152, 21, 3,100,132, 0, 32,
-128, 88,240,180,253,129,165, 63,242,100, 0,193,174, 43,114, 57, 78, 94, 63, 0,162,151,194,145, 31,136,155,201, 44,199, 7,125,
-130,131, 12, 82,193,175,234, 78, 76, 76, 68, 27,159, 1, 10, 66,242, 33, 38,144,145,145,185,115,231, 14,176,196, 7, 54,249,127,
-255,254, 13, 25,250,255,241,227, 7,100, 45, 41,100, 78, 88, 89, 89, 25, 79,205, 10, 52, 28,210, 9,128,167, 4, 96, 80,163,137,
- 96, 5,180,152, 3, 64, 30, 17,194, 21, 86, 88,197,129, 1, 8,172, 3,194,195,195, 87,174, 92, 73,252, 64, 37, 26,187,163,163,
- 35,237,105,122, 24, 48,165, 97,219, 8,230,238,238,126,255,254,125,180, 93, 8, 16, 0, 20,103,192,187, 41, 44, 52,116,117,104,
-168,179,171,235, 61,204,201,134,183,111,157, 25, 24,222,167,167,227,204,137,240,171, 16, 33,157,140, 93,187,118, 49,144,114,157,
- 25, 19, 19, 35,168, 17, 3, 41,253, 47,253,153,191, 31,116, 17, 38,176,244, 39, 38,107, 64,146, 19,176,213, 15, 36, 11,139, 10,
-213,213,212,137,180,180,180,172, 4,172,151, 1,216,234,135,232,149,112,147, 4,141, 54,141, 22,254,180, 7, 0, 1,196,130,171,
- 59, 15,159,248,133, 47,243, 32,102, 76,156, 42, 99, 65,164,238, 0, 24,129, 0, 62,228, 2, 47,227, 32,187, 55,144, 5,177,142,
-153, 2,235,134,109,219,182,253,249,243,231,195,135, 15,144, 57, 0, 6,240,234, 32, 32, 23,200, 38, 24,119,249,249,249, 19, 39,
- 78,132, 84, 3,200,227,254, 64,113, 90,215,157,192,226,158,152, 66, 31,107,105,136, 89, 49, 0,155,216, 68,150,254,152,165, 48,
-242,132, 48,193, 78, 0,166,224,131, 7, 15, 24,136, 88, 98, 0, 31,128, 69,117,185, 11, 49,254, 5,246,243,128, 69, 63,242,224,
- 59, 49, 0,168,253,223, 74, 65, 96,185, 15,100, 47,216,255,107,197,177, 95, 64,237,135,143,147, 48, 90,117,232,208,161,130,130,
- 2, 34, 91,253,112, 0, 73,132, 43,143,255, 6,234,149,112,151,132,213, 39, 68,233,133,108,247,133, 76,239,163, 69,211,232, 78,
- 96, 6,108,215,129,161,237, 4, 6, 8, 32, 22,172,217, 3,178,169, 10,185,233, 71,112, 8, 8, 61,123,144, 91, 7, 80,110, 8,
-252, 52, 8, 34, 1,176,178,193, 58,132, 77, 76, 37,132, 57,230, 67,252, 40, 16,230,152, 15,145,163, 64,240,153,106,228,188,141,
- 85, 16,107, 51,205,219,219,123,233,210,165,108,108,108, 63,127,254, 4,214, 1,255,254,253, 19, 16, 16,120,255,254, 61, 49,155,
-159,181,180,180,128,230,239,222,189, 27,178,236, 7,178, 39, 96,200,101,176,125,251,246, 1, 3, 97,203,150, 45,100,148,254,240,
-178,242, 94,121, 57,158,174,106,105,105, 41, 3,142,229,115,101,101,101,248,231, 0,210,211, 5,113,233, 5,182,253,137, 41,199,
- 9,246,129,240, 0,247,150,207,112, 54, 73,165,255,180,105,211,200,139,142,158,238, 94, 80,147,159, 2,128,181,178,132,223, 62,
- 61, 10,240, 0,128, 0,194,185, 12,148,160, 8, 77, 1, 61,119, 0, 96,206,245, 17, 93,205,144, 89,240,129,244,114,146,233, 90,
-200,232, 22,164,114, 66, 27,233, 66, 22,196,239,163,232,232,232,187,119,239,238,223,191,255,251,247,239,127,255,254,245,245,245,
- 5, 22,229,196,135,185, 43, 24, 64,218,110, 68, 54,252,169, 53, 7,128,139,141,167, 52, 68, 91,151, 66,204,110, 38, 6,248, 81,
- 63,247, 66,145,131, 5,152, 11,210,158,166, 51,194, 54,130, 65,164,176,246,180,240,132,191,179,179, 51,193, 4, 73,134, 20,220,
-191,192, 24, 9, 12, 12,132,156, 62, 68, 42, 96, 10,127, 15,212,238,231,159, 6,105, 43, 64, 22,125, 34, 31,243, 64, 11, 96, 28,
- 99, 68,182, 94, 96, 3, 31, 87, 61, 7,145, 26, 5,248, 1, 64, 0, 13,198,195,224,200,104,182,208,191, 17, 74,137,141,148,156,
-242, 70, 45,159, 42,131, 1,154,224,175, 95,191,152,193,128,218, 17, 58,125,128,244, 98, 73, 72,144,227,195, 8,131,122,232,193,
- 80,200,189, 67, 96,233, 15,169,104, 7,231, 22, 83, 10,247,202,128,181, 19, 30,122,167,250,114, 76,252,231,252,208,174,178, 28,
- 29, 20, 2, 2,128, 0, 26,189, 20,126, 20,140,130, 81, 48, 10, 70, 40, 0, 8,160,209, 27,193, 70,193, 40, 24, 5,163, 96,132,
- 2,128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 98, 25, 13,130, 81, 48, 10, 70, 1, 50, 96,196,100,253,135,
- 19,163, 96, 88, 1,128, 0, 26,237, 1,140, 80,128,245,112,240, 81, 48, 10, 24,193,152, 17,116, 6, 52, 35, 6, 24,221,155, 53,
-220, 0, 64, 0, 33, 38,129, 71, 47, 89, 30,213, 59,156,244,198,249,233, 34,154, 57, 76, 76,144,229,170,240, 21,141,255, 97, 0,
+127,255,254,126,252,248,228,198,149, 51, 95,126, 74,154, 24,219, 14,126,151, 3, 75,255,130,130, 2, 96,135, 18,207, 97,206,120,
+ 0,153, 23,202,143, 12,128,255,168, 96, 6,112,192,205,194,118,138, 53,252, 82,120,152,170,255,176,253,137,136,208, 30,225,151,
+194, 67, 0,242, 53,144,104,235,254, 1, 2,136,126, 61, 0, 38, 6,234,111,230,246,114,251,253,159,129,153,133,153,213,202,156,
+ 81, 76,148,137,133,133,137,157,149, 89, 67,141,233,225,227, 63,102,198, 76,194, 66, 28,219,247,129,206, 20,100,254,255,253,255,
+255,127, 18,210, 56, 75,255, 75,103,206, 40, 72,201, 92, 58,126,226,228,175,223,239,223,188,103, 99,231,213, 52,180,214,183,118,
+219,191, 25,180, 67,152, 70,117, 0,218,133,242,144,179, 24, 83, 82, 82, 6,127, 53,112,225,252, 30,118,150,119, 44, 76,191,126,
+252,248,251,241, 43,167,141, 29,225,147,123,175,221, 56,199,203,241,214,201,154, 93, 65, 94,153,143,143,255,247,159, 63,175, 95,
+191, 17,127,244,248,246,221,123,199,142,190,179,178,246, 31,228,205,127, 6,216,113,202,192, 10, 0,207,141, 46,131, 13, 0, 91,
+ 48,107,215,174, 69, 57,254,136,134,165, 33,236, 2, 86, 82,181, 61, 90,199,120, 50, 5, 86,136, 51,192, 46, 91, 67,152,148, 50,
+227,171, 89,248,100,172,213,234,246,237,219, 33,108, 15, 15,143, 29, 59,118, 96,101,143,150,254,152, 92,120, 53, 0, 16, 64,216,
+ 43,128,163, 71, 78, 90,219,152, 83,215, 29,255, 8,221,204, 69,228, 13, 77, 40,149, 10, 11,243,251,119, 44, 18, 98,172, 18, 98,
+108, 95,190,176,114,176,178,252,101, 97, 55,210,101, 52,208, 99,102, 98,100, 5,109, 34,103,101, 99,101,250,201,200,193,246,231,
+ 27,206,210,255,200,190,189,138,146,162, 87, 46, 94,169,110,110,128,139,183, 54,182, 49, 49, 51, 26, 25, 27,109,223,177,151, 96,
+ 5,240,239,223, 63, 96, 33,126,231,206, 29, 78, 78, 78, 93, 93, 93,130,103,215, 48, 96, 92, 40, 15,191,109,117,206,156, 57, 3,
+ 85, 7,156, 63,127,222,208,208, 16,191,154, 43,215,206,253,255,249, 64, 94,242, 7, 63, 31, 59, 19, 19,215,247,239,127,222,190,
+251,126,112,207, 4, 14, 62, 35,115, 51, 59, 60, 26, 57,152, 95,171, 41,254,215,214,214,124,254,226,253,217,243,231,190,124,249,
+202,207,207,171,164, 36,207,196,204,250,247,239,163,243, 23,142, 24, 26,216, 12,230,230, 63,252,118, 23, 96, 63, 0, 88, 7, 16,
+121,173, 10, 70, 67,150,222, 61, 0, 72,210, 93,179,102, 13,121,247,106, 17, 15,224,141,241,153, 51,103,144,106, 15,147,124, 48,
+ 68,239,169,118, 30,180, 70,162,132, 0,147,180, 16,211,224, 9,207,161, 11,224, 37, 62, 90,125, 0, 16, 64, 56,123, 0,192, 58,
+ 0, 72,146, 90, 13, 28,201,187,141, 85,220,102,146, 42,241, 57, 4,210,131, 35,166, 26,216,115, 64,140,149,133, 85, 86,234,203,
+231,207,172,103,175,200,130,174, 76,101,100,102, 99,253,163,173,250, 77, 93,149,153,145,129,137,141,149,157,141,153,209, 88,239,
+151,144,224,191, 67,167,177, 27,162,169, 40,254,240,238, 43,228,210, 31, 8,170,235,171,218,154,187, 36, 45,245, 4, 5,120,241,
+187,225,251,247,239,192, 18,225,225,195,135, 16, 46,176,233,225,229,229,229,239, 79,160, 73,139,118,163, 36, 50,232,237,237, 45,
+ 46, 46,166,243, 54,119, 96,233, 15,191, 82, 3, 15,248,249,245,169,162,244,119, 17, 97,110, 25,105, 9, 46,110,174,135, 15,159,
+254,253,251, 79, 90,138,247,234,245,227, 23, 56,185, 13,116,177, 95,252,112,249,242, 17, 61,181, 95,114,114,138,215,174, 63, 60,
+123,246,250,235, 55,159,129,241, 44, 40,200,249,237,219, 23, 67, 67,237, 15, 31, 62, 62, 61,123,254,226,101, 78,125, 93,227, 65,
+219,252,135, 95,228, 66,240, 90, 71,228,145, 13,180,163,140,129,108,248,112, 7, 25,227, 72,205,205,205,190,190,190,164,158,214,
+ 0,172, 3,128,246,174, 90,181, 10,215,113,108, 12,224,179,148,209,122, 6,144, 43, 33,129,226,104,109, 2, 96, 65,143,121,118,
+ 0,252,120, 37,160,127,211,211, 51, 72,234,100, 32,235, 53,171,252,114,186,157, 7, 94,244,143,150,218,212,106,254, 35, 71, 25,
+ 90,244, 1, 4, 16,129, 80, 6, 86, 3,144,154,128, 72,128,181,160, 39,178,244,135,128,131, 7, 15, 62, 5, 3, 98,206,114, 98,
+254,255,157,133,241, 7, 27, 43,235,249, 43,162,204, 44, 44,188,108,223,248, 56,190,243,242,255,125,250,148,151,157,141,131,157,
+157, 61,212,239,143,159, 39,147,180, 20, 59, 23, 39,246,187, 41,190,125,120,252,226,221,151,226,186, 58, 76,169, 15, 31,223,189,
+127,253,130,145, 80,199,101,245,234,213,240,210, 31, 2,182,109,219,118,253,250,117,252,205,127,228,243,159, 33,205,255,143, 48,
+ 0,100,215,215,215,147,125, 84, 28,217,165, 63, 65,101,192,230, 63, 7,203,115, 78, 78, 86, 14,118, 54, 69, 69, 5, 19, 51, 51,
+ 65, 65, 65, 22, 22,102, 54, 54,102, 33, 65,142,167,143, 31,224,210,200,242,255, 41, 47, 15,231,183,239,127,174, 92,185,253,236,
+197,199, 71, 79, 62,221,186,247,235,249,139,207,175, 95,127,184,125,235,158,138,178,178,180, 20,223,219,215,143, 6,103, 22,130,
+140,254, 35,139, 0,123, 3, 40,119,187,227,105,219,130,151,163, 97,189, 80,158,188, 14, 4,176, 80,134,119, 22,137, 4,123,247,
+238, 5, 38, 81,130, 87, 51, 34, 95,254,142,124, 33, 48,178,117,184,172,134, 24, 11,185, 59,140,188, 94,209,170, 66,110,228, 86,
+ 63,164,244, 7,182,253,165, 64,205,127,124,193,229,225,225,225,233,233, 9, 25,231,129, 48, 32,108, 15, 24, 24,173, 3,240, 3,
+128, 0, 34,106, 14,128,188,222, 0,217,224,246,109, 80, 55, 2, 88, 7, 72, 75, 75,227,111,147,178,176,176,176, 50,179,178,178,
+ 50,218, 89, 51,124,251,250,243,254, 93, 54, 96,135,128,229, 47,139,133,249,127, 96,173,192,204,204,196,240,159,241,221,123,134,
+211,231, 88, 64, 55,129, 96,171,236,206,157,191,251,229,203, 47, 76,241,142,250,122,118,118,142,239,223, 63,254,253, 71,224, 62,
+225,115,231,206, 97, 10,158, 61,123, 86, 83, 83,147,200,230, 63,114,155,110,243,230,205,112, 53, 52,234, 4,160, 13,245,192, 75,
+127,130, 25,248,253,187, 87, 34,188,140,127,254,254,251,245,251,207,235, 55,239, 88,217, 56,126,254,252,253,251,207,223, 63,127,
+254,253,249,251,255,195,251, 55,184, 52,178,177,126,229,224,148,121,251,246,227,167,207,223,222,189,255,206, 39,172,111,165,167,
+119,234,232, 14,169, 95,127, 62,126,250,168,174,174,204,206,198,242,245,243,187,193,217,252, 7,150, 80,104,151, 41, 2,123, 0,
+ 68,206, 4, 0,107, 14,204, 59, 32,225,199, 74,227, 2,240,203, 21, 50, 50,132,156,157, 17,167,191, 1,115, 4,144,220,180,105,
+211,155, 55,111,136,156,151,218,179,103, 15,164,244,135,168, 95,187,118, 45,174, 82, 24,185,255,135,121, 33, 48, 68, 28,114, 45,
+ 48, 86, 19, 32,199,136, 2, 73, 72,191, 1,171, 7,113,165,103,160,243, 66, 44,247,172,100, 96, 8,239,255,106, 90,249, 5,171,
+ 94,179,112,236, 30, 68, 30,235,199, 53, 31, 48, 90,202, 35,143,252,160,245, 0, 0, 2,136,250,253, 44,180,246, 62, 73,205,127,
+ 72,251, 23, 94, 13, 0, 51, 15,254,126, 0, 51, 51,139,133,217, 63,102, 38,150,211,103, 56,110,222,230,240,118,103,240,241,100,
+240,245, 96,148, 20,103,227, 96, 99, 7, 34, 78, 14,118,105, 73, 32,131, 3,200,198,106, 66,109,117, 77,103,123, 19,102,182, 81,
+ 86,148,231, 23,224,230,248,247,235,203,183,223,180,136,143, 35, 96, 0, 47,244,225, 0,200,125,251,246, 45,176,167, 79,187,198,
+ 62,114,179, 14,194,133,244,196, 9,142, 45,252,253,203,240,245,219,239,175, 95,127,125,250,244,243,229,203,247,207,158,189,249,
+252,249,231,151, 47,191,129, 53,232,215,175,191, 63,126,248,136,115,224,232,231,159, 31, 63,254,254,254,253,139,151,151, 77, 86,
+154,143,139, 27,212,220, 83, 82, 86,144,145,226,227,231,227,248,255,255,239,239, 63,255,126,254,252, 58, 56,155,255, 69, 69, 69,
+ 88, 75,118,130,157, 0,204,187, 36, 33, 0, 40,184,135,184, 83,187,193, 35, 42, 8, 0, 41,124,129,213, 0,176, 76, 39,166,127,
+ 12,108,251,175, 89,179, 6, 94,250, 3,201,144,144, 16, 92,197, 55,208,112,204, 43, 33, 33,109, 2,184, 56,208, 61,132, 14,211,
+254,143, 54,144,139, 60,252,133, 75,143,136,136, 8, 35,172,157, 79,170,222, 81, 64, 82,233,207,128, 49, 7, 0, 16, 64, 68,245,
+ 0,232,214,246,135, 21, 52,127, 33,151, 74, 19,118,152,217, 63, 49, 81,246, 79,159, 88,216, 89,254,176,179, 49, 31, 56,201,230,
+237,200, 10,108,251,127,250,196,122,244, 12, 55, 31, 7,232, 42, 9, 15,151, 95,254,222,255,153,152,254, 47, 88, 75,148,237,192,
+204,201,204,197,241,142, 85,132,235,247,147, 59, 79,255, 59, 57,216,225, 87, 15,108, 77, 31, 59,118, 12, 77,144,224, 53,200,144,
+ 75,189, 23, 44, 88,144,144,144, 0, 17,129,223, 43, 9, 20,193,127,205, 33, 37, 0,210,246,135, 52,211,224, 43,228, 48,135,122,
+177, 2, 65, 33,209,103,247,175, 0,195,249,215,239,127, 63,126, 62,121,252,228,237,187,247,159,222,189,251,246,246,221,119, 32,
+ 18, 16, 82,192,165,241,229,155,255, 47, 94,190,209,212, 84,254,240,254, 61, 43, 11,211,167,207, 79,190,126,248,167,165,242, 85,
+ 92, 84,148,139,139,139,157,157,243,249,139,207,140,204,130,131, 51,243, 96,189,198, 29, 50, 19,128, 95, 35,164,127, 0,191, 75,
+ 18, 94,115, 48,144,114,165, 76, 88, 88, 24,188, 69, 12,185,181, 2, 24,107,193,193,193,192,234, 7,255,102, 31,180,182, 63, 4,
+ 32,247, 39,144, 1,174, 43, 33, 33,226,192,212, 2,185,123, 29, 34,254, 24,155,189, 64, 53, 89, 89,153,144,219,117,192,213,198,
+127, 72,145, 14,212, 5,113, 63,158,154, 3,168,119,170,163, 96,248,132,111,104, 99, 65, 64, 17,136,222, 36, 71,214,209, 66,156,
+ 18,144, 86,222, 1,103,207,234,172, 0,214, 1,240,126, 0, 64, 0,177,208,162,232, 7,182,250, 33,179,193, 36, 53,255,145,218,
+245,204,200, 99,124,120,238, 17, 19, 17, 97,102, 98,100, 22, 21, 97, 86, 85,254,255,236, 25, 11, 19, 51, 35, 43, 11, 11, 43, 11,
+235,165,203,220, 66,220,172, 64,115,172,205,255,114,114,178,255,251,247,159,225,255, 95, 98,172, 6,102, 27, 30,113,217,151, 95,
+254,127,189,115,128,133,145,185,180,190,154,152, 44,250, 24, 12,144,221,140,103,252,135, 1,188,222, 31, 82,220, 67, 74,127, 96,
+123, 31, 88, 19, 64,164, 62,125,250, 4, 44,253,183,108,217, 66,204,133,242,228, 1,200,197, 79,192, 32,133, 76, 81, 18,211,246,
+135, 0,125, 93,227,235, 87,206,254,127,250,233,219,247,223,239,217,127,252,103,120,255,227,199, 31, 96,111,224,213,155,111,207,
+158,127,177,117,148,199,165,241,251, 47,145,123,247, 95, 43, 41,202, 41, 42,202,188,125,251, 70, 80,224,175,170, 42,191,152,168,
+ 18, 7, 39,231,135, 15, 95,206,158,187,241,228,233, 39, 9, 25,237,193,147, 97,254,131,111,187,132, 20,188,240,242, 23,235, 90,
+126, 44,163, 21, 72, 43, 24,129,157, 0,248, 93,146, 16,208,215,215,183,107,215, 46, 92,122, 33, 49,146,158, 46, 8,179,238, 63,
+114,145, 13,169, 0,128,173,120, 60,227, 63, 72,195, 71,123, 73,186,221, 8,215,149,144, 16,113, 72,241,141,171, 16,135, 44, 49,
+154, 54,109, 58,100,134,195,192, 64, 31, 62,112, 15,107,209,227,188,105, 0,162,151, 41,236, 61, 68,111,168,147, 2, 60, 96,194,
+250,175, 49, 48, 48,224,111,253, 3,243, 26,124,129,147,167,167, 39, 60,118, 70, 71,126,136, 4, 0, 1,196, 50, 72, 90,253, 16,
+ 16, 17, 17, 65,146,122, 96, 3,159,153, 25,132, 52,213,152, 12,117,255,178,179,113,128, 42, 0, 86, 86, 43,115, 6,118,118, 6,
+ 86,102,118, 17, 17, 14,102,230,175,127,255,254,251,247,143,168,145,156,111,239, 94,112,200,104,220,223,179, 68,148,133, 41,182,
+186,138, 24, 45,156,156,156, 85, 85, 85, 36, 45, 3,133,220, 62,159,147,147, 3,225, 66,218,251,192,162,255,219,183,111, 73, 73,
+ 73, 64,246,180,105,211,104,183, 10, 8,114,249, 31,252, 14, 85,146, 86,149,200,200,171,159, 57,177, 83, 76, 4,216,112,103, 1,
+143,237,252,253,244,249,215,187,247,223,101, 21,181,109,172,236,113,233,242,242, 10,222,181,125,254,137, 83, 87,109,173,245,229,
+229,229,127,255,250, 97,104,160,199,205,207,255,240,222,163,167,207, 62, 28, 61,126,253,253,103,254, 64, 75,251,193,147, 43, 50,
+ 51, 32, 3, 44,140,153,192, 2, 17, 92,160,255, 67, 42,247,153,152, 24,241, 92,176, 14,186,156,253, 63,188, 0,100, 4,166, 60,
+120, 39, 0,200, 0,150, 86, 30, 30,238,176, 74,134,193, 59,186, 22,115,172, 3, 87,169, 13,148,197, 95,250, 35, 3,160, 74, 92,
+237,125, 60,169, 2,243, 74, 72,184, 56,158,203,194,224, 53, 7,176,252, 5, 55,255, 25,145,235, 15,252,246, 34,235, 93, 85,200,
+ 3, 10, 23, 14,113,136,212,170,194, 71,144,202, 96,231,197,223,184, 2, 4,121,220,127,116, 14,128, 12, 0, 16, 64,216, 43, 0,
+ 43,107, 51, 10,199,221,200,107,251,195,163,141, 72,240,238, 61,163,164, 56, 19,228,224,135, 93,123, 65, 3,253,236,236, 28,236,
+108,236,190,158,140, 64,138,147,131,241,221, 91,230, 83,103,121,255,254,251, 43, 43, 67,120,136, 25,216,252,255,240,237,251,251,
+ 51,219, 84,101, 89,175, 60, 37, 97, 72, 26, 88, 15,153,129, 1,241, 90,192, 23,202,119, 66, 70,123,128,189, 1,115,115,115, 96,
+107,209,223,223, 31,200,142,141,141,165, 93,243, 31, 62, 16, 4,105,205, 17, 51,242,131, 18,173,224, 82,254,214,141,107,207,238,
+ 61, 4,150,131,127,255,254,231,224, 20, 82,211,212, 9, 12, 32,112, 41,152,152,180,222,137, 83, 59,128, 61, 6, 93, 29, 37,105,
+ 41,145, 71,143, 95,190,191,124,247,230,173, 71,123,247, 93,122,248,244,127, 74,106,238,160,202, 21,255, 86, 10, 18, 47,235,187,
+ 9,175,222,187,243,225,157, 0,208,168,209,189, 5,200, 10,208,244, 98,237, 16, 32,151,149, 36,249,130,212, 44,140,235, 74, 72,
+ 98,174,138,132, 23,244,104,202,136,105, 94,252,123,184,118,205,132, 56, 80,247,197, 73, 14, 94,250,131,184, 94,166,224,209,210,
+ 11,184, 42,128,209,125, 0, 68,130, 89,157, 21,200,163, 64,200, 0, 32,128, 88,168,146,116,168, 2,200,104,243,158, 57,199,206,
+193,198,230,235, 5,172, 1, 24,205, 76,254, 92,190,194,201, 4,190, 66,250,195, 7, 38, 41, 9,102, 38, 70,182,139,151,217, 56,
+216, 25,126,253,254,245,240, 17, 39,193,210,255,238,173,243,230,206, 62, 44, 34,230,119,111,157, 98,121,177,166,172,180,178,171,
+187,157, 70,158, 69,190, 80, 94, 71, 71,231,253,251,247, 64, 54,144,204,203,203,163,207, 46, 48, 82,139,126,228, 58, 0,136, 46,
+ 92, 62,251,242,197, 75,110,110,110, 60, 13,127,148,130, 64,207, 24,136,150, 46,153,121,237,230, 73, 73,113, 30, 14, 14,214, 47,
+ 95,126, 61,125,254,137,145, 69, 54, 37, 53,110, 56,103,190,115,197, 12,202,137,136,133,164,103,139,104, 87,130,131, 71,105,132,
+ 96,213, 6, 57,133, 35,174,242,154, 96, 57, 78,222, 93,146,112,111,134, 90,178,131, 28,252,253, 57, 8,141, 2,234, 1,159,152,
+ 90,200,172, 47,176, 14, 64, 22,132,179, 1, 2, 8,189, 2,160,228,184, 30, 90, 28,245, 67, 56,245, 48, 48,190,127,207,200, 37,
+193, 40, 44,196,104, 98,244,155,131,141,153,157,237,183,176, 16, 7, 56, 15, 48, 90,152,252, 61,117,142, 21,212, 69,192,155,151,
+128,165,191,182, 58, 95,113,126,211,119, 54,153,117,123,158, 42,171,129,218,242, 60,167,183, 20,151, 84,246,246,208,176, 14,128,
+ 92, 40, 15,108,242,195,187, 5, 67,229,154, 83,208,158, 47, 93,146,117, 69,199,164, 31, 57,118,240,245,219,215,223, 95,124,227,
+224, 16,150, 81,212, 35,178,254, 24, 12,224,255,255,127, 12,228, 29,103,114,111, 1,116, 57,208,189,133,180,118, 36, 73,195, 62,
+131, 4,184,249,132, 19,108,203,227,234, 92,143,206, 1, 16, 95, 7, 96,150,254, 64, 0, 16, 64, 67,254, 62,128,255, 12,160, 21,
+ 62,140, 76,192,152,255, 47, 36,240,255,224, 17, 22, 14,208,246, 95, 22, 63, 47, 96, 98,248, 39, 40,252,231,207, 95,198,127,255,
+254,130,115, 47, 78,160,167,240,197, 59, 56,244, 11,139,170, 24, 15,119, 84,160,208,178,245,151, 33,117,192,239,191,235,104,237,
+126, 50, 46,148, 31,210, 96, 72,148,248,179,222,119,164, 9, 86,160, 8,173, 22, 34, 95, 47,176,213, 79, 74,195,127,164,129,144,
+236, 41,116, 27, 51, 24,177,117, 0, 46, 41,128, 0, 26,189, 20,126,200,128,209, 11, 97, 70,193, 40, 24, 5,212, 5, 0, 1, 52,
+122, 35,216,144, 1,163,165,249, 40, 24, 5,163,128,186, 0, 32,128, 70, 79, 92, 26, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,
+180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,224, 47,133,183,
+ 55,147,198,165,242,235,187, 23, 16, 6,183,144, 4,132,113,240,212, 83,100, 5, 63, 69,197,113,233,221,221, 15,221,103,235, 90,
+ 8, 93, 99,192,254,250, 37,145,246, 98, 2,226,237,197, 4,104,246,154, 24, 74,225, 82,249,230,254, 85, 8, 67, 68, 17,122, 46,
+194,153,243,207,168,229, 95,143,221,216, 15,160,231,151,146,138,133, 29, 5, 60, 69, 28,106,254, 14,215, 52,106,197, 47,178,222,
+155, 55,111, 34,159,143, 86, 88, 88,168,174,174, 78,163,116, 53,170,151, 42,122, 47, 95,190, 12, 97,232,234,234,146,170, 23,243,
+138,167,209,112, 30, 16,189,120, 0, 64, 0, 97,159, 4,254,243,231,207,143, 31, 63, 24,153, 65,151,106,253,253,243,155,141,149,
+133,157,157,157,212,186, 5,104, 8, 3,248,196,102,146,116, 1, 11,125, 96,113, 15, 41,250, 37,100, 21,128,228, 11,220, 7,205,
+ 99, 22,130,192,226, 15, 82, 20, 78,221,116, 10, 72,102,251,153, 49, 12,110, 0, 44,244,129,197, 61,164,232,215, 54,177, 6,146,
+ 87,207, 28,165,181,127, 55,127,249,178,243,235, 87,119,110,110, 32,201,240,242,229,169,242, 50,160,160, 89,103, 23, 77,125,122,
+224,192,129, 21, 43, 86, 0,211, 21, 92,132,131,131, 35, 34, 34,194,193,193, 97,180, 33, 54,168, 0,176,208, 7, 22,247,144,162,
+159,212, 52, 9, 57,185, 11, 82,244,147,148, 38,145,207, 55, 37,111,125, 39, 25, 87, 10,142, 2,128, 0,194, 82, 58,127,250,252,
+ 69, 82,205,212, 94, 87,131,139,157,245,255,255,255,127,255,254,191,114,251,225,253, 75,135, 57,217, 89,137, 60,164, 19, 8,120,
+ 56, 30,104,171,222,187,114, 75,233,235, 79, 5,226,139,126, 32,201,201, 47, 12,100, 64,138,126,172,189, 1, 60,237, 95,179,232,
+ 10, 32, 3,146,236, 48,101,177, 46,120, 69, 54,150,141,141,141, 1,188,191, 28,116,121, 0,248, 80, 82,136,123,152,152, 89,241,
+ 55,186,129, 64, 82, 12,212,118,254,245,233,195, 79,112,181,247,229,207, 95,136,123,248,197,100,240,183,247,249,165,148,129, 12,
+ 72, 54,195,214, 27, 16,164,174,127,129, 32,231, 37,168,103, 0, 41,253, 33, 69, 63,168,109,190,107, 55,178,172, 15,222,152,250,
+200,253,230, 45,207,235, 15,111,239,136, 9,104,202,188, 81, 33, 38,114,129,109,255,149, 43, 87, 34,151,254, 64, 0,228,114,114,
+114, 74, 74, 74,162,245, 3,134, 55,216,179,103, 15, 73,183, 76,227, 57, 12,145, 22, 69, 63, 36, 77, 2, 25,152,105, 18,214, 27,
+ 16,196, 83,254, 2,211, 36,144,129,153, 38, 33,178,184,210, 36, 80,246,208,241, 83,204,204, 44,127,255,254,249,248,249, 75, 84,
+176,127, 79, 79, 15,121,165, 63,157, 67,108,144,131, 45,216,214,142, 35,199, 2, 64, 0,161, 87, 0, 95,191,255,114,246,139,146,
+ 21,227,231,226, 0, 93,162,242,247, 31, 3, 11, 51,163, 16,191,134,182,170,220,158,157, 91,255,254,254, 74, 76, 29,240,235,215,
+ 47, 77,237,251,250, 26,247,153,153,254, 30, 56, 35,205,198, 74,248, 52, 87, 96, 65, 12, 44,106,249,249, 64,247, 47, 66, 72, 52,
+ 89, 96,149,128,171, 43, 0, 44,239,128,201, 46, 62, 60, 8,200,134,144,104,178,192,228, 72,176, 25, 2,244,151,140,140, 12,144,
+ 4, 58,254,235,215,175,192,210, 31,114, 98, 51, 81,181, 29, 11,243,188, 9,235,217,249, 25, 94, 62, 96, 56,253,229,233,235, 23,
+119, 22,247, 87, 18,108,248, 3,179,153,140, 20,104,104, 11, 66, 98, 29, 11, 34,207,191,120,206, 1, 0,150,239,192,162,191, 57,
+ 39, 27,200,110,134, 21,253, 75,110,221, 66,148,254,132, 14, 17,120,240,255, 48,131,217,211, 8,185,152,159,255, 84,216,255,253,
+191,254,102,239,249,221, 55, 85,254,101,225,247,111,127,127,255,247,239,223,145,143,191,134,176,129,130,192,126, 0,169,167,220,
+ 92,191,126,125,226,196,137,180,188,223,156,134,165,255,170, 85,171,222,191,119, 93,189, 58,148, 24,245,144,211,249,233, 83,162,
+ 1,203,119, 96,154,188,117,254, 24,176,232, 71, 78,147,251,182,174, 19, 23, 23,135,143, 5,225, 42,127,241,164, 73, 80,233, 12,
+ 63, 94, 21, 3, 0,227,241,197,171, 55,231,175, 92,131, 53, 11,126,118, 77,158,149,158, 16, 57, 90,136,211, 1, 0, 4, 16,202,
+ 36,240,231,207,159,109,220, 2, 53,228,132,217, 89,153,128,165,255,139, 23, 47, 46, 95, 60,255,235, 15,144,249, 95,152,159,203,
+205,211,231,251,207, 63,196, 24,202,206,250, 74, 89,238, 5, 3, 51,163,150,234, 99,118,150,151, 36,149,254, 40, 45,205, 79,159,
+129,133, 62, 80, 10,179, 67,128,181, 52, 68, 6, 11, 87,174, 3, 22,250, 64, 41,204,198, 8, 26, 0, 54,252,129,229, 62, 31, 31,
+223,189,123,247,128,133, 62,168,218, 35,186,244, 7, 54,252,129,165,127, 96,110,139,103,148,213,150, 43, 79, 95,124,103, 32,181,
+244, 71, 6, 79,158,189, 0,246,181, 69, 5,249,192, 85, 51, 51, 25,254,245, 8,142, 7,181,208, 88, 88, 9,150,254, 64, 80, 59,
+101, 42, 16, 65, 74,127, 96,111,160,212, 13,220,238, 23,101,195, 87, 30,241,111,115, 11,145, 74,148,207, 98,101,226,225,102,224,
+ 98, 98, 96,150, 22,183,182, 9,118,190, 39,213,143,127,240, 7,228,194,133, 11, 33,229, 62, 26, 9, 87, 64, 12,248,246,237, 27,
+ 65, 17, 26,129,180,180,180,208,208,213, 75,151, 46,165,188,244, 23, 18,218, 67,164,150,153, 96,192,200,200,136,124,101, 35,237,
+ 74,255,214,170,194,213,171, 87,207,153,220,131, 92,250, 3, 69,166, 76,153,130, 39, 77, 34,151,254,152,105,210,211, 26,124,234,
+ 20, 47, 55, 46,189,189,147,167, 67, 74,255, 87,111,222, 2, 17,176, 7,192,202,202, 50,125,193,114, 98, 46,189, 25, 5,196, 0,
+ 96,147, 31, 25, 33, 75, 1, 4, 16,162, 2, 0,150,122,194, 10,122, 10, 18, 2, 63,126,255, 5,214,214, 59,119,238, 88,180,112,
+193,165,139, 23, 75,139, 10,152,153,153,128,125, 1, 62, 46,118, 5, 61, 27, 96,147, 13,191,101,191,127,255,214, 86,125,200,199,
+243,109,222,194, 87, 76,140,255,205,116,111, 2, 69, 8, 58, 17,173,244,135, 20,253,223, 63,190,133, 87, 12, 64, 17, 92,122,209,
+ 82, 30, 36,217,157, 90,218, 1, 79,148, 64, 17, 60, 86, 43, 43, 43, 11, 11, 11,127,250,244, 9, 88, 19, 48, 49, 49, 1, 61, 8,
+ 44,253, 33, 29, 29,130,167,113,173,221,176,190, 96,194,174,245,147,107,128, 53, 1, 23,183,208,227,191, 79,129,165, 63, 15, 56,
+159, 48,227,213,139, 86,250, 67,138,254,143,207,238,106,200,136,125,254,246,131,157,139,157,225,239, 95, 82,253, 91, 57,123,203,
+213,115,199,117,148,180, 62,254,197, 89, 79, 67, 74,127, 96,171, 31, 88,244, 67, 68,128, 69, 63, 16,221, 75,111,220,117,237,146,
+182,153, 18,195, 91,156,145,117,145,109,139,181,131,168, 40,183,230,247,255,159, 25,126,190, 98,251,249,238,231,223,207, 63,254,
+125,255,199,198, 35,109,107,178,230, 66, 27, 46,141,144,161,127,200,181, 86,240,108, 15,103, 3,165,128, 10,136, 73,199,111,222,
+188, 41, 42, 42, 2,182,253,111,220,184, 1,228, 30, 62,124,184,173,173,173,166,166,134, 62,185, 8, 88,112, 83,165,237, 15, 44,
+253,171,170,136, 58,105, 28, 94,232, 35,223,203, 72, 59, 0, 76,147,144,171,131,207,158, 61, 11, 44,247,129,105, 18, 82,250, 51,
+128,111,109, 36, 47, 77,118, 37,248, 92,185,251, 88, 66, 73,146,225, 43,129,122, 26, 88,244,255,254,253, 7, 92,128,252, 1,162,
+199, 15, 31,144,228,120,228,238,194,104,215,129,120, 0, 16, 64,136, 33,160,159, 63,127, 26,106,104,112,113,178, 2,219,251,127,
+255, 49, 28, 61,124,164,177,185,229,223,127,134,219,119,238, 92,186,120, 65, 71, 71,159,153,153, 81, 93, 73,230,222,185, 63,156,
+120, 15,214,100, 99,121,165,166,240,140,129,133,241,241,243,223, 64, 82, 79,227,225,169,203,175,254, 51, 16,187,228, 6, 62,206,
+131,214, 39, 0, 86, 6,224,181, 64, 79,241,232,133,143,243,160,181, 71,128, 9, 17,180, 54,230, 53,246,190,200,159, 63,127,184,
+184,184,128, 69,191,160,160, 32,176, 57,249,245, 43,232, 32,104, 81, 81,209,183,111,223, 18, 60,163,234,199,123, 6, 51, 78,206,
+210,201,135, 93,245, 25, 30,158,103, 56, 13, 22, 4,114, 39, 21, 58,254,253, 71,212, 21, 52,240,233, 53,103, 99, 13, 22, 94,166,
+157, 7,174, 25,106,200,242,241,176, 31, 60,115, 71, 68, 81,251, 1,234, 42, 32, 92,254,221,116,237, 63,195,115, 6, 63,103,198,
+217, 91,238, 9, 11, 42, 6, 89, 51,226,241, 47,100,204,103,231, 87,232,121,215,255, 27,250, 25,164, 63, 50,166,214,255,111,108,
+102, 96,250,206,120,170,109,138,184, 56,214, 83,185,127,104, 60,148, 23,240,250,244,247,203,207,247,119, 22, 63, 90,118,196,239,
+189, 86,138,163, 91, 46, 15,167,160, 58, 7,139, 32,139,223,199,211,235, 78,155,154,152,226,236,108, 50, 49,193,195, 19,153, 77,
+ 60, 16, 17, 17,201,207,207, 63,114,228,200,206,157, 59, 65, 85,215,206,157,154,154,154,129,129,129,244,201, 42, 1, 1,191,168,
+ 85,250,203,203,203, 19, 89,168,193,203,125, 72, 39,128,236, 51, 92,137, 4, 78,222, 65,192,126, 48,176, 2, 0,150,251,198, 96,
+ 6, 3,248,122, 59, 15,123, 19, 72,154,212,213,213,125,128,119,133, 9, 60, 77, 62,223,208,193,171,205,193,163, 90,176,170, 35,
+ 69, 95, 71, 66,221,167, 5,232, 29,172,171, 83,128,109, 59, 14, 14,208, 26, 19, 96,195,255,219,183, 31,100, 59,126,180,220,199,
+ 5,240, 28, 6, 7, 16, 64,136, 10,224,223,191,127, 92,236,108,191,254,252,103, 98,100, 0,162,250,166, 22, 96, 53,240,245,235,
+151, 23, 47,158,139,139, 75,252,255,255,239,207, 31, 6, 14, 86, 22,102, 86,124, 67, 4,192,194, 84, 75,249,137,136,224, 39,208,
+144, 31,248,162, 79, 70,198,255, 70,218,183, 79, 94, 18, 39,102, 57, 16,164,153,143, 57, 28,132,167,249,143,220,232,192, 44,250,
+ 9, 54,255, 33,237, 74, 49, 49, 49,200, 50, 39, 96,103, 5, 50,247,203,207,207,207,202,202,250,248,241, 99,252,211, 23,243,247,
+ 28, 76,241,177,119, 0,179,111,253, 1,141,255, 0, 25, 14,106, 12,124, 45,251, 11, 75,172, 8,186, 25,216,200, 2,146,114, 98,
+ 66,239,127,254,100,225, 99,254,241,250, 27,176,104,148,148,151,217,181,239, 52,145,254,141, 47,110,189,127,116, 47,203, 11,134,
+ 15,226, 12,192, 74,204, 66, 65,209,201, 30,223, 18, 85,228, 17,255, 37,225, 41,107,127,222,100, 80,249,193,112,146,133,129,135,
+133,193,215, 88,198, 55, 30, 95, 87, 73, 90,232,215,175,119,172,127,126, 3, 75,255,227, 9,252,118,129,254, 26, 98,154, 87,118,
+ 29, 48, 12,253,202,250,235,235, 31,141,127,175, 95,226,155,168,135,148,248,144, 57, 0,100, 54, 73, 0, 88,226,115,115,115, 95,
+191,126,157, 11, 12,162,163,163,105, 61,236, 3, 44,181,129, 69,127, 52, 24,208,179,244, 71, 27,243,129, 92,156, 66,135, 50,206,
+ 35, 56, 70, 73, 73, 9, 88, 1, 64, 74,127, 96,219, 95, 92, 82,146,164, 52,153,230,107,119,226,217, 43, 94,125,222,167, 59,239,
+ 50,112,176, 7,231,198, 9,201,248,224, 45, 52,254, 62,125,254, 18, 88,250, 67,122, 0, 64, 64,106,243, 31,115,176,104,180, 50,
+192, 83, 25, 32,215, 1, 0, 1,132, 50, 7,240, 31,178, 6,230, 63, 3,176,232,103, 2,149,221, 12,235,214,174, 9, 12, 10, 17,
+ 17, 21,131,100,218,255,132, 14, 25,103,102,122,165,173, 2,189, 28, 81, 79,135, 11,220,116, 97, 48,210,186, 7, 20, 39,198,113,
+200, 99, 62,104,226,240,173, 0,184, 0,242,152, 15,154, 56,124,105, 60, 86,240,233,211,167,207,159, 63, 3, 59, 64,192, 42,240,
+245,235,215,144,241, 31, 96, 87,224,203,151, 47, 4,135,128,214, 79,174, 57,112,133,225,227, 3,134,223,223, 25, 38,149, 59, 66,
+198,127,206,157,103,184,240,252, 40, 49,235,165, 62, 62,187, 43,196,207, 45, 44,196,173,174,166,121,239,254,235, 91, 79,223,202,
+ 9,243,255,124,249,234,207,239, 63,240,173, 0,120,252,107,229,224,111,227, 24,185,126,243,170,253,135, 86, 45,235, 43, 14, 46,
+110,187,244,155,225,245,219, 87,120,252, 11, 31,241, 79,180, 50,143,214,146, 95,181,126,223,165, 75, 15,250, 46,159, 93,225, 26,
+199, 48,247,216,211,167,175,225, 91, 1,176, 12, 17,252, 96,255,251,235,205,175, 95,160,203,223,197,165,101, 53, 52, 53, 63,113,
+130,102, 74,190,255,251,198,244,243, 43,231, 87,230,151,207,177, 87, 0,144, 96,252, 1, 6,240, 97, 31,180, 21, 65, 68, 2, 96,
+188, 44, 89,178, 4, 88, 13, 20, 20, 20, 0,107,110, 72, 87, 96,208, 14,251,144, 93,250, 35, 55,255, 33,115, 15,240, 78, 0,173,
+ 11, 8, 96,154, 68, 19,129,167, 73,248, 86, 0, 60,105,210,214, 84,221,197, 90,173,181,169,167,119,194,182,186, 37,251, 50,156,
+ 76, 94,108,220,246,241,253, 39, 92, 37, 50, 80, 60,212,207, 3, 50,236, 3,175, 0,128,160,173,190,146,248, 66,124,180,184,199,
+ 15,208, 70,255,145, 59, 4, 0, 1,196,132,220, 67,255,248,229, 27, 51, 19, 35,176, 66,254,247,255,255,159,127,160, 73,251,139,
+ 23,206, 59, 57,131,110,176,251,251,255, 63, 51, 19,243,231,111,191,254,252,250,137,179, 38,255,251, 87, 81,250,185,168,208, 71,
+ 72,101, 98,101,198, 3,185, 92, 21,216, 9, 48,212,188,243,231,239, 95, 98,154,255, 88,167,130,137,109, 14, 99,155,134, 34,168,
+ 87, 80, 80, 16, 88,238, 3,123, 0,192,106, 64, 84, 84, 20, 50, 33, 12, 44,158, 62,124,248, 64,176, 2, 72,107, 93, 1, 44,247,
+249, 21, 24,128,213, 64, 94,231,126, 96,233, 31,148,223,254,228,223,139,165,125,101,192,144, 36,166,249,111,108,172, 38,170,164,
+ 32, 38, 42,194, 6, 12,121,198,255,175,191,126,127,255,249, 7,145,254,237,237,216, 16,160,169,200,199, 39,204, 37, 42,245,251,
+221,251,243, 91,150,127,120,247,136,200, 52, 49,175, 35,135,161,208,133,229,207, 47,133,175, 12,175,152, 63, 77,122,126,154,129,
+141,143,192,120,215,221, 79,111,152,190, 63, 98,251,102,162,226,168, 21,199,115, 79,240,128,168,232,121, 89,139,123, 31,153, 62,
+255,252,255,253,219,146,127, 28, 60,188,120,218,254, 84, 1, 15, 31, 62, 4,146,192,198,184,136,136, 72, 96, 96, 32,164,149, 74,
+ 59,144,158, 46,136, 57,242, 67,252,108, 48,217,165, 63,114, 65, 15,175,132, 32, 55,182,211,212,191,192, 52,121,252,248,113,200,
+184,191,177,177, 49, 3,248, 34,226,149,155,182, 17,159, 38, 55,174,111,112, 47,207,245,242,114, 22, 97,103,254,204,248,127,231,
+173,199,199,175, 60, 37, 88,124,103, 38, 68,222,187,115, 7,216,240,135, 32, 96,233,143,181, 93, 63, 10,200, 43,250,113,141,255,
+ 0, 1, 64, 0, 33,134,101,128, 37,224,237,107,151, 20,164,132, 56, 89, 89,254,254,253, 7,190,162,153, 33, 45, 61, 27,216, 37,
+248, 11,222, 13,240,237,199,143,235,183,238,177,177,225, 28, 20,249,243,251,157,161,214,125,120,166,207, 42,188,191,118,137, 42,
+164,207, 96,162,115,247,196, 69, 77, 22,102, 81,130,205,127,180,162, 31, 40,200,128,180, 19, 24,127,243, 31, 45, 57, 2, 5, 25,
+144,118,198,226, 2,127,255,254,149,144,144, 0,246, 0, 94,190,124, 9,100, 3, 75,150,183,111,223, 2, 73,200, 45,213,248,245,
+190,126,113,167,166,101, 63,176, 7,208, 93,108,251,229,207,223,162,206,213, 19,203, 67,139,251,182,176,128,238,160, 33,220,212,
+146, 20, 17, 96,101, 96,253,203,192,248,252,254,213,135,175, 62, 42,139, 10, 93,124,247,236,220,221,167,196, 52,255,131,147,138,
+ 88,133, 24,152,152, 25, 22,108,187,191,118, 90,105, 82,199,204, 34, 95,253,108,103,121,130,254, 5, 54,255,123,253,194, 24, 62,
+112, 48, 48,178, 50,244,246,132,156, 62,188,203, 57,147,177, 61,151,241, 68, 25,158,230, 63, 16, 92,124, 33, 98,243,253,227, 23,
+ 78,230,111, 28, 28,202,193,172,192, 66,255, 35, 19,235, 31, 6,181,255,127,191,253,126,243,252,232,228,143,209, 81,202, 52, 74,
+199,240,193,104, 77, 48,128, 8,218,130, 1, 77,243, 15,214, 5,251, 68,118, 11,200, 46,253, 25, 80, 71,255,209, 22,140,210,116,
+ 38,224,214,249, 99,240,160,206, 74, 10,219, 1, 27, 11,218,174,164, 68,112,239, 2, 48, 77,134,187,152,243,255, 19,252,198,192,
+186,182, 63,119,218,150, 11,165, 30, 54, 9,125,203, 66,218, 22, 19,172,183,224,123,199,208,184,163, 43,250,105, 13, 0, 2, 8,
+209, 3, 0,182,124, 63, 60,191,115,247,241, 91, 22, 86,102, 96, 31,224,247,159,191,231,206,157, 93,180,104,254,175,191,255,127,
+255,253,199,198,194,244,234,253,151,167,215,143,115,226,152, 2, 6, 22,157,154,202, 15,161,205,127,112,191,127,237, 18, 53,208,
+ 0, 16,211,127, 32, 98, 98,250,103,161,127,253, 47,238, 78, 0, 90,243, 31,190, 10, 8, 88,244, 19, 44,253,209,154,255,240, 21,
+ 8,192,162,144, 96,105, 8,206,207,239,191,124,249,194,202,202, 10,105,254,255,251,247, 15, 66, 18, 83, 1, 44,238,175, 60,247,
+244, 32,143, 4,104,226,151,151,133, 25, 88, 31,240,177,179,126,120,247, 4,216,252,103, 97, 98, 34,216,252,151, 21,226,189,118,
+239,254,159, 95,191,216, 89,216,190,124,249,113,241,254, 51, 96,209, 79,176,244,135,248,215, 63,167,121,233,164,137,223,254, 49,
+200, 42,203, 92,185,122, 2, 88,250, 19,233, 95, 32, 40, 82, 54,217,124,123, 31,195,199, 63, 12, 28, 34,187, 79, 93, 3,150,254,
+192,162, 31,127,233, 15, 4,250,191,124,142,238, 62,197,240,235,243, 23,198,207,239,153,190,124,100,249,253,251,239, 39,246, 31,
+223, 56,158,221, 95, 81,117, 91,193, 64, 13,207, 12, 48, 16,192, 83, 14, 7, 24,160, 9,226, 7,179,193, 96, 0,243, 9,164,213,
+ 15, 44,211, 25,192,179,193, 4, 39,132, 41, 41,253,129, 69,252,127,220, 75,230,105,183, 28, 8,152, 38,225,107,126,106,106, 11,
+129,105, 82, 92, 92, 28,178, 46, 8, 34, 78, 48, 77,166, 56,232, 21,244, 76,252,252,242,149, 40,159,216,213,107,143,128,165, 63,
+100, 25, 43,145,117, 30, 28, 32,143,234,140,246, 3, 40, 1, 91,150, 52,111,193,123,143, 8, 64, 0,161, 76,204,242,242,242,158,
+ 61,176,225,255,127, 63, 5, 41, 97, 94, 46,118, 45, 29, 3, 45,109,125, 22, 38,134, 47,223,255, 62,122,254,238,212,129,173, 60,
+220, 92,184, 12,250,250,237,155,154,252,243, 31, 63, 57,254, 67,174,205,251,207,192,201,241, 3,152,140,223,125, 96, 7, 10,240,
+114,255,209, 85,123,112,248,140, 33,208, 10,252,205,127,120,171, 31,200,101,253,255,155,225, 15,116,245,216, 95, 22, 46,130,205,
+127,120,171, 31,194,253,248, 10,186,228, 0,207,118, 92,120, 29, 0, 36,129,253, 0, 32,249,238,221, 59, 62, 62, 62,200,248, 15,
+ 49,151,178,130, 87,253,183,103,134,218, 51, 76, 58, 60,173,218, 59,164,120,226,178,142,108, 96, 15,128,141,157,131, 96,243,255,
+218,163, 87, 42,178, 34,123,247,156, 96, 0,111,191, 4,146,191,127, 66,251,218,172,184,181, 67,154,255, 45, 73,206,121,245, 11,
+100,149, 24, 73,242, 47,164,249,239,182,126,222,174,232, 72, 70, 25, 11, 6,240,150, 96, 6,240,225, 16, 16, 5,190, 60, 60,120,
+156,173,247,179,236,226,246, 45, 63,212,143, 41,168,234,124,226,100,184,207,240,240,243,131,215,175,219,254,126,121, 47, 83, 24,
+ 87,140, 63,160,166, 79,159, 14, 44,238,191,127,255, 14, 47,194,128, 92,160,224,144,200, 72,144, 86,255, 75,240, 54,105, 98,102,
+131,129,237,101,242, 74,127, 6,216,229,239,120, 10, 62, 82,247, 18, 19, 9,128,105,178,181,161,102,221,230,237,238, 54, 70,240,
+ 52, 9, 68,198,247,238,121, 4,199, 60,122,251, 77, 78,152, 11,127,243,191, 96,214,230,170,100, 55, 41, 9, 7, 72, 45, 2,113,
+ 42,158,190, 20,145,221,130,209,126, 0, 21,235, 3, 52, 17,128, 0, 66, 95,153,195,199,203,115,238,192,134,251, 50,234, 74,170,
+154,124,220,156,255,254, 51,124,255,249,235,222,189,123,175,239, 93,224,229,225,102,194,221,170,229,228,224, 88,181,195, 30, 79,
+ 27, 31,168,151,155,155, 64,115, 15,178, 6, 20,216,228,255,247,247, 55,168,244, 7,131,223,140,172,184, 14, 99, 64, 6,144,245,
+103,192, 38, 48,188, 28, 36,178,244,135,215, 1,240,205, 95,192, 58, 0,103, 0,225,168, 3, 22,195, 54, 66,205,110,131,237,137,
+253,253, 69, 17,175, 46, 96,243,255,212,155, 15, 23,110,131, 6,124,224,229, 62,193,210, 31, 2,128,205,255,181, 70,220, 57,129,
+ 26,100,248, 23,216,252, 47,222,180,138,177,181,126,187,184,249,132, 47, 87,224,226,134, 44,172, 50, 28,132, 79,124, 2,246, 3,
+182,111,250,241,228,253,221,215,111,159,191,188,197,195,252,151,207, 90,207,214, 49,206,145,166, 9,119,192, 55,253,146,177, 6,
+ 52, 61, 93,144,140,210,159, 97, 64,167, 52,129,105,210,210,210, 18, 45, 77, 2, 75,127, 6,208, 84, 48, 23,126,189,192,230,191,
+235,158,147,209,245,139,236,236,236,196, 81,123,147,100, 87, 87,144, 58,128, 96,128, 96, 86,150,163,117, 6,158,114, 31,121, 38,
+ 0, 32,128,176,148,111,192,246,239,207,119,143,207, 29, 0, 45, 23,129, 92,184,204,206,206,142, 57, 55,139, 6, 88, 89, 89,249,
+137, 56,242, 1, 15,128, 12,248, 48, 3,155,252,127,190, 49, 35, 21,253,196,156, 88, 13, 25,240, 1, 22,133,200,165, 33, 49, 69,
+ 63,191,168,212, 47,220,211,218,248, 65,116,243,226,219, 55,174,146,237,223, 83,183, 30, 67,178, 25,114,233, 79,176,232,135,128,
+ 56, 35,110,242,252, 11,138,211,254, 50, 72,209, 15, 47,253,137, 44,250,225,192, 83, 49,132, 1, 82,185, 17,183, 70, 6, 88,124,
+ 67, 54,253, 2,219,251,240,221,191, 64, 6,164,249, 15,100, 12,254, 67, 29,200, 88, 3, 74,139, 70, 58,173, 1,214, 52, 73,176,
+232,135, 0,215,154,217, 84, 44,250, 73,170, 14, 71,203,122, 92, 0,237, 70,120, 6,140,121, 96,128, 0,194,222,192,101, 97, 97,
+193, 53, 86, 67, 11, 0, 25,229,135, 20,253, 12, 36, 22,253,144, 81,111,242,138, 66, 6,208,202,165,127,196,116, 47,176,130, 87,
+239, 62, 18,111, 17, 50,128,140,242,147, 87,244, 83,226, 95,200, 40,255,230, 47, 95,200, 46,250, 71,193,112, 5,144, 37,158,143,
+222,126, 35,163,232,135,148,191,240,209,158,161, 91,255, 13,215, 58, 0,143, 44, 64, 0,141, 94, 10, 63, 10, 70,193, 40, 24, 5,
+ 35, 20, 0, 4,208,232,141, 96,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64,
+ 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0, 13,252,165,
+240, 35, 77,239,143, 23,143,137,215,203, 33, 33, 59, 26,206,163,122, 71,245,142,234,165,209,165,240, 0, 1, 52,168,123, 0,164,
+238, 2,191,119,239,222, 30, 24, 0,178, 71,171,119, 60,224,227,199,143,143, 30, 61, 58,126,252,248,185,115,231,128, 12,242, 12,
+161,226, 41,111,163, 96,144,131,155, 55,111,146,164, 56, 35, 35,131,108,139,200,214, 59, 10, 72, 5, 0, 1,196, 50,104, 93, 70,
+106, 9, 14, 84,223,209,209, 17, 22, 22,134,172, 93, 73, 73,137,120,237, 64,176,122,245,234,208,208, 80, 37, 48,192,175, 62, 45,
+ 45,141,160,153, 64,199, 96, 93, 13,189,123,247,124, 98,244,190,127,207, 77,163,176,125,245,234,213,207,159, 63, 25, 25, 25, 57,
+ 56, 56,126,252,248, 1,172, 0, 78,159, 62,173,175,175,175,162,162, 66,146, 57,196, 28,149, 1,174,200, 51,137, 81, 54,115,230,
+116,106,235, 77,199,161, 24,253,232, 49,130,233,138,161,158,145,177, 9,163,242,171,103, 12,187, 30,202,192,174, 65,208,121,238,
+238,160, 35,117,201, 59,188, 26,114, 22,116,122,186, 32, 37, 43,235,129,165,106,127,127, 63,193, 13,119,169,169,105, 64,111, 97,
+198,106, 73, 73, 49, 49,218,225,169, 98,194,132, 9,246,246,246,192,114,124,217,178,101,159, 62,125, 34,104, 41, 74,145,196,194,
+ 28, 97,197,150,158,145,222,181,163,187,196,181, 4, 34, 56,123,246, 44,172,122, 99, 98, 64,187,148,185,185,177,228, 20,200,205,
+ 78, 9, 9, 9,163, 59, 18,144, 1,100, 95, 24,124,245, 63, 64, 0, 97,175, 0, 48, 15, 27,161,209,241, 35, 84,172, 0,224,165,
+ 63,208,157,144, 61, 41, 64, 19,136,172, 0, 32,153, 28, 82,156, 65,206,189, 42, 47, 47, 39,172,119,181, 16, 33,131,113,134,216,
+ 87, 95, 2,183,168, 51, 16,113, 72, 26,121,247, 96, 0,219,254, 98, 98,208, 11, 30, 56, 57, 57,129,149,193,135, 15, 31,248,249,
+249, 79,157, 2, 93,158, 76, 76, 29, 0, 12, 94, 72, 40, 1, 67, 44, 56, 56, 24, 24,224, 4,107,130, 77,155, 54, 64, 24,126,126,
+ 1,184,216,184,244,126, 63,150, 3, 13, 18,171, 41,112, 54, 50, 23,200,192,165,119,199, 14,148,203,205, 14, 29, 58,212,214,214,
+134, 28, 80, 75,150, 44,193,159, 48, 58, 59, 59, 59,216, 59,193, 5,113, 40, 74, 22,168,103, 36, 53, 73,211, 63, 19, 33,151,254,
+ 64, 47, 3, 99,124,233,210,165, 71,142, 28,241,138,170,198,165,248, 24,198, 21,218,235, 87,131, 74,255,127,255,254,205,154, 53,
+ 11,168,157, 79,206, 30,107,161, 15,239, 14,222,184,113, 3,200,141,140,140, 4,178,163,162,162,136,169, 54,122,118, 67,111, 33,
+126,177,243, 57, 80,239,178,124, 46,160,145,229, 30,101, 12,224,216, 91,190,112, 89,134, 61,190, 62,129,177,177, 49,241, 77,189,
+209,210, 31, 25, 0, 4, 16, 19,214, 98, 5,152,189,129,145,141,150,225,137, 28,144,161,100,236, 5, 89, 47,164, 49, 78,188, 94,
+160,131, 93,192, 0, 82, 7,144,148, 32, 32,165, 63,208, 58,208,245, 20, 96, 75,137,244, 5, 99,216,123, 8,194, 35,130, 11,240,
+108,153, 14, 65,120, 68, 8,150,254,255,193,128,248,209,152,247,239,223, 3,203,122, 96, 5,144,148,148, 20, 29, 29,205,198,198,
+ 6,172, 3,128,253, 0,160,247,153,153,153, 9, 30,175,127,237,218, 53,160,189,107,214,172,129, 4, 23,208,210,181,107,215, 2,
+ 27,122, 64,113, 58, 39,101,180,202,128, 70, 77, 16, 96,233, 15, 76, 18,225, 55,194, 64, 45,125,212,192,175,248, 89,142,214, 39,
+192, 5,128,225, 83, 90, 90,170,168,168, 72,134, 27,128,122,129,109,127, 97,225,189,148,183,253,225,165, 63, 73,218,225,165,127,
+113,113, 49, 30,237,200,201, 15,216,252,183,179,179, 3, 50,128,117, 0,176, 31, 64,176,220, 64,211, 27,110, 9,106,149, 46,203,
+231, 4,246, 3,202,220, 75,241,235, 5,182,253,129,118, 1,187,227, 46, 24, 0, 34, 53,218,252,199, 83,250, 3, 1, 64, 0, 49,
+ 97,235,114, 66, 47,134,134,180,163,225,205, 61, 98,138, 99, 72,158,161, 36,191,145, 55,128,131,181, 76, 39, 85, 11,188,242, 0,
+ 54,255, 9,158,127, 59,176, 0, 94,250, 3,201,167, 79,161, 23,110, 60,121,242, 4,127,102, 3,182,253,191,125,251,198,196,196,
+ 4,244, 35,144,253,236,217, 51, 86, 86, 86, 22, 48, 0, 50, 32, 71,117,162,109,232, 71,203,168, 19, 39, 78, 4, 22,253, 33, 33,
+ 33,192, 2, 5,104, 8,176,112, 4,178,129, 82,147, 38, 77, 26,102,185, 5, 94,250, 3,217,192,178, 27,222,182,128, 4, 62,188,
+131, 72,100,249, 2, 84, 6, 12, 49, 96,162, 34,111,214,164,178,178, 18,168, 23, 79,212,224, 41,253,251,250,250,128, 81, 6,172,
+ 72,128,197,247,225,195,135, 25,192, 39, 50, 17, 95,250, 67,180, 3,211,204,153, 51,103, 32,218, 9,218, 8, 84, 31, 17, 17, 1,
+225, 2,235, 0, 7, 7, 7,160,237, 27, 55,110, 36, 56,144, 8,108,254, 51, 48, 50, 44,205,131,158, 63, 1,236, 7, 68, 90,179,
+131,250, 1,120, 1,158, 82, 98,180, 91,128, 86,250,167,149,163,151,138, 0, 1,196,130, 53,177,194, 47,134,190,135,116, 49, 52,
+193,180, 78,173,210,159, 42, 21, 0, 37, 0, 88,121,144,237, 17,186, 1, 96, 81, 2, 44,250, 95,188,128,222,194,136,204,198, 5,
+ 94,191,126, 13,204,201,192,150,254,157, 59,119,128,218,129,121,245,215,175, 95,192,236, 7,172, 0,128,228,223,191,127,129,213,
+195,250,245,235,113, 69,244,222,189,160,118, 40,176,196, 71, 86, 0, 97, 67,138, 39, 60, 41, 4,121,132, 7, 23, 27, 79, 99, 31,
+215, 88, 16,158,193, 31,180,145, 31, 72,155,148,164, 52,208,193,222,201,136, 90,161, 66,198,253,239, 17, 51, 60,136,212,132,135,
+212,145,144,146, 14, 24,134,196,183, 73, 33,122, 85, 85, 85, 25,136,158,110, 65, 6,153,153,153,240,193, 46, 32, 27, 88,124, 3,
+ 13, 33,190,244,183,183, 6, 29,201, 8,108,251,151,148,148, 0, 27,230, 16,237,190,126,169,248, 47,246,131, 55,255,225, 0, 50,
+ 22,180,109,219, 54, 13, 13, 13, 96,147, 29,191,222,112, 75,148,131,185,192, 99, 65, 12,203,151,157,191, 41,113, 19,191,222, 81,
+ 64, 70,233, 15, 4, 0, 1,132,125, 14, 0,216,165,130, 52,252,225, 23, 67,147, 84,250, 99,109,135,226, 25,158,198,165, 23, 89,
+156,118, 7,254, 1,125, 10, 63,118, 28,217, 13,228,141,216,254, 95, 37, 72,182, 75,190,248, 16,158,240,132, 59, 18,173, 68,144,
+145,145, 65, 86,128, 53,184,222,189,123,199,203,203, 11, 36,143, 29, 59, 6,172, 6,128,165, 63,176,201, 15,185,250, 6, 88,180,
+253,254,253,251,231,207,159,120,154,168,144, 94, 17,102,152, 0, 69,214,172, 89, 3,148,197, 19, 92,148,207, 1, 0,203,122,228,
+226, 30,194, 38,178, 26, 0, 22, 73, 36,215, 1,224, 33,126, 72,202, 71, 76, 38,129, 5,137,159, 91, 66,174, 35, 25, 96, 23,187,
+147, 55, 40, 1,236, 4, 64,102, 47,136,215, 14,140, 74,248,248,187,141,141, 13,176, 4, 39,169,237, 15,212,254,231,207, 31,100,
+237, 7,143,254,237,233,204, 32,216,252,135,148,248,152,160,191,191,223, 59,186, 6,151, 94,164,209,127,212,254, 1, 17,122, 71,
+ 1,217, 0, 32,128, 88,240,164, 90, 72,243,159,206,109,127,228,145, 40,250, 44,229, 68, 30,237, 65, 94, 31,130,191, 68,195,217,
+159,133,141,254,147, 81, 19,192, 71,255,241,215, 4,209,209,209,220,220,220, 60, 60, 60,192,210,156,159,159, 95, 80, 80, 16,216,
+188,138,141,141,133,200,114,112,112,184,185,185, 1,125,129,121,204, 31,176,196, 7,150,254, 63,126,252, 0,234, 98,103,103, 7,
+102,239,255,160,203, 62,255, 2,197,129,165, 63,144, 65,112,128, 2,215, 48, 32,176,161, 74,135, 65, 51, 92,179,193,196, 0, 72,
+ 29, 64, 66, 60, 54, 97,241,108,216,245, 80,240,212, 20,177,134, 32, 55,255,225,213, 54,145, 13, 11,228,230, 63,214, 42, 31, 63,
+ 88,182,108, 25,196, 16, 96, 29, 64,198,208, 63,164,229, 7,236, 26, 22, 22, 22,158, 57,115, 6,166,157, 64,242,152, 56,113, 34,
+218, 37,157, 43, 86,172, 56,120,240, 32, 48, 93, 65, 90, 36,120,214,167, 79,152, 56, 33,194, 2,165,249, 31, 61,233,219,138, 99,
+191,129,122, 13,163, 12, 51,236, 51,136, 95,219, 62, 10,136,108,254, 3, 1, 64, 0, 49,225,105, 23, 67, 18, 1,124, 50, 0,255,
+ 48, 92,121,121, 57,121,238,195,165, 87, 9,124, 31, 41,241,173,120, 52, 0, 89, 17, 68,234,176, 41, 49,139, 59, 7, 3,152, 53,
+107, 86, 95, 95, 31,156, 11, 41,253,253,192, 0,200, 0,102, 57,172,186,128, 21, 6,176,148,127,255,254,253,155, 55,111,128,228,
+ 55, 48,248,242,229,203,167, 79,159, 62,126,252, 8,236, 13, 0,123, 0,120,174,244, 1, 22, 64,192,150, 62,193, 74,116, 80,129,
+ 67, 72, 0, 46, 8,244, 62,156,141,103, 92, 27,121,220, 31,185, 45, 79, 82,179, 0, 77, 49,176, 56, 6,134, 33,217, 51, 1, 64,
+189,196, 36,105, 96,137, 15, 76, 3,144,137, 95, 96, 29, 0,241, 59,241,151, 46, 84,151,219, 3,181,255, 91, 41, 0,212, 14,108,
+122, 67,180, 31, 58,246, 15,214, 28,199,217,252,135, 15,248,128,198,109,150, 47,205,204,204, 4,154, 83, 80, 80, 64,208,106, 80,
+243,159,129,113, 41,172,249, 31, 53,241, 27,115,196,199,229,199,126, 1,245,118,238,232, 26, 45,196,105, 84,250, 3, 1, 64, 0,
+177,224, 42, 95,224, 67,255,240,201, 0,252,133, 35,164, 28,135,180,229, 73, 29,174, 65,211, 11,233, 19, 0, 5,201, 27,246,129,
+ 47, 3,165, 39,128, 52,252,201, 27,255,129, 52,252,137, 25,255,129,103,111, 8,163,177,177,113,254,252,249,176, 33, 20, 63, 8,
+ 3,216,252,199, 85, 1, 8, 11, 11,191,125,251, 22,216,222,127,253,250, 53,176, 7, 0,108,223, 65,122, 0, 95,191,126, 5,214,
+ 4,192,210, 31, 88, 13,148,149,225,156,115,131, 52,243,177, 46, 17,134,200,226,113, 51, 85,230, 0,136, 20, 71, 6,144, 97, 19,
+244, 2,174,186,186,181,181, 85, 68, 68,132,166, 73, 2,179,249, 15, 7, 4,103, 2, 48,155,255, 36,181,253,129,125,196,152,152,
+ 24, 96,228, 2,189, 95, 85, 85, 5,236,253, 16,127,161, 77, 77,133,253,129, 3, 7, 24,215,128,238,103,221, 85,195,235,214,242,
+ 25,168,189,181, 19,212,138,199,223, 5,129,172,253, 7,183,250,151, 29, 60,120,248, 63,227,255,194,130, 66,117,117,117, 98, 44,
+ 5,234,141,176, 98, 69,180,250, 25, 64,122,197,221, 36,200,152,249, 24, 5, 88,202,243,206, 10,204,138, 1, 50, 66, 0, 16, 64,
+ 44,120,218,254,192,210, 31,121, 50,128, 96,215, 21,185, 28, 39,175, 31, 0,209, 75,225,200, 15,196,205,100,150,227,131, 62,193,
+ 65, 6,169,224, 87,117, 39, 38, 38,162,141,207, 0, 5, 33,249, 16, 19,200,200,200,220,185,115, 7, 88,226, 3,155,252,191,127,
+255,134, 12,253,255,248,241, 3,178,150, 20, 50, 39,172,172,172,140,167,102, 5, 26, 14,233, 4,192, 83, 2, 48,168,209, 68,176,
+ 2, 90,204, 1, 32,143, 8,225, 10, 43,172,226,192, 0, 4,214, 1,225,225,225, 43, 87,174, 36,126,160, 18,141,221,209,209,145,
+246, 52, 61, 12,152,210,176,109, 4,115,119,119,191,127,255, 62,218, 46, 4, 8, 0,138, 51,224,221, 20, 22, 26,186, 58, 52,212,
+217,213,245, 30,230,100,195,219,183,206, 12, 12,239,211,211,113,230, 68,248, 85,136,144, 78,198,174, 93,187, 24, 72,185,206,140,
+137,137, 17,212,136,129,148,254,151,254,204,223, 15,186, 8, 19, 88,250, 19,147, 53, 32,201, 9,216,234, 7,146,133, 69,133,234,
+106,234, 68, 90, 90, 90, 86, 2,214,203, 0,108,245, 67,244, 74,184, 73,130, 70,155, 70, 11,127,218, 3,128, 0, 98,193,213,157,
+135, 79,252,194,151,121, 16, 51, 38, 78,149,177, 32, 82,119, 0,140, 64, 0, 31,114,129,151,113,144,221, 27,200,130, 88,199, 76,
+129,117,195,182,109,219,254,252,249,243,225,195, 7,200, 28, 0, 3,120,117, 16,144, 11,100, 19,140,187,252,252,252,137, 19, 39,
+ 66,170, 1,228,113,127,160, 56,173,235, 78, 96,113, 79, 76,161,143,181, 52,196,172, 24,128, 77,108, 34, 75,127,204, 82, 24,121,
+ 66,152, 96, 39, 0, 83,240,193,131, 7, 12, 68, 44, 49,128, 15,192,162,186,220,133, 24,255, 2,251,121,192,162, 31,121,240,157,
+ 24, 0,212,254,111,165, 32,176,220, 7,178, 23,236,255,181,226,216, 47,160,246,195,199, 73, 24,173, 58,116,232, 80, 65, 65, 1,
+145,173,126, 56,128, 36,194,149,199,127, 3,245, 74,184, 75,194,234, 19,162,244, 66,182,251, 66,166,247,209,162,105,116, 39, 48,
+ 3,182,235,192,208,118, 2, 3, 4, 16, 11,214,236, 1,217, 84,133,220,244, 35, 56, 4,132,158, 61,200,173, 3, 40, 55, 4,126,
+ 26, 4,145, 0, 88,217, 96, 29,194, 38,166, 18,194, 28,243, 33,126, 20, 8,115,204,135,200, 81, 32,248, 76, 53,114,222,198, 42,
+136,181,153,230,237,237,189,116,233, 82, 54, 54,182,159, 63,127, 2,235,128,127,255,254, 9, 8, 8,188,127,255,158,152,205,207,
+ 90, 90, 90, 64,243,119,239,222, 13, 89,246, 3,217, 19, 48,228, 50,216,190,125,251,128,129,176,101,203, 22, 50, 74,127,120, 89,
+121,175,188, 28, 79, 87,181,180,180,148, 1,199,242,185,178,178, 50,252,115, 0,233,233,130,184,244, 2,219,254,196,148,227, 4,
+251, 64,120,128,123,203,103, 56,155,164,210,127,218,180,105,228, 69, 71, 79,119, 47,168,201, 79, 1,192, 90, 89,194,111,159, 30,
+ 5,120, 0, 64, 0,225, 92, 6, 74, 80,132,166,128,158, 59, 0, 48,231,250,136,174,102,200, 44,248, 64,122, 57,201,116, 45,100,
+116, 11, 82, 57,161,141,116, 33, 11,226,247, 81,116,116,244,221,187,119,247,239,223,255,253,251,247,191,127,255,250,250,250, 2,
+139,114,226,195,220, 21, 12, 32,109, 55, 34, 27,254,212,154, 3,192,197,198, 83, 26,162,173, 75, 33,102, 55, 19, 3,252,168,159,
+123,161,200,193, 2,204, 5,105, 79,211, 25, 97, 27,193, 32, 82, 88,123, 90,120,194,223,217,217,153, 96,130, 36, 67, 10,238, 95,
+ 96,140, 4, 6, 6, 66, 78, 31, 34, 21, 48,133,191, 7,106,247,243, 79,131,180, 21, 32,139, 62,145,143,121,160, 5, 48,142, 49,
+ 34, 91, 47,176,129,143,171,158,131, 72,141, 2,252, 0, 32,128, 6,227, 97,112,100, 52, 91,232,223, 8,165,196, 70, 74, 78,121,
+163,150, 79,149,193, 0, 77,240,215,175, 95,204, 96, 64,237, 8,157, 62, 64,122,177, 36, 36,200,241, 97,132, 65, 61,244, 96, 40,
+228,222, 33,176,244,135, 84,180,131,115,139, 41,133,123,101,192,218, 9, 15,189, 83,125, 57, 38,254,115,126,104, 87, 89,142, 14,
+ 10, 1, 1, 64, 0,141, 94, 10, 63, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,208,232,141, 96,163, 96, 20,140,130, 81, 48, 66, 1,
+ 64, 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0,177,140, 6,193, 40, 24, 5,163, 0, 25, 48, 98,178,254,195,137,
+ 81, 48,172, 0, 64, 0,141,246, 0, 70, 40,192,122, 56,248, 40, 24, 5,140, 96,204, 8, 58, 3,154, 17, 3,140,238,205, 26,110,
+ 0, 32,128, 70, 47,133, 31,161,122,125,109,103, 14,111,255,198,249,233, 34,154, 57, 76, 76,144,229,170,240, 21,141,255, 97, 0,
162, 96,209,166,203,200,122, 63, 60,216,207,193,193, 1, 81, 15, 57, 64, 27, 89, 47,228,212,188,127,255,254, 1,217,191,127,255,
-230,149,181, 27, 1,225,204,200,204,194,254,255,223,159,127,255,254,108, 57,242, 4,121, 81, 40, 46,189,192, 32,122,249,242,165,
-132,132, 4, 25,246, 82,162,119, 52, 47, 48,144,178, 82, 11, 32,128,134,252, 16, 80,117, 53,226, 10,187,214, 86, 51,250,233, 61,
- 5,186, 84,175,213,172, 21,206, 32,213,229,184,246,169,226, 18, 39,213,156,225,214, 87,253,245,149,229,237,125,213, 31,151,164,
-255, 60,190,245, 95,241, 9,175,214, 55, 62,121, 54,110, 94, 92,234,143, 28, 57, 98, 99, 99, 3, 41,250, 33,133, 56,164, 17, 11,
- 47,196,255,193,192,195,135, 15,209,244,158, 59,119,206,216,216,152,147,147,147,133,133, 5,168, 17,174, 29, 82,238,255,133,129,
-159, 63,127,158, 61,123,214, 65,214,110,240,135, 30,208,229,111,223,190, 61,126,252,184,128,128, 0,218,198, 8,194,141, 68, 70,
- 38,118, 14, 33, 1, 65,245,175, 95,158,126,249,252, 24,212, 13, 96,252,207,240, 31,223,136, 16, 48,148,214,172, 89,115,235,214,
- 45, 32, 27, 24,140,197,197,197,196, 91, 7,209,123,239,238, 29, 96,152,179,177,179, 23, 20, 20,210,116, 23,194, 8, 7, 0, 1,
- 52,136, 42, 0, 92, 39, 77, 50,224, 61,104, 12, 82,112, 35, 23,229,196, 3, 74,244, 14, 39, 64,225,222, 81, 58,148, 94,159, 31,
- 94,255,120,104,213,183,111, 63, 21,204,153, 56,101, 24, 85, 31, 93, 50,101,184,248,254, 39,207, 5,174,184, 55,140,210, 88, 53,
- 93,187,118, 13, 88,130, 0, 11, 59, 22, 24,128, 84, 6,144,134,255,159, 63,127,128, 37, 56,176,253, 14, 44,253,247,237,219,199,
- 44,108,130,172,247,219,183,111,231,207,159,183,176,176, 96, 99, 99,131, 95,154, 6,212, 14, 44,155,254,128, 1, 80,227,247,239,
-223,129,106,190,124,249, 50,152, 99,182,170,170, 10, 57, 19,125,254,252,217,192,192,128, 12,189,139,151,157,229,228, 20, 3, 22,
-200,160, 10,128,145,225, 63,100,183, 0,238, 98,249,217,179,103,192,144,137,138,138, 82, 82, 82,130,156, 75, 33, 36, 36,100, 98,
- 98,130, 85,113,130, 59,202,206,184,203, 55,110, 28,224,229, 42,234,111, 50, 52,210,121,254,228,213,174,109, 7, 20,116, 12, 63,
-125,250, 56, 90, 88,147, 13,208,198,123,145,151,254, 3, 4, 16, 11,214,178, 0, 82, 10,224, 98,211,168,244,207,202,194,126, 79,
-250,251,247,239,151, 47, 95,142,167, 14,128,148,224,164, 54,225, 41,212, 11,111,251,147,209,252, 71,187,121, 6,151, 2, 26,133,
- 54,164,199, 0, 39, 33,130,239,222,129,118,205, 8, 9,237, 25,132,201,247,215,227,107,236,199, 22,255,252,246, 47, 72,133, 89,
- 93,244,207, 63,161,255,172, 66,204,159,223,178,113,126,254,174,121,113,202, 89,181,140,111, 92,242,216,218,173,140,215,175, 95,
- 7,150,224, 78, 78, 78,144,114, 28, 8,128,133, 56,228,234, 27, 96, 33, 14,108,191, 63,126,252,120,255,254,253,192,154, 0,109,
-231, 27, 80, 25, 80,205,197,139, 23,129,245, 7,176, 1,203,206,206, 14,209, 11,169, 0,128, 26,129,165,219,229,203,151,127,252,
-248, 65,112,211,220,131, 7, 15,128,182, 0, 75, 94,160, 27,196,197,197, 85, 85, 85, 33,131, 75,196, 0, 74,244, 2,157, 90, 83,
- 83, 3, 63, 12, 21, 88,154, 3,107, 68, 49, 49, 49, 97, 97, 97, 34, 75,255,121, 73, 73, 94,134,134, 64,182, 68,110, 46, 39,151,
-248,151, 79,143, 62,125,188,251,255,255, 95,208,129,113,255, 8,220, 65, 13, 44,238, 69, 68, 68, 22, 45, 90, 20, 31, 31,191,105,
-211, 38, 32,247,208,161, 67,191,126,253, 98, 96,144,195,170,254,109,123, 17,156,205,243,235,183,212,159, 31, 5,165,245,253, 61,
-141,221, 61,211,164,153,254, 78,235,233,115,138,136,194,165,119, 20,144, 84,250, 51, 32, 29, 5, 10, 4, 0, 1,132,189, 7,128,
-124, 4, 10, 46, 54,213, 1,253,207,112,166,194, 0, 20,172, 14, 32, 9,192,235,212,249,129,139, 48,101, 19,215,199,209,180, 25,
- 14, 49, 28,153, 36,120,109,247, 0,130, 31, 31,222,168,221,223,250,138,249,175, 10, 63,131,188,220,127,102, 61, 54, 22, 37, 37,
-182,159, 63,126, 30,125,252,243, 35, 11,243, 63,214, 31,123, 22, 51,121,229,255, 99, 65, 31, 11,130, 95,126, 41, 40, 40,232,232,
-232, 8, 44, 58,129,197, 40,176, 33, 15,105,248, 3,203,110, 96, 43,245,224,193,131, 76, 96,128, 85, 47, 80,229,213,171, 87,109,
-108,108,248,248,248,128,218,129, 34,192,210, 31, 88,138,125,250,244,233,244,233,211,192,106, 0,104, 26,100, 38, 0, 23,184,116,
-233,210,177, 99,199,238,223,191, 15,212, 2,180, 93, 66, 66, 2,216, 10,182,178,178,226,230, 38,188, 21,156,108,189, 64, 39, 65,
-110,254, 65, 22,132,156, 11, 13,108, 69, 17, 83,133, 48, 49,179, 33,115, 95, 76,158, 44, 17, 32,211,221, 61,241,247,239,175,224,
-192, 97,252, 7, 44,253,255,131,186, 0,255,113,143,191,157, 60,121,178,162,162, 2, 24,104, 65, 65, 65,178,178,178,192,138,118,
-219,182,109,230,238,132, 54,253, 50, 50, 46,185,243,124,237,237,167,155, 54, 46,100,102,102, 44,202,141,213,151, 16,153, 85, 80,
- 63,155, 24,189,163, 0, 71,233,143,220,228, 71,171, 15, 0, 2,136,132, 85, 64,180, 62,238, 81, 9, 55,160, 69, 19,158, 66,189,
- 12,100,141,251, 83,189, 45, 15,191,204,146,248, 66, 28,171, 74, 96,219,159,200,230, 63,176, 16, 4, 22,127,152, 92,100, 65, 76,
- 0, 87, 3,191,101, 16,147,139, 21,188,187,122,238,217,211, 79, 98,188, 44, 74,188,255, 89, 68,254,177, 88,122,112,235, 47,230,
- 52,234,101,231,231,100,251,242,253,219,183,191,114,204,223,222, 95, 58,134,165, 20, 99, 98,130, 92,118,127,251,246,109, 96,107,
- 29, 88,136, 11,131, 1,176,101, 42, 32, 32,240,241,227, 71, 96,155, 20, 88, 60, 65, 70,249,209,244, 66,196,129,197, 46,176, 14,
-184,117,235, 22, 23, 23, 23, 80, 23,176,249, 44, 42, 42,202,195,195, 3, 20, 1, 86, 33,144,161, 33,204,202, 3,185,253,190,123,
-247,238,187,119,239, 42, 42, 42,186,187,187,155,153,153,125,251,246,109,223,190,125,192,142, 5,176,250, 33,216,246,223,189,103,
-239,189,231, 31,121, 85, 44,212,220,147,165,205,252,222,255,100, 2,138, 16,212, 11, 44,253,129, 21, 6,176,242, 0, 22,193,122,
-122,122,240, 97, 28, 8,131, 96,233, 15, 44,250,185,121,164,132,132,117,150,174,184,148, 52,111,222,182,243,231,129, 8,216, 3,
- 96, 0, 77,119,127,133,170, 97, 4, 34,124,235,129,128, 5, 61,176,213,159,147,147,195,203,203, 11, 12,186,181,107,215, 2, 29,
-243,230,205, 27, 53, 53, 53,130,169,107,226,249,219, 61, 39,174,204,238,169,100, 97,254,206,244,247,115,215,132,121, 43, 15,157,
-125,198,196, 66,234, 9,163,163,128, 72, 0, 16, 64, 44,196, 23,244,131,121, 42,102,196, 86, 3,144,161, 27,146, 70,111, 48,187,
- 23,240,126, 0,193,158,199,231,207,159,129,205, 82, 96,179,218,212,212, 20,141,123,234,212, 41,136, 32, 86, 0,145, 5,146,192,
-150, 41,176, 25, 11, 44, 26, 32,130,200, 92,172,128,239,199,219,109,143,126, 72,191,103, 54,228, 99, 20,125,205,160,194,194,207,
-196, 40,252,255,199,203,175, 47, 25,175, 62,250,247,226,235, 15, 96, 25,204,240,239, 22,131,145, 59,174, 10,128,157,157, 29, 88,
- 10, 75, 75, 75,187,186,186, 2, 75,118, 96, 17,249,246,237, 91, 96,145, 4,148, 2, 22,241,144,227,143,254, 97,232,133,104, 7,
- 42, 0, 38,123, 96,199, 87, 69, 69,133,159,159,255,203,151, 47,231,207,159, 7,214, 10, 64, 51,127,130, 1,158, 86, 17,176,122,
-123,242,228,137,190,190,190,131,131,131,140,140,204,215,175, 95,129,245, 7,176,155,123,252,248,113,130,131, 57, 64,189, 47,223,
-125, 20, 82,179, 80,178, 13, 23,144, 81,251,249,245,195,163,147, 91,111,239, 93, 72, 80, 47,100,246, 2,216,185, 17, 23, 23, 7,
- 22,184,192,154, 0, 82,244, 67,198,130,128,108,172, 55,228, 64,171, 61, 22, 14, 1, 65,117, 1, 33,117, 38, 38, 86, 96,113, 63,
-119,254,254,164, 68, 71,136,222,212,212, 84,160,227, 33,122,193, 94, 6, 23, 5,216,166, 1,128, 1,187,121,243,230,172,172, 44,
- 73, 73,208, 1,159,123,247,238, 5, 86,102,156, 96,224,237,237,125,236,218,119, 60,190, 94,118,243,113,239,233, 27,115, 58,202,
-101,212,229,191,126,121,191,113,251,233, 75,151,111, 10,252,255,199,246,226,165,119, 78,244,209,171,223, 71,203,107, 82, 1,218,
- 73, 63,152, 29, 2,128, 0, 98,193, 44, 11,224,135,220,226, 98, 15, 42, 64,118,193, 77,161, 94,178,199,127, 40,111,245, 19, 35,
-133,167, 40, 39,123,213, 16, 48, 39, 3,139,251,247,239,223, 99,229, 18, 9,128,181, 5,176,252, 5, 22,250, 10, 10, 10,152, 92,
- 76,240,250,205,227, 99,207,191,123,115,113, 29,126,252, 79,202,136, 93,241,231,217,247,215,178,214,119, 93,250,247,224,227,151,
- 95,255,159,126,254,203,201,194,244,231,227, 11,126,108,237, 24,120, 29, 0, 44, 49, 31, 62,124,120,227,198, 13,109,109,109,160,
-131, 79,156, 56, 1, 25,217,199, 53,136, 15,212, 11,233, 4, 64,244, 2,235,128,199,143, 31,235,234,234, 2,139,111, 96,253, 1,
- 20, 1,138, 67, 86, 7,225,233, 1, 60,122,244, 8,104,190,177,177, 49,176,244, 7, 42, 6,118, 65,204,205,205,129, 86, 3,197,
-129, 53, 7,254, 80, 2,170,249,199,196, 38,109,224, 2, 44,253,153,152, 89, 57,249, 68,229,204,189, 31,158,216,132, 95, 47,208,
-157, 31, 62,124,120,250,244,169,156,156,156,181,181, 53,208, 82,200,200, 79,124,124, 60, 68, 1,176, 14,195, 99, 41, 7,135,176,
-176,168,254,175,159, 31,223,188, 61,255,243,231,251,223,191, 65,243,219, 16,189, 47, 95,188,128,235, 5,181,254,113,212,122,207,
-159, 63, 95,186,116,105,116,116, 52, 48,172, 24,192,215,209, 0,123, 3,149,149,149,192,218, 8,166, 4,231,242,196, 91,159,190,
-149, 31,188,208, 81,146,110,235,227,242,245,203,155, 85,235, 14,206,156,187,118,123, 81,130,210,171, 39,157,159, 94, 8, 9, 9,
-227,209, 59, 10,136, 28, 11,194,172, 18, 0, 2,136, 5,235, 80, 12, 65,246, 32, 7,148,175,209, 36, 6,180,152,182,208,255, 6,
- 49,228,178, 27,173, 50,160,198, 97,144, 56,193,205,155, 55, 97,243,120, 88,184, 36, 1, 96, 17,188,123,247,110,200, 37, 30,200,
- 92,172,221,252,139,239,190,127,252,245,239,226,235, 63,207, 62,252, 17, 63,193,162,183,234,206,195, 7, 87,111,158,252,245,135,
-133,249,215, 63,134, 31,191,254,191,255,255, 79, 84,240, 63,214, 66, 28,190, 0, 20,178,140,231,229,203,151,242,242,242,192,122,
- 11, 50,236, 3, 36, 17, 27,156, 8, 1,248,166, 1, 8, 57, 56,111,142, 3, 86, 78,144, 91, 80, 20, 21, 21,145, 43,182, 51,103,
-206, 0, 73, 96,240, 66, 46,221,195,117,237, 15, 48,180,128,228,247,111, 47,191,124,126,252,247,239, 15,100,189,155,192, 85, 53,
-176, 27, 4,210,251, 31,251,216, 63, 48, 30, 39, 79,158, 12,108,230,219,216,216, 0,185, 71,143, 30,221,176, 97, 67,118,118, 54,
- 82,233,143, 19, 60,255,246, 51,118,219,137,130, 48,239,144,216,224,111, 63, 62,173,223,116, 96,194,180,101,139,220, 76,129,165,
-255,104,217, 77,245,154, 0,185, 14, 0, 8, 32,106,238, 4, 70, 30,137,198,197, 30, 78, 96, 48,148, 2,144,177,123,226,199,127,
-240,204, 25,224,143, 35, 96,241,225,234,234, 42, 40, 40,136,149, 75, 18, 0,234, 2,234,133, 23,247,104, 92, 52,240,253, 47,223,
-111, 70,134, 51,111,126,190,250,251,119,239,189, 31,171, 86,255,216,247, 68,244, 14, 27,255,147,143,191, 31,127,254,247,245, 15,
-195,183, 63,255,217,133, 37,112, 21,217,144,149,254,127,255,254,253,243,231,143,176,176, 48, 15, 15, 15,176, 14,248,253,251, 55,
- 68, 4,109, 59, 24,178, 94,200, 74,127,160,154,239,223,191, 3,185,178,178,178,192,150,181,164,164, 36,176,218, 0,182,193,129,
- 53, 31,196,100, 60,227,162,192,102, 56,176,175,112,246,236,217, 39, 79,158, 64,174,225, 60,121,242,228,151, 47, 95,128,226,192,
-206, 7,254, 32, 2,170, 97,250,247,235,233,249, 61, 31,158,220,250,247,247,247,247, 79,175, 31,157,220,250,235,235,123,252,122,
-225,142,249,246,237, 27,124,118, 26,216, 9,184,122,245, 42,176, 28,135, 92,218,254,241, 35,206,245,148, 64,191,254,249,253,133,
-147, 91,130,131, 83, 8,178, 35, 24, 89,239,236,217,179, 33,122,255,161, 6, 24,176, 3,183,104,209, 34, 96,235,161,169,169,201,
-207,207,207,199,199, 7,210, 21,216,188,121,115,105,105, 41,176,203,133,199,155, 64,189,139, 23, 47,142,200,202,113, 90,115,176,
- 36, 46, 40,175, 44,243,199,175, 47,247,239, 62,158, 57,115,213, 6, 95, 43, 7, 89, 49,226, 19, 21,176,178, 25, 45,220,241,143,
- 5,193,203,125,228,121, 96,128, 0,162,254, 81, 16,152,183,167, 98,178,169,220,222,199, 88,200,143,220,228,199,223,252,199,212,
-123, 10, 40, 84, 93,141,201, 38,102, 8,136,120,189,212,234, 13,192, 23,243, 16,223,252,127,247,206, 5, 62,115, 64, 82, 7, 66,
- 65, 65,193,215,215, 23,216, 12,196,202, 37, 18, 0,213, 3,117,193, 7,124,208,184, 88,212,171,170,168,114, 51,243, 50, 50,252,
-254,255,255,250,251, 95, 75,239,252, 92,126,236,217,233,187,239,158,125,103,120,251,227,239,221, 47,255,159,255,252, 47,171,172,
-130,181, 52,132,172,218, 4, 22,214,192, 66, 28, 88,118,235,232,232,128,171, 76, 33, 51, 51, 51, 72, 33, 14, 41,199, 49, 11,113,
- 72,225, 14,172, 39,128, 10,128,213,188,178,178,242,135, 15, 31, 30, 63,126,252,238,221, 59,160, 83,129,189, 10,160, 56,208, 4,
-136, 50, 92, 46, 55, 53, 53,149,145,145, 1, 22,160, 59,118,236,216, 2, 6,135, 15, 31, 6, 54,204, 45, 45, 45,241,204,121,192,
-245,138, 11,241,191,189,119,225,230,238,249, 87,183, 78,191,190,117,230,195,227, 27,216,153,254,225,215, 11,172,156,128,205,109,
- 62, 62,190,139, 23, 47, 2,107, 29,228,106, 0,210,150, 95,186,116, 41,158, 18,249,215,207,143, 31, 63,220, 97,101,229, 22, 16,
-210,224,230,145, 6, 50, 32,125, 2, 32,120,118,114,234,254, 69,121,174, 26, 95,192, 21, 0, 3,116, 27, 24, 56,216,182,110,221,
-202,201,201, 9, 52, 22, 24, 50, 22, 22, 22,240,174, 64, 76, 76, 12,176, 35,130,223,155,219,182,109,229,227,227,177,179, 55, 55,
- 48,210, 11,204, 74,250,198,248,231,245,171,119, 25,185,205,157, 38, 42, 70, 98, 36,180, 45,128,165,127, 87, 87,215,104, 29, 64,
- 76, 53,128, 38, 2, 16, 64,116,218, 8, 54, 32,141,101,242,198,232,205, 90, 91,145,203,110, 32,151,234,122,225,109,237,196,245,
-113,120, 20,208,122, 79, 22,220, 22,228,157, 1,248,181, 0, 75, 31,103,103,103, 96, 25,138,201, 5,150,170,248, 66, 6, 44, 11,
- 36, 13, 13, 13,129,229, 20, 92, 16,153,139, 21, 72,171,105,233, 94, 61, 43,255,254,227,155,191,255, 62,253,248,195, 14, 44,173,
-127,254,145,227, 97,121,255,231,207,211,175,160, 21, 68,222,170,226,220, 10, 90, 95,176,141,135,192, 87,124,234,234,234,234,235,
-235, 3, 11, 38,200,194, 77,160,179,129, 69,213,250,245,235, 33, 27, 2,128, 34,140, 24,122, 33,187,189,128,233, 86, 77, 77, 13,
- 88,127,188,126,253, 26,178,132, 20,104, 26, 80,228,213,171, 87, 16,189, 64, 17, 60,245, 37,176,103, 3, 89,202, 9, 44,145,225,
- 75, 57,129, 46, 33,184, 26, 7,164,215,197, 25,164,247,238,201,103,231,119, 67,245, 90, 59, 17,212, 11, 44,253,141,140,140,142,
- 30, 61, 10,212, 43, 45, 45, 13, 52,135,155,155,187,170,170,106,210,164, 73,192,174, 15,208,246,190,190, 62, 92,119,196, 3,171,
-188,143,239,239, 0,139,117,126, 33, 53, 9, 41,203,239,223,223,124,249,244,176,187,103, 82, 99, 67,149,148, 12,195,242,124, 46,
-198,176,247,142,113, 12,144, 26, 19,190, 17,248,214,173, 91,192, 52, 96, 99, 99, 3, 52, 31, 88,229, 0,229,166, 76,153, 18, 30,
- 30, 14,169,110,241,131,155, 55,111,133, 4,251, 71, 68,248,233,232,170,191,253,252,241,203,199, 55,105,121,205,205,129,206,206,
-255,190,145, 84,250, 79,152, 48, 1, 24, 41,192, 90, 39, 55, 55, 55, 32, 32, 96,180,160, 71, 30,240,193, 90,238,195, 1, 64, 0,
-177,208,167,160, 39,184,130, 40, 36, 36,132,188,157,192,184, 0,242, 70, 45,242,234, 0, 82, 75,127,226,245,226, 95,117, 67,235,
-163, 29,224,227, 69,112, 91,144,247, 4, 16, 4,192,114, 16,121,181, 15,156,139,103, 9, 16, 92, 22, 77, 13,126, 45, 16, 32,165,
-168,252,195,204,246,207,169,109, 15, 62, 50,240, 48,178,202,243, 48, 61,253,203,200,204,206,114,232,213,223, 31,255, 24, 68,217,
-153,149, 77,236,190, 8, 42, 96, 43,206, 64, 77,120, 96,139, 27,216, 14, 5,150,137,159, 62,125, 2,150,221,144, 10, 0,216,126,
- 7, 86, 90,192, 50,107,243,230,205,144,225, 32,180,108, 0, 20,129,108, 27,214,212,212,132,140,222, 0,245, 66,210, 54,164,223,
- 0, 20, 7,246, 6,190,124,249,130, 63, 97,235,233,233, 1, 75,100,242, 54,115,145,167, 23,232,108, 41, 41, 41,119,119,119, 96,
-173,115,227,198,141, 71,143, 30, 1,107, 59, 1, 1, 1, 96, 85, 52,103,206, 28, 92,123,113,145, 70,129,190,125,120,127,243,199,
-143,119, 2,130,106, 60,188,178,188,124,114, 95, 63, 63,237,232,156, 27, 25,225, 2,172, 0, 96, 1,251, 31,185, 6,240,242,242,
-218,182,109, 27,176,195, 1, 12, 16, 63, 63,191,133, 11, 23, 2,235,117, 13, 13, 13, 98,252,232,237,237,181,126,253,230, 79, 31,
-222, 62,121,246, 60, 63, 59,174,180,162, 45,208,201,202,230,231, 39, 6, 86, 98,203, 37, 96,233,223,208,208, 0,233,134, 2, 59,
-106,192,126, 64, 89, 89,217,104, 29,128,191, 62, 64, 6, 0, 1, 68,205, 10,128,194, 21, 68,100,148,242, 16,240,230,205,220,234,
- 83, 27,177, 14,248, 16,156,254, 5,234, 61, 85,189, 17,173,193,142, 60,140,131,167, 28,127, 51,247,205,169,141,213,228,233, 29,
- 40, 48, 20, 79, 13, 82,176,114,188,244,243,207,235,125,123, 89,255,124,191,244,249,255,158,207,127,216, 24, 25,133,255,255,119,
-148, 20,176,119,115, 22, 50,118,192,209,158, 5,245, 0,128, 77, 96, 96,121, 4,108,194, 3, 11,122, 96, 49, 10, 41,196, 33,141,
-119, 81, 81, 81,107,107,235,157, 59,119, 98, 14,227, 0, 69,128, 85, 5,176,185, 13, 84, 15,108,213, 66,186, 17, 12,176,121, 5,
- 32, 23,168, 0,216,171, 56,113,226, 4,193,105,112, 5, 48, 32,211,227,100,233, 5,214, 1,192, 18, 31,232, 60, 96, 15, 0,216,
-233, 1,246, 93,128,130, 79,159, 62,245,244,244, 4, 54,255, 9,106,255,251,247,231,215, 47, 79,127,253,250,200,249,233, 1,159,
-128, 50, 23,143, 20, 16,237,218,251,146,209, 89, 28,214,152, 3,147, 48,245, 86, 86, 86,192,128, 5,150,254,192,154, 64, 88, 88,
- 56, 46, 46,238,192,129, 3, 68, 58,213,210,210,138,157,157,157,239,218,217,236,236,100, 25, 53,213,174,130,228, 5,211, 22, 78,
- 97,254, 65,124,233, 95, 94, 94, 14,244,236,179,103,207, 56, 57, 57,129,145, 2,236,238,180,182,182, 86, 87, 87,143,214, 1,240,
- 49, 31, 96,161,143,231, 40, 8,128, 0,162,114, 15, 96, 64, 86, 16, 97, 45,212,136,108,254, 99,234, 69,110,191, 67,198,115,112,
-149,227,148,232,197, 83, 22,147, 90, 70, 15,251,147,224,128, 37,154,129,179,187,176,148,204,235,235, 87,152, 31,222, 83,249,253,
-156, 87, 88,220, 74, 87, 67,219, 88,231,187, 4,206,253, 65,192,146, 26,216,246, 7, 54,243, 33,131,245,192,174, 0,144, 1, 57,
-206, 1, 62, 58, 36, 43, 43, 11,172, 3, 48, 11, 44, 96,105, 98, 96, 96, 0,172, 3,128,229, 59, 68, 37,124, 81, 13,252, 36, 56,
-160, 81,134,134,134,103,207,158, 29,156,129, 6,116,188, 24, 24,168,171,171, 3,253, 11,172,198,128,222, 7,134, 70, 53, 81,243,
- 82,255,127,255,250,252,251,215,151,239,223, 95,179,179, 11,178,178,241, 50, 49,177, 44, 89,186, 53, 38,218, 27, 90, 11,162,170,
-134,116, 44,122,123,123,129, 21, 45,144,161,166,166, 70,252,181,210, 70, 70,198,204,166,166, 73, 13, 16,189,255,213,212,212,213,
- 2, 2,240,143, 10, 34,131,206,206,206,209, 82,158,152, 58, 0,107,233, 15, 4, 0, 1, 52,108, 47,132, 33,123,233, 39,114,145,
- 77,106, 19,158, 18,189,163, 0, 63,144,213,212, 6, 34, 32, 3,126,246, 38,254,125, 65,161,161,161,130,130,130,144,165, 62,192,
- 18, 16, 50,164, 3,233, 1, 64, 38,126, 33, 7,130, 42, 43, 43, 3, 5,143, 92,249,138,172,119,194,132, 9,171, 87,175,134, 40,
- 0,157, 20,132,227, 56,104, 96,203,151,224,160,202, 32,169, 65,121,192,128,196,230, 2,164, 26,248, 12, 44,253,129,102, 0,131,
- 13,162, 23,215,152, 23,228,200, 79, 72, 80,147,228, 60, 96, 48, 23, 22, 22,146,161,119,180,153, 79,124, 29,128, 75, 10, 32,128,
- 70, 47,133, 31, 5,163, 96, 20, 96,148, 11, 12, 12,232,135, 61,252, 31,189, 17,108, 24, 2,128, 0, 26,189, 18,114, 20,140,130,
- 81,128,209,248,103, 24,189, 1,114, 68, 0,128, 0, 26,189, 18,114, 20,140,130, 81, 48, 10, 70, 40, 0, 8,160,209, 10, 96, 20,
-140,130, 81, 48, 10, 70, 40, 0, 8,160,209, 10, 96, 20,140,130, 81, 48, 10, 70, 40, 0, 8, 32,196, 28,192,232, 37,203,163,122,
- 71,245,226,210,155,158,158,238, 31,144,190,113, 3,150, 35, 55, 70,195,106,192,245,182,194, 86,220,225, 90,228, 58,122, 41, 60,
- 46, 0, 16, 64, 44,104,169, 28, 83, 5,145,235,198, 6,149, 94, 34,181, 15,148,155, 7, 15, 32,251,204, 9,234, 30, 68,138, 7,
- 64,174, 28, 56,120,240, 32,144,109,111,111,143,255,242, 0,218,133, 18,176,244,247,242, 52,130, 28,163, 55,236, 55, 94, 12, 45,
- 0, 44,253,125,125,149,225,236,234,234,234,209, 48, 33, 30, 0, 4, 16,250, 42,160,255,171, 80,206, 96, 98, 12, 35,225,180,119,
-180,140, 65,210, 9,160,148,232, 69,115, 51, 73,206, 30, 40, 55, 67,192,187,215,119, 94,191,126,254,242,205,151,143, 31,127,243,
-243,179,138,139,240,136,138, 74, 10,137, 18,117,188,218,185,227,211,238,221,189,117,247,193,143,199,207,255,203, 74, 50, 42, 43,
-112, 40, 41,171, 25, 89,102,209,191,218,128,156, 45, 74,163, 98,241,242,229,203, 6, 6, 59,102,204,248,118,224, 0, 67,125,253,
-174,199,143, 31, 75, 72, 72,112,112,112,136,138,138, 42, 41, 41,145, 81, 25, 28, 62,124, 88, 92, 92, 92, 94, 94,158,224,145,156,
-200, 0, 88,250,167,165,165, 49, 48,204,218, 56,122,224,216,224, 3,191,126,149,239,220,153,230,238, 62,203,215,183, 19,210, 27,
- 24,173, 6,144, 1,158,141, 96, 0, 1, 52, 76,150,129,194, 75,124, 70, 70,134,127, 43, 5, 7,191,131,127,255,250,250,248,209,
-229, 95,191,126,171, 40, 10, 56,216,200, 9,240,179,191,255,240,227,233,243, 47,183,239, 61,255,240,241,141,172,156, 46, 43, 27,
-206,171, 95,223,191,185,117,236,224,108,102,134, 79,225,222, 12,214,198, 12,202,242, 12,119, 30,252, 63,114,230,251,182,253, 23,
-183,174, 45,181,178, 79, 21, 20, 81, 35,210, 25,100,183,253,145, 53, 66, 14,146,163, 81, 29,240,238,221,187,188,188,111,162,162,
- 12,161,161, 12, 29, 29,160, 11,185,254,252,249, 3,172, 0,196,196,196,128, 21, 0,176, 79, 32, 37, 37, 69,208,144, 23, 47, 94,
-188,122,245,234,229,203,151,174,174,174, 75,150, 44, 97, 0,239,245,141,138,138,194,127,128, 29, 50,216,182,253, 28,176,244, 7,
-147,163, 96,112, 53,255,129,100,112,240,218,157, 59, 65,100, 90,218, 93, 72,111, 96,180, 43,128, 89,244,195, 69,144,235, 0,128,
- 0, 26, 38, 21, 0,176, 19, 0,169, 3,134, 68,233, 15, 4, 79, 30, 93, 22, 23,225, 48, 53, 84, 4,223,175,196,248,239,223,127,
- 62, 30,118,110,101, 54, 5, 89,254,107, 55,223, 0,101, 21, 85, 44,112,233, 5,150,254,182,198,159, 10, 18, 25,152,153, 65, 21,
-222,239, 63, 12,220, 92, 12,154, 42, 12, 22, 6, 12, 91,246,127, 2,202,122, 7,119,211,116, 8, 8,235,165,146, 52,186,242, 65,
- 72, 72,104,203, 22, 78, 89,217,239,192, 30,192,251,247, 44, 42, 96,240,229,203,151,123,247,238, 29, 56,112,224,211,167, 79,192,
-114, 28,127, 63,224,250,245,235,231,206,157, 99,101,101, 69, 22,252,254,253,251,220,185,115,129,134, 68, 68, 68, 16,227,140,141,
- 27,128, 94, 78, 7,147, 36, 0,248, 61,201,144, 99,239,208,184,120, 98,132, 1,233,196, 64, 60, 92,156,237,161,255,255, 69,222,
-190, 85,122,240, 64,248,233,211, 39, 98, 98,143,148,148, 62,138,137,253, 39,250, 68, 94,160, 59,137, 57,167, 15,143, 22,252, 92,
-106,233,133, 15,254,164,165,237, 4, 50, 32, 36, 68, 10,200, 24,173, 3,176,182,250, 33, 71, 3,193, 69, 0, 2,104, 88,173, 2,
- 98, 28, 34,238,124,247,250,206,239,223,191,205,140, 36,225, 34, 76, 76,140,108,108,204,156, 28, 44,172,172, 76,202,138,130,192,
-158, 1, 80, 13,174,145, 31, 96,219,191, 48,137,225,199, 79,134,251,143, 25,222,127,100,248,240,137, 97,217, 38,134,220, 6,134,
-170, 30, 6, 43, 35, 6,166,255,159,128,106,134, 77,156,234,234,234,110,220,168, 41, 38,198, 16, 21,197, 34, 33, 97, 10, 44,175,
-125,125,125,125,124,124,220,221,221,197,197,197,129, 37,251,202,149, 43,239,222,189,139,235,162,196, 75,151, 46, 93,184,112, 1,
-173,244,135,131,253,251,247, 95,189,122, 21, 79, 89,124,232,208, 33,120,105, 11, 41,253, 33,108,160, 56, 49, 21,222, 41, 24,192,
-202, 37,178,126,197,207,197, 90,250, 43,221,184, 97,187,103,143,236,173, 59,108,159, 62, 73,222,186,161,179,101,179,232,197,139,
- 12, 68,223,233, 13,116, 33,176,216, 5,246,153,136,143, 38,136, 22, 60, 92,252,122,145,139,123, 60, 92, 92, 0, 82,238, 67,200,
- 95,190, 42, 12,163, 0,169,232,199,127,214, 3, 64, 0, 13,150, 30, 0, 85,218,143,255,169, 97, 47,121, 67, 25,240,155,182,136,
- 25, 99,121,253,230,185,186,178, 16,164,220, 71,147,226, 96,103,249,240,241,167,154,178,208,173,123,207,177, 78, 6,220,187,123,
- 43, 28,116, 36, 23,195,142, 67, 12, 83, 23, 51,184,217, 50,120, 57, 48,220,184,195,112,254,234,127, 78, 14, 70, 67,109, 6,119,
-123,134,117, 59,111, 25, 89,210,106, 8, 8,107, 16,209,238,198, 55, 96,235, 30,216,222, 7, 50,128, 45,125,107,107,107,184,160,
-160,160,160,166, 38,139,159, 31,176, 15,116,230,214,173,111, 12, 12,192, 64, 97,199, 28,249,185,124,249, 50,174,210, 31, 94, 7,
-224,186, 35, 37, 58, 58,122, 41, 24, 0, 25,112,255, 2,139,126,160, 8, 68,150, 62,121, 1, 63, 23, 19,240,189,124,169,120,242,
-228, 47, 38, 38, 86, 70,134, 63,255,254,255,251,253,247,223,159, 63,162,135, 15,125, 20, 17,249, 41, 67,236, 74, 18, 96,177,123,
-229,202, 21, 67, 67, 67, 3, 3, 3,226,181, 32,119,110,208,184, 68,118, 35, 72, 45,253, 49,139,251,157, 72,253,128, 81, 64, 16,
- 0, 4, 16,122, 5,128, 57,125, 74,100,161,134,171, 48, 37, 70, 47, 45,198,142,137, 92,166,130,117, 2,153, 72,189,104,202,136,
-159,139,126,249,250,139,163,181, 28,176, 65,118,248,248,227,111,223,127, 3, 69,140,244, 37, 68,133, 57, 31, 63,253,124,231,254,
-123, 22, 22, 38, 85, 37,193,163, 39,191,170,107, 98,209,123,247,193, 15,107, 99,134,159,191, 25,182, 31,100,216,127,252,191,148,
- 56,163,146, 28,131,179, 13,131,134, 50, 35, 11, 51,232, 28,117, 11, 3,134,238,153, 63,240, 15,248, 16,100,224,105, 53,192, 71,
-252,209,198, 37,104,183, 54,230,209,163, 71, 12,224,243,241,145, 5, 31, 60,120,160,165,245,170,170, 10, 20,240,109,109,183, 30,
- 60,208,102, 96, 67, 63, 25, 20,168, 6,127,233, 15, 81,131, 75,202, 14, 12, 32, 37, 62,164,208,135, 87, 12,240, 11,141,169, 14,
- 40,108,254, 3,129,192,245, 27,191,126,255,102, 98, 98,250,207,204, 12,186, 20, 1,114,160,221,223,127,236,151, 46, 17, 95, 1,
- 48,128,239,149, 60,122,244, 40,176,171, 42, 45, 45, 77,204, 68, 11,133,117, 0,121,109,127, 96,113,239, 62,203, 61,120, 45, 67,
-218, 78, 16, 3,200,133,212, 10,108,155,239,140, 22,238,104, 0,235,189,240, 0, 1, 68,120, 21, 16,241,235,130, 48, 91,133, 68,
-182, 19,177,214, 19,196, 87, 60, 88, 93,142,231,242,116, 92,197, 52,124, 2,153, 72,189, 88,149, 65, 76, 3, 54,236,255,173,194,
- 57, 27, 1, 94,243, 3,106,174, 62,126,246,233,251,119,208,181, 86, 42, 74,130,192, 10,224,226,213, 87, 55,111,191,227,224, 96,
- 86, 86, 20,120,255, 17,251, 65,243,143,159,255, 87,150, 7,153,239, 97,199, 96,160,197,200,206,198,240,231, 15,168, 31, 32,192,
-203,112,239, 17,131,187, 29,131,188, 12, 72, 13, 77, 83, 18,188,220, 39,114, 72,122,160, 0,214, 65, 12, 82,157, 10, 41,235,225,
- 21, 0, 77, 75,127, 56,192,117,117, 59,158, 43,221,225,128,245,238,157,159,191,127, 49, 50,179,252,253,255, 31,152, 78,254,252,
-253,247, 27,216, 17,248,251,151,241,246, 77, 6, 6, 47, 82, 93, 2,236, 7, 0, 59, 82,220,220,220,252,252,252,196,215, 1, 68,
- 14,254, 80, 88,250, 87, 87, 87,183,182,182, 2, 75,127,120,101, 0, 36,129,213, 0,176,244,223,188,249, 46,100, 2, 0, 50, 75,
-172,103, 23, 63, 90,250, 99,150,254, 64, 0, 16, 64,131,101, 8, 8,107, 97, 74,100, 65, 76,210, 90, 85,236, 38, 80,105,237, 16,
-208, 37,196, 24,197,207,207,250,254,195, 15, 17, 33,174, 80, 63, 13, 96,254,100,103,103,102, 6,182,215,254,255,247,113, 83,246,
-118, 85, 6,154,240,246,253,119,160, 26,172,122,101, 37, 25,239, 62,252,175,161,204,224,100, 9, 26,242,186,113,135, 65, 79,131,
- 65,144,143,193,211,129,225,223, 63, 6, 96, 39,224,214,125,144, 26,252,129, 76,144, 65,252, 70, 18, 74,198,205,136, 1,192,246,
- 43,176, 5,122,247,238, 93, 96, 75,220,214,214,150,135,135, 7,114, 98,176,130,130,194,169, 83, 98,141,141, 79, 25, 25, 25, 95,
-189, 82, 83, 83, 83,184,246, 12,139, 94, 52,145, 85,171, 86,161, 52, 26,254,255, 15, 15, 15, 39,190, 14,160, 91,233, 79, 70,221,
- 0, 7,239,100,164,217,110,220,252,207,202,192,246, 15, 52,239,251,251,239,159, 95,255,255,126,251,243,231,187,138, 6, 25,142,
-209,209,209, 1,134, 63,145,165, 63, 3,248,154, 79, 96,147, 31, 94,124,163,113,113, 1, 72, 47, 1,174, 12,141, 75, 16, 0,155,
-255,144,162, 31, 72, 34,183,253, 33,179,196,192,202, 96,180,244,199, 90,250, 3, 1, 64, 0, 13,135, 85, 64, 4,123, 30, 4,193,
-255,255, 12, 76,225,239, 41,175, 3, 32,139,145,152,194,222,227,105,254, 3,129,184, 8,207,227,167,159,129, 21, 64,223,244,211,
-118, 86,178, 70,122,226,140,172,140,144,229, 64,144,149, 26, 64, 89,160, 26,172,122,149, 21, 56,142,158,253, 14,172, 0, 68,140,
- 25, 42, 50, 25,242, 19, 24,248,121, 65, 35, 63,141,147, 24, 26,242, 65, 10,142,158, 5,169, 33,105,160,140,242,197,160,180, 91,
- 6,250,230,205, 27,200, 61,136, 91,183,110,125,244,232,145,135,135,135,162,162,226,231,207,159,223,191,127,127,253,250,159, 3,
- 7,128,133,133,137,163,163,163,140,140,204,181,103,175,209,244, 2,219,173,248,111,236,250,243,231,207, 96, 75,204,240,210, 31,
- 79, 53,128,191, 14,248,164,165,205,126,233,210,191,255,255,185,153, 88,152,153, 25,255, 0, 75,255,223,191, 63,255,250,245, 91,
- 95,159, 36,151,112,113,113,145, 52, 7, 0, 47,238,113,113,105, 81, 7, 0,155,249,105,224, 54, 62,114,233, 15,111,254,143, 2,
-252,165, 63, 16, 0, 4,208,232,113,208,176,214, 34,149,214,143, 66,235, 0,188,213,137,168,168,228,157,251,207,244,181,197, 42,
-242, 45, 22, 44,191,204,201,193, 98,160, 35, 6,191, 78,249,223,191,255,119,238,191, 23, 23,195, 62,234,170,164,172,182,117,223,
-197,132, 96,134,255,247, 24, 44,130, 24,148,100, 25,150,110,132,201,229, 51,252,253,203,176,117, 31, 72, 13,237, 2, 10,107,255,
-140,118,203, 64,111,220,184,161,169,121,127,254,124, 32,243,111, 83,211,165,117,235,190,169,171,171, 3, 43,128,123,247,238,189,
-124,249,210,200,200, 8,216,132,199,181, 12, 84, 73, 73,233,244,233,211,120,238, 24, 33,242,122, 94,248, 16, 16,144,164,117, 15,
- 0, 88,178, 67,138,126, 92, 67, 64,184,164, 16,181,154,140,204, 91, 91,187,191,251, 15,252, 98, 99,229,249,207,242,227,223,191,
-143,191,126,125,118,114,254, 47, 39, 71,116,135,152, 17, 88,254, 18, 63,244, 15,215, 2, 47,238,209,184, 36,213, 1,184,214,206,
-226, 1,104,165, 63,124,228,103,116, 54, 24,127,233, 15, 4, 0, 1, 52, 90, 1, 80, 19, 64, 39, 0, 8,141, 2, 9,137,170,124,
-248,248,230,228,217,103,230,198, 82,158, 46, 74, 59,246,222,219,186, 11,148,106,107,138,173,128,165, 63, 80,156,157,157, 13,215,
-126, 96, 35,203,172,173,107, 75,251,231,129, 86,130,206,104, 1,173,254,116,177, 6,173, 4,237,175, 5,149,254,253,243, 24,254,
- 50,240, 17,191, 31,152,212, 54, 59,174, 30, 3,237, 86, 1,125,253,250,213,208,240, 7,164, 36, 49, 49,249,191, 99,199,189, 91,
-183,110, 65, 54,130, 57, 56, 56,216,219,219,227,217, 4,160,172,172,124,249,242,101, 92,157, 0, 96,243,223,216,216,152, 24, 55,
- 64, 22,131, 66, 22, 5, 1,217,196,215, 1,104, 27,205,136,220,119, 6,175, 3,112,201, 18,208,207,196,244,203,220,252,141,148,
-212,151, 75,151,120, 30, 61,250,161,168,248, 85, 91,251,175,172, 44, 3,209,151,109,145, 87,118, 35,107, 65,227,226,247, 56,178,
- 44,154,189,164, 58, 3, 2,144,203,125, 72,111,128,212, 33,205, 97, 6,240,172,233, 0, 8,160,209, 10, 0,203,234, 29, 58, 24,
- 37, 43,167,251,248,209,229,181, 91,110,170, 40, 10,122,187, 41, 11, 10,112,188,255,240,227,252,229,151,192,182, 63,176,244, 7,
-202,226,209,107,101,159,122,248,224,236, 99,103, 63,121, 59, 49,204,110, 7,237, 4,190,251,144, 97,238, 42, 80,219, 31, 88,250,
- 3,101, 41, 47,208,201, 40,253,105, 52, 7, 32, 33, 33,241,224,129,200,153, 51,160,225,157, 91,183,248, 76, 77,181,132,133,133,
-225, 59,129, 9, 30, 5, 97, 97, 97,113,240,224, 65, 70,140, 61, 80,192,210, 95, 69, 69, 5, 88, 67, 16, 83,250, 35,143,254, 67,
-186, 2, 68,214, 1,100, 23,103,184, 74,121,194,165, 63,172, 14,248, 39, 47,255, 13,136,200, 10,115, 50,138, 93,252, 62,197,111,
- 32, 37,122,241,151,254,160, 69,162, 35,126, 2,128, 1,219,126, 96,120,149, 0, 16, 64,132,151,129, 18, 63,197, 74,204, 50, 80,
-226,245, 18,175,157, 18,123,177,250,142, 60,123, 73,154,139,102,101,227, 86, 82,177,120,247,250,206,189, 7,207,143,159,121, 2,
- 63, 11, 72, 92, 76,138,224, 89, 64,130, 34,106,222,193,221,231,142, 79, 91,185,245, 86,219, 84,186,158, 5, 68,231,210, 31, 8,
-212,213,213, 47, 94,244, 74, 76, 60, 3,238, 1,152,132,133,233,115,113,113,145, 84,127,132,135,135,223,188,121,243,204,153, 51,
-204,160,185,118, 38, 96,209,207,198,198, 6,108,251, 3, 77, 38,181,244, 39,163, 14, 24, 5,180, 6,160,181, 64,105,173,238,179,
-220,177,238, 9, 24,157, 12,192, 15, 0, 2,136,133,146, 1, 1,154,234, 37,210,192, 65,229,102, 82, 1,176,172, 7, 34,117,178,
-244, 2,203,122, 34,119,123, 81,203, 23,116,219,195,129, 12,128,197,189, 37, 24, 80, 88,139, 16, 83,220, 99, 2,204,178, 30,200,
-134,108, 11, 24,173, 0, 6, 85, 29,192,240, 16,139,184, 73,181,201, 8, 15, 25,130, 87,190, 3, 4,208,232,165,240,163, 96, 20,
-140,130, 81, 48, 66, 1, 64, 0,141,222, 8, 54, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,208,104, 5, 48, 10, 70,193, 40, 24, 5,
- 35, 20, 0, 4,208,104, 5, 48, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,208,104, 5, 48, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,
-208,232,165,240,212,209,139,231, 88, 52,154,234,189, 7, 6,171, 87,175, 38, 67,239,253,251,247,239,222,189, 75,158,222,209,180,
- 49,170,119, 84,239, 80,209,139, 7, 0, 4, 16,206,141, 96, 68,158,130, 73,117,189, 84, 7,105,161, 31, 25,216,216,102, 45,229,
-196,163, 6, 88,134,226,217,123,137,223,205,112,189,189,189,189,197,197,197, 36,221,150, 14,215,123,101, 42,159, 78,246, 39, 50,
-110, 90,215, 19,158,242,255,205, 95, 32, 99,214,172, 89,224, 75,107, 73, 0,102,234, 43,254,124,250,196,201,201, 9,172, 3, 66,
- 67, 67,105, 23, 5, 68,238,171,192,234,223,129,210,139,203, 52,250, 36, 96, 70, 70, 70, 38, 48,128,108, 97,251,245,235, 23, 51,
-248,108,231,255,255,255, 51,140,130, 81, 64, 61, 0, 16, 64, 44,184,210, 58,214,164,198, 72,232, 86, 57, 72, 38, 33, 79, 47, 49,
- 45, 98,178,193,238,221,187, 25, 56, 52,241,148,194,229,229,229, 98, 98, 98,104, 82,192, 2, 29,191,177, 16,189,144,162,255,196,
-137, 19,144,106,128, 36,189,255,174,213, 49,105, 53, 45,218, 7, 58,174, 0,200,134, 72, 1, 69, 8,250,136,239, 83,209,191,255,
- 12, 43,118,128, 52,122,218,179,106,171, 92, 5,214, 1,160, 10,143,136,106, 64, 88,238,212,235,219, 47, 14, 95,147,255,250,147,
-219,211,253,131,180, 4,227,153, 51,199, 62,125,250,225,228,228, 68,163,116, 70,211, 70, 3, 30,189, 4, 75, 76,226,147, 37,169,
- 0, 24,191, 93, 93, 93,165,165,165,196,236, 55, 70, 6,192,178,158, 5, 12, 32, 59,215,128,137, 4,104,200,223,191,127,255,128,
- 1,144, 65, 35, 7,111,221,186, 21,127,224,120,121, 17, 62, 77,122,219,182,109, 36,169, 31, 5,116, 3,144,253,192,104,235,254,
- 1, 2,136,133,164,210,223,216,216,248,236,217,179, 4, 51, 33,214, 76,133, 71, 47,154, 57,192,178, 24, 50,172, 65,246, 1,147,
-105,190,179, 24, 56,213,102,173,114, 0, 53,141, 87,243,131, 74,127, 66, 37, 56,230,217,241,192, 18, 28,255,169, 44,112,189, 64,
- 54,176, 5,109, 1, 6, 36,233,133,148,248, 16,178, 3,182, 91, 27, 88,250,151, 5,115,116,173,253,129,199,131,252,223,139,117,
-212,152,191,126,255, 95, 20,203,113,226,234,159,239, 95,255,127,251,197,224,104,112,245,234,173,191, 4,187, 2,247, 30,247,159,
- 59,205,205,203,199, 40, 33, 41, 46, 42,174,242,240,238, 47, 5,173,223,172, 28,175,246,172,127,179,126,253,250,192,192,192,209,
-172, 66, 21, 0,140, 95, 95, 95, 95, 96, 29,128,150,134,141,140,140, 26, 27, 27,129, 82,216, 91,100, 44, 44,108, 48,240,248,241,
- 99, 85, 85, 85, 96, 53,192,203,203,123,231,206, 29, 30, 30,158,211,167, 79, 31, 63,126, 60, 59, 59, 27,103,202, 7, 71, 61, 60,
-255,194,115, 34, 68, 4,200,133,180, 18,176,130, 77,155, 54, 97,106,129,139, 0,185,196, 20,232, 27, 55,110, 36, 73, 61, 85,192,
-139, 23, 47, 36, 36, 36, 70,147, 28,158,114, 31, 23, 0, 8, 32, 22,146, 74,127,252, 54,225, 57,168, 4,255, 17,231,104,165,127,
- 71, 71, 71, 69, 69, 5, 92,132,248, 58, 32,205,120, 22,131,176,218,172, 93, 14,240, 86,191,171,171, 43,144, 1, 33, 49,199,197,
-144, 75,112,172,165, 63,102,159, 0,211, 83,240,150, 62,176,198, 66, 14, 10, 98,244, 98,109,233, 3, 75,127,252,222, 20,249, 94,
-164, 42,207,204,201,206, 40, 47,197,252,230,253,191,223,127,152,223,126,248,255,241,203,255, 59, 79,254, 49, 48, 49,136,112, 93,
- 2,250, 75, 73, 73, 9,171,222,127,255, 87,107, 42, 43, 29,127,241, 82, 81, 78, 84, 71, 79,137,153, 93, 72, 94,241,253,251,239,
- 63, 94,189,248,251,228,229, 15, 46, 22,160, 86,125, 92,122,105, 55, 34, 68,124, 20,147,167, 23,179, 69, 66,235,177, 20, 96, 56,
- 2, 45,213,210,210,218,188,121, 51,114,116, 0, 51, 17,158,210, 31, 8, 88, 89, 89, 57, 56, 56,222,188,121,163,166,166,102,104,
-104, 8,172, 15, 38, 77,154, 4,108,245,235,234,234,174, 91,183, 14, 88, 1, 92,186,116, 9, 88, 37,224,234, 7,248,251,251, 67,
-252,139, 43, 23,227, 41,148,129,101, 55, 36,100,176, 54,224,128,226, 47, 95,190, 36,166, 2, 32, 73, 61,164,248,222,191,127, 63,
- 86, 41, 71, 71, 71, 98, 74,118,160,118, 41, 41, 41,117,117,245,209,106,128, 84, 0, 16, 64, 44,152,185, 11, 87,251,157, 62, 14,
- 2,230, 22, 96,233, 79,100,133,129,115,180,135, 33, 13, 72,174,158,101,198,192,246, 29,207,232, 63, 90, 9,142, 86,153,225, 47,
-193, 33, 0, 94,121,156, 56,113, 2,185,249, 79,140,222,101,165, 60,152,185, 52,186,231, 43,126, 93,255,254,253, 99,231, 98,100,
- 98, 98,224,226,100,248,240,233,223,207,255,255,185, 57, 25,127,252, 99,248,254,243,191,140, 40,211,191, 63, 12,183, 31,255,221,
-179,103, 15,214, 78,192,167,143, 39, 4, 4,184,217,216,254,167, 38,152,255,253,251,255,197,171, 95,143,158,126, 96, 96,125,204,
- 41,248,243,249,171, 7, 76,108, 31,175, 93,251,240,244,229, 30, 82,231, 18, 40, 28, 17, 66,190, 89,140, 24,128,124,226, 30,230,
-253,157,184,192,187,119, 46,112,182,144,208, 30, 92, 69, 36,193,250, 6, 89, 4, 79,221, 3, 76, 90, 62, 62, 62,144,114,255,234,
-213,171, 16, 6,164,237, 15, 20,199, 99, 35, 59, 59,251,215,175, 95, 53, 53, 53,129,101, 31, 48, 33, 37, 39, 39, 3, 5,127,255,
-254,189, 96,193, 2, 96, 7,250,220,185,115, 43, 87,174,252,254,253, 59,230, 93, 55, 16,224,237,237, 77,118,164,204,157, 59, 23,
-127, 37, 74, 76,139, 30,110, 8,145,234, 25,192,231, 53, 1,139,239,103,207,208, 47,244, 1, 10, 18, 95,160, 63, 3,131,209,106,
- 0, 19,192,199,124,176,118, 5, 0, 2,136,133,152, 86, 60, 37,197, 49,169, 0,185, 29, 77, 84,171,127, 86, 58,131, 36,195, 44,
- 95, 80, 86,156,117, 54, 13, 62,218, 3,110,245,127, 68,238, 7,224, 47,193, 95,189,122, 5, 47,181,137, 44,193,241, 3, 72,189,
- 2, 44, 47,112, 29,182,129,167, 0,130,140,255, 96,234, 5,106,121,115,173, 72, 18, 60,248, 3, 17,249,254,247,255,143, 95, 12,
-191,193,220,223,127,254,255,103, 2, 49, 46, 95, 58, 11,172, 71, 25, 24,216,208,140,253,248,241, 42, 43,187,160,136,144,192,135,
-119,223, 62,124,252,112,226,204,139,167, 47,255,179,113,127,147, 86,249,242,253,219, 27, 85,189,223, 10,154, 63, 87,206, 62,123,
-231,206, 29, 6, 6,142,209,156, 67, 97,243, 31, 8,128,205,127, 96,113,191,101,203, 22,109,109,237,208,208, 80,130,165, 63,164,
- 2,120,253,250, 53, 23, 23,151,157,157, 93, 79, 79, 15,176, 67, 0, 76, 6, 11, 23, 46, 4,150,254,192, 70,198,222,189,123, 47,
- 95,190, 44, 34, 34,130,231, 42, 27, 96,253,141,107, 8,104,246,236,217,120,172,166,202, 16, 16,208, 16, 50,134,128,128,165, 54,
-102, 5, 64,198,241, 77,163,213, 0,169, 0, 32,128, 6,215,113,208,152,247,138, 16, 57, 56, 0,106,239, 87,220,103, 96,102, 75,
-115, 83, 96, 16, 80,152, 5,190,248, 15,255,232, 63, 85, 6, 49, 32, 19,191,240,182, 63, 50,128,204, 10, 96,118, 47,136,108,177,
- 46, 45,225,198,236, 13,240,126, 42,126,240,235,255,139, 55,192,214, 31, 19, 15, 23,168,171, 14, 44,244,127,252,100, 0,214, 1,
- 64,242,215,111,134, 31,223, 25,126,253,132,181, 64, 81, 43, 15,158, 63, 69, 79, 31,201,201, 42,242,252,103,101,121,243,253,251,
-254,131,143,175,221,121,250,238,221, 23,109,227,191, 95,127,252,249,241,243,239,247,111,255, 94, 60, 98,248,254,149,161,187,187,
-123,244,132, 40,172, 61, 21, 34, 19, 36,164,249,175,165,165, 5,108,248, 3, 43, 3, 96, 5, 0,233, 4, 16, 44,253, 33, 67, 64,
- 6, 6, 6, 28, 28, 28,192, 66, 63, 41, 41,169,189,189, 29, 88,146,158, 60,121,242,224,193,131,151, 46, 93,250,248,241,163,170,
-170,234,167, 79,159,240,220,114, 19, 16, 16,128,217,182,128,244,120,240,247, 15, 6,106, 8, 8,107, 39,128,164,230,255,104, 53,
- 64, 54, 0, 8,160, 65, 81, 1, 64,134,254, 33,221,100,228, 58, 0,158,217, 32,131,245,196,143, 20, 67,202,125, 96,195, 31, 60,
- 10,196, 54,107, 41,245,221, 12, 89,249,227,226,226,178,103,207, 30, 92, 93, 25, 92,189, 25,172,133, 59, 49, 99, 65,241,149, 95,
-165,196,153,162,124,217,128,197, 61, 63, 47, 35, 19, 35,184,225,207,240,255,199, 55,134,175,191,254, 3,187, 5, 95,127,252,255,
-247, 31,251,205, 31,241,249, 95,117,245,239, 73,104,188,219,189,253,213,187,119, 63, 12, 44, 63,233, 9,125, 97, 96,253,249,227,
-219,191, 87, 79,255,127,253,202,248,231, 15,163,144, 8, 35, 3,227,191,209, 92, 65, 21, 0, 73,207,200, 19, 42,192,154, 0,185,
-104,198, 58, 19, 0, 44,217,203,202,202, 88, 88, 88, 22, 45, 90, 52,127,254,252,196,196,196,142,142, 14, 96,137,252,224,193,131,
-239,223,191, 3,179, 9,176,237,159,145,145,129,103,241, 18,217, 83,175, 3, 53, 4,132,181, 19, 64,222,233,173,163,128, 84, 0,
- 16, 64,131,165, 7,128, 60,108,141, 89,208,227, 42,100,145,193,172,179,105,176,162,255,246,234, 73,247,193,171,128, 16,245, 1,
-158, 81, 32, 74, 70,120,128, 14,131, 55,255, 33,189, 1, 56, 27,216, 3,128,236,177,194,156,124, 38, 88,250, 67, 86, 1, 97,234,
-253,243,151,225,235,183,255, 63,127,129,166,124,129, 36, 11, 59, 84, 16, 88, 1,124,255,253,255,237,187,255,175,223,255, 63,119,
-237,207,191,127,160,161,188,171, 79, 81,204,252,243,135,225,217,227, 95,143,239,190, 63,114,252, 61,176,145,119,237,198, 63,159,
-168, 63,108, 44,255, 95,191,100, 56,178,139,225,211,167,255,255,255, 49,216, 56, 49,114,112, 48,120,122,250,227, 95,105,184, 97,
- 65,122, 64, 2, 69, 43,116, 41,185, 65,140,164,123, 23,224, 64, 72,104, 15,221, 18, 51, 90, 2, 6,114,141,140,140,206,157, 59,
-183,121,243,102,100,113, 92, 83,193,192,182,133,128,128, 0,164, 17, 61,111,222, 60, 96, 63, 0, 88, 19, 64,106, 14,160,212,135,
- 15, 31,128, 61,128,111,223,240,221,245,146,154,154,138, 60,116, 3,105,254,227, 31,255, 25,216, 33, 32,180, 78, 0, 37,205,127,
-136,246,209,182, 63,145, 0, 32,128, 6, 75, 5,112,246,236, 89, 92,107, 87,128,226, 4,214,143,178,115,175, 86, 56,196,240,231,
- 44,131, 34,119, 90,171,226,172, 3,192,142,246, 44, 88,101,224, 74,252, 40, 16,242, 74, 80,204, 85,161,152, 57, 28, 88,138, 65,
- 74,127,228, 25, 96, 72,219, 31,194,197,218, 3,128,235, 37,175,100,185,125,251,246,163, 43,147,254,137,254, 99, 98, 97, 96,101,
- 2,229,180,223,255,254, 3, 11,247,207,159,255,255,250,205,240,231, 55,168, 62, 40, 44, 2,117,167,174, 62,125,130,169,247,225,
-173,137,218,218,255, 14, 31,252,203,200,196,240,250, 5, 35, 7, 39,195,193, 29, 12,191,190, 3, 75, 8, 6, 61, 35,214,103,143,
-254,217,219,123, 3,243, 45,158,157,132,192,210,191, 43,155,161,108, 42,249,117, 0, 37, 23, 8,147,167, 23,215,176, 6,125, 0,
-100,229,143,143,143, 15, 36,234, 33,221, 89, 96, 51, 31,171,226,127,255,254,157, 63,127,222,214,214, 22, 46, 2,172, 3, 32,101,
-241,239,223,191,255,254,253, 11,140, 68, 81, 81, 81, 92,147,192,240, 81, 32, 50,218,239, 3, 56, 4,132,214, 9, 32,187,249, 63,
- 90,244,147, 10, 0, 2,136,180, 10, 0, 88, 16,211, 98, 39, 36,164,177, 12,204, 21, 64,134,139,139, 11, 90,219, 31, 82,140, 18,
-191, 85, 21,190, 10, 8,194, 37,166,237,143, 60, 3, 12, 1, 16, 46,100, 49, 40,126,189,240,210, 31,109, 62,128, 24,189,184, 0,
-176,249,143, 75,175,170,170,234,252, 57,191,157, 45, 88,129, 5,192,239, 95,255,216,217, 64,121,245,243,215,255, 63,127,255, 7,
- 22,253,103,175,252,253,251,239, 63,174,117,156, 64,189,139, 23,254,177,119, 96, 14,140,102,254,242,249,255,231,143, 12, 95, 63,
- 51, 42,170,254,255,251,155,145,133,137,227,195,187,127,207,158,252, 42, 41,244,193,223,246,159,144,207,160, 38,199, 48,185,136,
- 33,183,143,162, 58,128,236, 62, 1,121,122, 41, 95,247, 73, 94,202, 7,150,254, 13, 13, 13,200,141,253,174,174, 46, 32, 23,215,
-238,176, 95,191,126, 1,139,176, 31, 63,126, 48, 51, 51, 67,238, 62, 91,187,118,109,112,112,240,247,239,223,129,130, 63,127,254,
-228,225,225, 1, 86, 3,248,189, 67,222, 90,160,129, 29, 2,130,119, 2, 32,140,209,162,159, 62, 0, 32,128, 72,168, 0, 40, 44,
-253,241,104, 7, 22,250,144, 82, 30, 50,110, 14, 95,114,138,220,240, 71,171, 24, 80, 0, 51, 35, 3, 27, 19, 3, 39, 51, 3, 15,
- 11,195,207,207,171,219, 89, 25, 56, 79,165,133, 40, 50,112, 10,205, 90, 76, 84,195, 31,235,154, 31, 72, 9,142,127, 81, 60,114,
-233,143, 60, 31, 64,140, 94,252,165, 63, 30,189,109,157, 51,138,242, 51, 56, 56,128,173, 69, 6, 93,117,102,104, 88, 93,254,251,
-251,239,255,191,255,152, 75, 74, 74,240, 24,222,212, 50,163,164, 36, 3,216, 99,248,245,251,255,223, 63, 12,192, 46,132,131, 55,
-195,231, 15,140, 55, 46, 2, 11, 24, 38, 63,223, 32,252,165,127, 67, 50,131, 10,248, 72, 18,101,105, 6, 10,251, 1, 35, 1, 96,
-238,249, 2,173,236, 2, 3, 92, 90,128, 21, 0,176,172, 7,109,199,208,215,255,243,231, 15, 43, 43, 43,176, 77, 13,108,196, 0,
- 75,255,111,223,190, 1,155,255,130,130,130,120,150,129,194, 1,124, 64,149,152,193,159,193, 48, 4, 4,239, 4,144, 17,206, 68,
-110, 23, 24, 5,152, 0, 32,128,136,173, 0,104,212,246,199,218,181,199, 28,240, 33,219,106,130,163,255,148,148,254, 12,168, 51,
-189,240, 58,140, 1,188,154,150,160, 94, 92, 51, 1,196,232,237,155, 56, 3, 24, 92, 76, 76, 12, 71,206,130, 70,252, 33,179,190,
-224,161,255, 18,130,122,123,122,102,100,100,130, 55,124, 48,129,180,156, 58,196,240,245,203,191,255,255, 24,252,252,188,221,221,
-221,241,148,254,229, 49, 12, 2, 60, 12,207,222, 48,112,178, 51,252,251,207,192,205,193,208,154,206, 80, 61,115,152,215, 1,184,
-186, 23,196,164, 73,180,210, 63, 35, 35, 3, 82,244,111,222,188, 25, 88, 74, 98,173, 6,128, 21, 0, 19, 19, 19,176, 61,251,249,
-243,231, 51,103,206, 24, 26, 26, 2,171,129,143, 31, 63, 94,188,120, 81, 81, 81, 81, 88, 88, 24, 88,250, 3, 69, 8,118,104, 32,
- 59,194, 72,234, 16, 12,248, 16, 16,121,109,127,178,117,141, 2, 32, 0, 8, 32,244, 10, 0,215,146,127, 34, 87,191, 81,210,131,
- 6, 42,192, 60,148,141, 96,105, 56, 43,109, 38,104,180,231, 22, 3, 8, 33,192, 71, 48,186, 79,182,155,137, 41,133,225, 62, 2,
-150, 17,144,253, 4,192,106,131,212,171,140,129,122,151,150,112, 67,234, 3, 82,111,232,133, 7, 23,100,214,151,248, 14,199,140,
-233, 8,189, 95, 62,129, 10, 8, 63, 63, 63,194, 97,181,132,250,197, 40,173,245, 14,224,208, 63, 3,234, 52, 47, 48,192,129,101,
+230,149,181, 27, 1,233,138,145,153,133,253,255,191, 63,255,254,253,217,114,228, 9,242,162, 80, 92,122,129, 65,244,242,229, 75,
+ 9, 9, 9, 50,236,165, 68,239,104,222,103, 32,101,165, 22, 64, 0, 13,249, 33,160,234,106,196, 21,118,173,173,102,244,211,123,
+ 10,116,169, 94,171, 89, 43,156, 65,170,203,113,237, 83,197, 37, 78,170, 57,195,173,175,250,235, 43,203,219,251,170, 63, 46, 73,
+255,121,124,235,191,226, 19, 94,173,111,124,242,108,220,188,184,212, 31, 57,114,196,198,198, 6, 82,244, 67, 10,113, 72, 35, 22,
+ 94,136,255,131,129,135, 15, 31,162,233, 61,119,238,156,177,177, 49, 39, 39, 39, 11, 11, 11, 80, 35, 92, 59,164,220,255, 11, 3,
+ 63,127,254, 60,123,246,172,131,172,221,224, 15, 61,160,203,223,190,125,123,252,248,113, 1, 1, 1,180,141, 17,132,251, 4,140,
+ 76,236, 28, 66, 2,130,234, 95,191, 60,253,242,249, 49,168, 27,192,248,159,225, 63,190, 17, 33, 96, 40,173, 89,179,230,214,173,
+ 91, 64, 54, 48, 24,139,139,139,137,183, 14,162,247,222,221, 59,192, 48,103, 99,103, 47, 40, 40,164,233, 46,132, 17, 14, 0, 2,
+104, 16, 85, 0,184, 78,154,100,192,123,208, 24,164,224, 70, 46,202,137, 7,148,232, 29, 78,128,194,189,163,116, 40,189, 62, 63,
+188,254,241,208,170,111,223,126, 42,152, 51,113,202, 48,170, 62,186,100,202,112,241,253, 79,158, 11, 92,113,111, 24,165,177,106,
+186,118,237, 26,176, 4, 1, 22,118, 44, 48, 0,169, 12, 32, 13,255, 63,127,254, 0, 75,112, 96,251, 29, 88,250,239,219,183,143,
+ 89,216, 4, 89,239,183,111,223,206,159, 63,111, 97, 97,193,198,198, 6,191, 52, 13,168, 29, 88, 54,253, 1, 3,160,198,239,223,
+191, 3,213,124,249,242,101, 48,199,108, 85, 85, 21,114, 38,250,252,249,179,129,129, 1, 25,122, 23, 47, 59,203,201, 41, 6, 44,
+144, 65, 21, 0, 35,195,127,200,110, 1,220,197,242,179,103,207,128, 33, 19, 21, 21,165,164,164, 4, 57,151, 66, 72, 72,200,196,
+196, 4,171,226, 4,119,148,157,113,151,111,220, 56,192,203, 85,212,223,100,104,164,243,252,201,171, 93,219, 14, 40,232, 24,126,
+250,244,113,180,176, 38, 27,160,141,247, 34, 47,253, 7, 8, 32, 22,172,101, 1,164, 20,192,197,166, 81,233,159,149,133,253,158,
+244,247,239,223, 47, 95,190, 28, 79, 29, 0, 41,193, 73,109,194, 83,168, 23,222,246, 39,163,249,143,118,243, 12, 46, 5, 52, 10,
+109, 72,143, 1, 78, 66, 4,223,189, 3,237,154, 17, 18,218, 51, 8,147,239,175,199,215,216,143, 45,254,249,237, 95,144, 10,179,
+186,232,159,127, 66,255, 89,133,152, 63,191,101,227,252,252, 93,243,226,148,179,106, 25,223,184,228,177,181, 91, 25,175, 95,191,
+ 14, 44,193,157,156,156, 32,229, 56, 16, 0, 11,113,200,213, 55,192, 66, 28,216,126,127,252,248,241,254,253,251,129, 53, 1,218,
+206, 55,160, 50,160,154,139, 23, 47, 2,235, 15, 96, 3,150,157,157, 29,162, 23, 82, 1, 0, 53, 2, 75,183,203,151, 47,255,248,
+241,131,224,166,185, 7, 15, 30, 0,109, 1,150,188, 64, 55,136,139,139,171,170,170, 66, 6,151,136, 1,148,232, 5, 58,181,166,
+166, 6,126, 24, 42,176, 52, 7,214,136, 98, 98, 98,194,194,194, 68,150,254,243,146,146,188, 12, 13,129,108,137,220, 92, 78, 46,
+241, 47,159, 30,125,250,120,247,255,255,191,160, 3,227,254, 17,184,131, 26, 88,220,139,136,136, 44, 90,180, 40, 62, 62,126,211,
+166, 77, 64,238,161, 67,135,126,253,250,197,192, 32,135, 85,253,219,246, 34, 56,155,231,215,111,169, 63, 63, 10, 74,235,251,123,
+ 26,187,123,166, 73, 51,253,157,214,211,231, 20, 17,133, 75,239, 40, 32,169,244,103, 64, 58, 10, 20, 8, 0, 2, 8,123, 15, 0,
+249, 8, 20, 92,108,170, 3,250,159,225, 76,133, 1, 40, 88, 29, 64, 18,128,215,169,243, 3, 23, 97,202, 38,174,143,163,105, 51,
+ 28, 98, 56, 50, 73,240,218,238, 1, 4, 63, 62,188, 81,187,191,245, 21,243, 95, 21,126, 6,121,185,255,204,122,108, 44, 74, 74,
+108, 63,127,252, 60,250,248,231, 71, 22,230,127,172, 63,246, 44,102,242,202,255,199,130, 62, 22, 4,191,252, 82, 80, 80,208,209,
+209, 17, 88,116, 2,139, 81, 96, 67, 30,210,240, 7,150,221,192, 86,234,193,131, 7,153,192, 0,171, 94,160,202,171, 87,175,218,
+216,216,240,241,241, 1,181, 3, 69,128,165, 63,176, 20,251,244,233,211,233,211,167,129,213, 0,208, 52,200, 76, 0, 46,112,233,
+210,165, 99,199,142,221,191,127, 31,168, 5,104,187,132,132, 4,176, 21,108,101,101,197,205, 77,120, 43, 56,217,122,129, 78,130,
+220,252,131, 44, 8, 57, 23, 26,216,138, 34,166, 10, 97, 98,102, 67,230,190,152, 60, 89, 34, 64,166,187,123,226,239,223, 95,193,
+129,195,248, 15, 88,250,255, 7,117, 1,254,227, 30,127, 59,121,242,100, 69, 69, 5, 48,208,130,130,130,100,101,101,129, 21,237,
+182,109,219,204,221, 9,109,250,101,100, 92,114,231,249,218,219, 79, 55,109, 92,200,204,204, 88,148, 27,171, 47, 33, 50,171,160,
+126, 54, 49,122, 71, 1,142,210, 31,185,201,143, 86, 31, 0, 4, 16, 9,171,128,104,125,220,163, 18,110, 64,139, 38, 60,133,122,
+ 25,200, 26,247,167,122, 91, 30,126,153, 37,241,133, 56, 86,149,192,182, 63,145,205,127, 96, 33, 8, 44,254, 48,185,200,130,152,
+ 0,174, 6,126,203, 32, 38, 23, 43,120,119,245,220,179,167,159,196,120, 89,148,120,255,179,136,252, 99,177,244,224,214, 95,204,
+105,212,203,206,207,201,246,229,251,183,111,127,229,152,191,189,191,116, 12, 75, 41,198,196, 4,185,236,254,246,237,219,192,214,
+ 58,176, 16, 23, 6, 3, 96,203, 84, 64, 64,224,227,199,143,192, 54, 41,176,120,130,140,242,163,233,133,136, 3,139, 93, 96, 29,
+112,235,214, 45, 46, 46, 46,160, 46, 96,243, 89, 84, 84,148,135,135, 7, 40, 2,172, 66, 32, 67, 67,152,149, 7,114,251,125,247,
+238,221,119,239,222, 85, 84, 84,116,119,119, 55, 51, 51,251,246,237,219,190,125,251,128, 29, 11, 96,245, 67,176,237,191,123,207,
+222,123,207, 63,242,170, 88,168,185, 39, 75,155,249,189,255,201, 4, 20, 33,168, 23, 88,250, 3, 43, 12, 96,229, 1, 44,130,245,
+244,244,224,195, 56, 16, 6,193,210, 31, 88,244,115,243, 72, 9, 9,235, 44, 93,113, 41,105,222,188,109,231,207, 3, 17,176, 7,
+192, 0,154,238,254, 10, 85,195, 8, 68,248,214, 3, 1, 11,122, 96,171, 63, 39, 39,135,151,151, 23, 24,116,107,215,174, 5, 58,
+230,205,155, 55,106,106,106, 4, 83,215,196,243,183,123, 78, 92,153,221, 83,201,194,252,157,233,239,231,174, 9,243, 86, 30, 58,
+251,140,137,133,212, 19, 70, 71, 1,145, 0, 32,128, 88,136, 47,232, 7,243, 84,204,136,173, 6, 32, 67, 55, 36,141,222, 96,118,
+ 47,224,253, 0,130, 61,143,207,159, 63, 3,155,165,192,102,181,169,169, 41, 26,247,212,169, 83, 16, 65,172, 0, 34, 11, 36,129,
+ 45, 83, 96, 51, 22, 88, 52, 64, 4,145,185, 88, 1,223,143,183,219, 30,253,144,126,207,108,200,199, 40,250,154, 65,133,133,159,
+137, 81,248,255,143,151, 95, 95, 50, 94,125,244,239,197,215, 31,192, 50,152,225,223, 45, 6, 35,119, 92, 21, 0, 59, 59, 59,176,
+ 20,150,150,150,118,117,117, 5,150,236,192, 34,242,237,219,183,192, 34, 9, 40, 5, 44,226, 33,199, 31,253,195,208, 11,209, 14,
+ 84, 0, 76,246,192,142,175,138,138, 10, 63, 63,255,151, 47, 95,206,159, 63, 15,172, 21,128,102,254, 4, 3, 60,173, 34, 96,245,
+246,228,201, 19,125,125,125, 7, 7, 7, 25, 25,153,175, 95,191, 2,235, 15, 96, 55,247,248,241,227, 4, 7,115,128,122, 95,190,
+251, 40,164,102,161,100, 27, 46, 32,163,246,243,235,135, 71, 39,183,222,222,187,144,160, 94,200,236, 5,176,115, 35, 46, 46, 14,
+ 44,112,129, 53, 1,164,232,135,140, 5, 1,217, 88,111,200,129, 86,123, 44, 28, 2,130,234, 2, 66,234, 76, 76,172,192,226,126,
+238,252,253, 73,137,142, 16,189,169,169,169, 64,199, 67,244,130,189, 12, 46, 10,176, 77, 3, 0, 3,118,243,230,205, 89, 89, 89,
+146,146,160, 3, 62,247,238,221, 11,172,204, 56,193,192,219,219,251,216,181,239,120,124,189,236,230,227,222,211, 55,230,116,148,
+203,168,203,127,253,242,126,227,246,211,151, 46,223, 20,248,255,143,237,197, 75,239,156,232,163, 87,191,143,150,215,164, 2,180,
+147,126, 48, 59, 4, 0, 1,196,130, 89, 22,192, 15,185,197,197, 30, 84,128,236,130,155, 66,189,100,143,255, 80,222,234, 39, 70,
+ 10, 79, 81, 78,246,170, 33, 96, 78, 6, 22,247,239,223,191,199,202, 37, 18, 0,107, 11, 96,249, 11, 44,244, 21, 20, 20, 48,185,
+152,224,245,155,199,199,158,127,247,230,226, 58,252,248,159,148, 17,187,226,207,179,239,175,101,173,239,186,244,239,193,199, 47,
+191,254, 63,253,252,151,147,133,233,207,199, 23,252,216,218, 49,240, 58, 0, 88, 98, 62,124,248,240,198,141, 27,218,218,218, 64,
+ 7,159, 56,113, 2, 50,178,143,107, 16, 31,168, 23,210, 9,128,232, 5,214, 1,143, 31, 63,214,213,213, 5, 22,223,192,250, 3,
+ 40, 2, 20,135,172, 14,194,211, 3,120,244,232, 17,208,124, 99, 99, 99, 96,233, 15, 84, 12,236,130,152,155,155, 3,173, 6,138,
+ 3,107, 14,252,161, 4, 84,243,143,137, 77,218,192, 5, 88,250, 51, 49,179,114,242,137,202,153,123, 63, 60,177, 9,191, 94,160,
+ 59, 63,124,248,240,244,233, 83, 57, 57, 57,107,107,107,160,165,144,145,159,248,248,120,136, 2, 96, 29,134,199, 82, 14, 14, 97,
+ 97, 81,253, 95, 63, 63,190,121,123,254,231,207,247,191,127,131,230,183, 33,122, 95,190,120, 1,215, 11,106,253,227,168,245,158,
+ 63,127,190,116,233,210,232,232,104, 96, 88, 49,128,175,163, 1,246, 6, 42, 43, 43,129,181, 17, 76, 9,206,229,137,183, 62,125,
+ 43, 63,120,161,163, 36,221,214,199,229,235,151, 55,171,214, 29,156, 57,119,237,246,162, 4,165, 87, 79, 58, 63,189, 16, 18, 18,
+198,163,119, 20, 16, 57, 22,132, 89, 37, 0, 4, 16, 11,214,161, 24,130,236, 65, 14, 40, 95,163, 73, 12,104, 49,109,161,255, 13,
+ 98,200,101, 55, 90,101, 64,141,195, 32,113,130,155, 55,111,194,230,241,176,112, 73, 2,192, 34,120,247,238,221,144, 75, 60,144,
+185, 88,187,249, 23,223,125,255,248,235,223,197,215,127,158,125,248, 35,126,130, 69,111,213,157,135, 15,174,222, 60,249,235, 15,
+ 11,243,175,127, 12, 63,126,253,127,255,255,159,168,224,127,172,133, 56,124, 1, 40,100, 25,207,203,151, 47,229,229,229,129,245,
+ 22,100,216, 7, 72, 34, 54, 56, 17, 2,240, 77, 3, 16,114,112,222, 28, 7,172,156, 32,183,160, 40, 42, 42, 34, 87,108,103,206,
+156, 1,146,192,224,133, 92,186,135,235,218, 31, 96,104, 1,201,239,223, 94,126,249,252,248,239,223, 31,200,122, 55,129,171,106,
+ 96, 55, 8,164,247, 63,246,177,127, 96, 60, 78,158, 60, 25,216,204,183,177,177, 1,114,143, 30, 61,186, 97,195,134,236,236,108,
+164,210, 31, 39,120,254,237,103,236,182, 19, 5, 97,222, 33,177,193,223,126,124, 90,191,233,192,132,105,203, 22,185,153, 2, 75,
+255,209,178,155,234, 53, 1,114, 29, 0, 16, 64,212,220, 9,140, 60, 18,141,139, 61,156,192, 96, 40, 5, 32, 99,247,196,143,255,
+224,153, 51,192, 31, 71,192,226,195,213,213, 85, 80, 80, 16, 43,151, 36, 0,212, 5,212, 11, 47,238,209,184,104,224,251, 95,190,
+223,140, 12,103,222,252,124,245,247,239,222,123, 63, 86,173,254,177,239,137,232, 29, 54,254, 39, 31,127, 63,254,252,239,235, 31,
+134,111,127,254,179, 11, 75,224, 42,178, 33, 43,253,255,254,253,251,231,207, 31, 97, 97, 97, 30, 30, 30, 96, 29,240,251,247,111,
+136, 8,218,118, 48,100,189,144,149,254, 64, 53,223,191,127, 7,114,101,101,101,129, 45,107, 73, 73, 73, 96,181, 1,108,131, 3,
+107, 62,136,201,120,198, 69,129,205,112, 96, 95,225,236,217,179, 79,158, 60,129, 92,195,121,242,228,201, 47, 95,190, 0,197,129,
+157, 15,252, 65, 4, 84,195,244,239,215,211,243,123, 62, 60,185,245,239,239,239,239,159, 94, 63, 58,185,245,215,215,247,248,245,
+194, 29,243,237,219, 55,248,236, 52,176, 19,112,245,234, 85, 96, 57, 14,185,180,253,227, 71,156,235, 41,129,126,253,243,251, 11,
+ 39,183, 4, 7,167, 16,100, 71, 48,178,222,217,179,103, 67,244,254, 67, 13, 48, 96, 7,110,209,162, 69,192,214, 67, 83, 83,147,
+159,159,159,143,143, 15,164, 43,176,121,243,230,210,210, 82, 96,151, 11,143, 55,129,122, 23, 47, 94, 28,145,149,227,180,230, 96,
+ 73, 92, 80, 94, 89,230,143, 95, 95,238,223,125, 60,115,230,170, 13,190, 86, 14,178, 98,196, 39, 42, 96,101, 51, 90,184,227, 31,
+ 11,130,151,251,200,243,192, 0, 1, 68,253,163, 32, 48,111, 79,197,100, 83,185,189,143,177,144, 31,185,201,143,191,249,143,169,
+247, 20, 80,168,186, 26,147, 77,204, 16, 16,241,122,169,213, 27,128, 47,230, 33,190,249,255,238,157, 11,124,230,128,164, 14,132,
+130,130,130,175,175, 47,176, 25,136,149, 75, 36, 0,170, 7,234,130, 15,248,160,113,177,168, 87, 85, 81,229,102,230,101,100,248,
+253,255,255,245,247,191,150,222,249,185,252,216,179,211,119,223, 61,251,206,240,246,199,223,187, 95,254, 63,255,249, 95, 86, 89,
+ 5,107,105, 8, 89,181, 9, 44,172,129,133, 56,176,236,214,209,209, 1, 87,153, 66,102,102,102,144, 66, 28, 82,142, 99, 22,226,
+144,194, 29, 88, 79, 0, 21, 0,171,121,101,101,229, 15, 31, 62, 60,126,252,248,221,187,119, 64,167, 2,123, 21, 64,113,160, 9,
+ 16,101,184, 92,110,106,106, 42, 35, 35, 3, 44, 64,119,236,216,177, 5, 12, 14, 31, 62, 12,108,152, 91, 90, 90,226,153,243,128,
+235, 21, 23,226,127,123,239,194,205,221,243,175,110,157,126,125,235,204,135,199, 55,176, 51,253,195,175, 23, 88, 57, 1,155,219,
+124,124,124, 23, 47, 94, 4,214, 58,200,213, 0,164, 45,191,116,233, 82, 60, 37,242,175,159, 31, 63,126,184,195,202,202, 45, 32,
+164,193,205, 35, 13,100, 64,250, 4, 64,240,236,228,212,253,139,242, 92, 53,190,128, 43, 0, 6,232, 54, 48,112,176,109,221,186,
+149,147,147, 19,104, 44, 48,100, 44, 44, 44,224, 93,129,152,152, 24, 96, 71, 4,191, 55,183,109,219,202,199,199, 99,103,111,110,
+ 96,164, 23,152,149,244,141,241,207,235, 87,239, 50,114,155, 59, 77, 84,140,196, 72,104, 91, 0, 75,255,174,174,174,209, 58,128,
+152,106, 0, 77, 4, 32,128,232,180, 17,108, 64, 26,203,228,141,209,155,181,182, 34,151,221, 64, 46,213,245,194,219,218,137,235,
+227,240, 40,160,245,158, 44,184, 45,200, 59, 3,240,107, 1,150, 62,206,206,206,192, 50, 20,147, 11, 44, 85,241,133, 12, 88, 22,
+ 72, 26, 26, 26, 2,203, 41,184, 32, 50, 23, 43,144, 86,211,210,189,122, 86,254,253,199, 55,127,255,125,250,241,135, 29, 88, 90,
+255,252, 35,199,195,242,254,207,159,167, 95, 65, 43,136,188, 85,197,185, 21,180,190, 96, 27, 15,129,175,248,212,213,213,213,215,
+215, 7, 22, 76,144,133,155, 64,103, 3,139,170,245,235,215, 67, 54, 4, 0, 69, 24, 49,244, 66,118,123, 1,211,173,154,154, 26,
+176,254,120,253,250, 53,100, 9, 41,208, 52,160,200,171, 87,175, 32,122,129, 34,120,234, 75, 96,207, 6,178,148, 19, 88, 34,195,
+151,114, 2, 93, 66,112, 53, 14, 72,175,139, 51, 72,239,221,147,207,206,239,134,234,181,118, 34,168, 23, 88,250, 27, 25, 25, 29,
+ 61,122, 20,168, 87, 90, 90, 26,104, 14, 55, 55,119, 85, 85,213,164, 73,147,128, 93, 31,160,237,125,125,125,184,238,136, 7, 86,
+121, 31,223,223, 1, 22,235,252, 66,106, 18, 82,150,223,191,191,249,242,233, 97,119,207,164,198,134, 42, 41, 25,134,229,249, 92,
+140, 97,239, 29,227, 24, 32, 53, 38,124, 35,240,173, 91,183,128,105,192,198,198, 6,104, 62,176,202, 1,202, 77,153, 50, 37, 60,
+ 60, 28, 82,221,226, 7, 55,111,222, 10, 9,246,143,136,240,211,209, 85,127,251,249,227,151,143,111,210,242,154,155, 3,157,157,
+255,125, 35,169,244,159, 48, 97, 2, 48, 82,128,181, 78,110,110,110, 64, 64,192,104, 65,143, 60,224,131,181,220,135, 3,128, 0,
+ 98,161, 79, 65, 79,112, 5, 81, 72, 72, 8,121, 59,129,113, 1,228,141, 90,228,213, 1,164,150,254,196,235,197,191,234,134,214,
+ 71, 59,192,199,139,224,182, 32,239, 9, 32, 8,128,229, 32,242,106, 31, 56, 23,207, 18, 32,184, 44,154, 26,252, 90, 32, 64, 74,
+ 81,249,135,153,237,159, 83,219, 30,124,100,224, 97,100,149,231, 97,122,250,151,145,153,157,229,208,171,191, 63,254, 49,136,178,
+ 51, 43,155,216,125, 17, 84,192, 86,156,129,154,240,192, 22, 55,176, 29, 10, 44, 19, 63,125,250, 4, 44,187, 33, 21, 0,176,253,
+ 14,172,180,128,101,214,230,205,155, 33,195, 65,104,217, 0, 40, 2,217, 54,172,169,169, 9, 25,189, 1,234,133,164,109, 72,191,
+ 1, 40, 14,236, 13,124,249,242, 5,127,194,214,211,211, 3,150,200,228,109,230, 34, 79, 47,208,217, 82, 82, 82,238,238,238,192,
+ 90,231,198,141, 27,143, 30, 61, 2,214,118, 2, 2, 2,192,170,104,206,156, 57,184,246,226, 34,141, 2,125,251,240,254,230,143,
+ 31,239, 4, 4,213,120,120,101,121,249,228,190,126,126,218,209, 57, 55, 50,194, 5, 88, 1,192, 2,246, 63,114, 13,224,229,229,
+181,109,219, 54, 96,135, 3, 24, 32,126,126,126, 11, 23, 46, 4,214,235, 26, 26, 26,196,248,209,219,219,107,253,250,205,159, 62,
+188,125,242,236,121,126,118, 92,105, 69, 91,160,147,149,205,207, 79, 12,172,196,150, 75,192,210,191,161,161, 1,210, 13, 5,118,
+212,128,253,128,178,178,178,209, 58, 0,127,125,128, 12, 0, 2,136,154, 21, 0,133, 43,136,200, 40,229, 33,224,205,155,185,213,
+167, 54, 98, 29,240, 33, 56,253, 11,212,123,170,122, 35, 90,131, 29,121, 24, 7, 79, 57,254,102,238,155, 83, 27,171,201,211, 59,
+ 80, 96, 40,158, 26,164, 96,229,120,233,231,159,215,251,246,178,254,249,126,233,243,255, 61,159,255,176, 49, 50, 10,255,255,239,
+ 40, 41, 96,239,230, 44,100,236,128,163, 61, 11,234, 1, 0,155,192,192,242, 8,216,132, 7, 22,244,192, 98, 20, 82,136, 67, 26,
+239,162,162,162,214,214,214, 59,119,238,196, 28,198, 1,138, 0,171, 10, 96,115, 27,168, 30,216,170,133,116, 35, 24, 96,243, 10,
+ 64, 46, 80, 1,176, 87,113,226,196, 9,130,211,224, 10, 96, 64,166,199,201,210, 11,172, 3,128, 37, 62,208,121,192, 30, 0,176,
+211, 3,236,187, 0, 5,159, 62,125,234,233,233, 9,108,254, 19,212,254,247,239,207,175, 95,158,254,250,245,145,243,211, 3, 62,
+ 1,101, 46, 30, 41, 32,218,181,247, 37,163,179, 56,172, 49, 7, 38, 97,234,173,172,172,128, 1, 11, 44,253,129, 53,129,176,176,
+112, 92, 92,220,129, 3, 7,136,116,170,165,165, 21, 59, 59, 59,223,181,179,217,217,201, 50,106,170, 93, 5,201, 11,166, 45,156,
+194,252,131,248,210,191,188,188, 28,232,217,103,207,158,113,114,114, 2, 35, 5,216,221,105,109,109,173,174,174, 30,173, 3,224,
+ 99, 62,192, 66, 31,207, 81, 16, 0, 1, 68,229, 30,192,128,172, 32,194, 90,168, 17,217,252,199,212,139,220,126,135,140,231,224,
+ 42,199, 41,209,139,167, 44, 38,181,140, 30,246, 39,193, 1, 75, 52, 3,103,119, 97, 41,153,215,215,175, 48, 63,188,167,242,251,
+ 57,175,176,184,149,174,134,182,177,206,119, 9,156,251,131,128, 37, 53,176,237, 15,108,230, 67, 6,235,129, 93, 1, 32, 3,114,
+156, 3,124,116, 72, 86, 86, 22, 88, 7, 96, 22, 88,192,210,196,192,192, 0, 88, 7, 0,203,119,136, 74,248,162, 26,248, 73,112,
+ 64,163, 12, 13, 13,207,158, 61, 59, 56, 3, 13,232,120, 49, 48, 80, 87, 87, 7,250, 23, 88,141, 1,189, 15, 12,141,106,162,230,
+165,254,255,254,245,249,247,175, 47,223,191,191,102,103, 23,100,101,227,101, 98, 98, 89,178,116,107, 76,180, 55,180, 22, 68, 85,
+ 13,233, 88,244,246,246, 2, 43, 90, 32, 67, 77, 77,141,248,107,165,141,140,140,153, 77, 77,147, 26, 32,122,255,171,169,169,171,
+ 5, 4,224, 31, 21, 68, 6,157,157,157,163,165, 60, 49,117, 0,214,210, 31, 8, 0, 2,104,216, 94, 8, 67,246,210, 79,228, 34,
+155,212, 38, 60, 37,122, 71, 1,126, 32,171,169, 13, 68, 64, 6,252,236, 77,252,251,130, 66, 67, 67, 5, 5, 5, 33, 75,125,128,
+ 37, 32,100, 72, 7,210, 3,128, 76,252, 66, 14, 4, 85, 86, 86, 6, 10, 30,185,242, 21, 89,239,132, 9, 19, 86,175, 94, 13, 81,
+ 0, 58, 41, 8,199,113,208,192,150, 47,193, 65,149, 65, 82,131,242,128, 1,137,205, 5, 72, 53,240, 25, 88,250, 3,205, 0, 6,
+ 27, 68, 47,174, 49, 47,200,145,159,144,160, 38,201,121,192, 96, 46, 44, 44, 36, 67,239,104, 51,159,248, 58, 0,151, 20, 64, 0,
+141, 94, 10, 63, 10, 70,193, 40,192, 40, 23, 24, 24,208, 15,123,248, 63,122, 35,216, 48, 4, 0, 1, 52,122, 37,228, 40, 24, 5,
+163, 0,163,241,207, 48,122, 3,228,136, 0, 0, 1, 52,122, 37,228, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40,
+ 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163,151,194,143,234, 29,213, 75,
+ 88,111,122,122,186,127, 64,250,198, 13, 88,142,220, 24, 13,171, 1,215,219, 10, 91,113,135,107,145,235,232,165,240,184, 0, 64,
+ 0,177,160,165,114, 76, 21, 68,174, 27, 27, 84,122,137,212, 62, 80,110, 30, 60,128,236, 51, 39,168,123, 16, 41, 30, 0,185,114,
+224,224,193,131, 64,182,189,189, 61,254,203, 3,104, 23, 74,192,210,223,203,211, 8,114,140,222,176,223,120, 49,180, 0,176,244,
+247,245, 85,134,179,171,171,171, 71,195,132,120, 0, 16, 64,232,171,128,254,175, 66, 57,131,137, 49,140,132,211,222,209, 50, 6,
+ 73, 39,128, 82,162, 23,205,205, 36, 57,123,160,220, 12, 1,239, 94,223,121,253,250,249,203, 55, 95, 62,126,252,205,207,207, 42,
+ 46,194, 35, 42, 42, 41, 36, 74,212,241,106,231,142, 79,187,119,247,214,221, 7, 63, 30, 63,255, 47, 43,201,168,172,192,161,164,
+172,102,100,153, 69,255,106, 3,114,182, 40,141,138,197,203,151, 47, 27, 24,236,152, 49,227,219,129, 3, 12,245,245,187, 30, 63,
+126, 44, 33, 33,193,193,193, 33, 42, 42,170,164,164, 68, 70,101,112,248,240, 97,113,113,113,121,121,121,130, 71,114, 34, 3, 96,
+233,159,150,150,198,192, 48,107,227,232,129, 99,131, 15,252,250, 85,190,115,103,154,187,251, 44, 95,223, 78, 72,111, 96,180, 26,
+ 64, 6,120, 54,130, 1, 4,208, 48, 89, 6, 10, 47,241, 25, 25, 25,254,173, 20, 28,252, 14,254,253,235,235,227, 71,151,127,253,
+250,173,162, 40,224, 96, 35, 39,192,207,254,254,195,143,167,207,191,220,190,247,252,195,199, 55,178,114,186,172,108, 56,175,126,
+125,255,230,214,177,131,179,153, 25, 62,133,123, 51, 88, 27, 51, 40,203, 51,220,121,240,255,200,153,239,219,246, 95,220,186,182,
+212,202, 62, 85, 80, 68,141, 72,103,144,221,246, 71,214, 8, 57, 72,142, 70,117,192,187,119,239,242,242,190,137,138, 50,132,134,
+ 50,116,116,128, 46,228,250,243,231, 15,176, 2, 16, 19, 19, 3, 86, 0,192, 62,129,148,148, 20, 65, 67, 94,188,120,241,234,213,
+171,151, 47, 95,186,186,186, 46, 89,178,132, 1,188,215, 55, 42, 42, 10,255, 1,118,200, 96,219,246,115,192,210, 31, 76,142,130,
+193,213,252, 7,146,193,193,107,119,238, 4,145,105,105,119, 33,189,129,209,174, 0,102,209, 15, 23, 65,174, 3, 0, 2,104,152,
+ 84, 0,192, 78, 0,164, 14, 24, 18,165, 63, 16, 60,121,116, 89, 92,132,195,212, 80, 17,124,191, 18,227,191,127,255,249,120,216,
+185,149,217, 20,100,249,175,221,124, 3,148, 85, 84,177,192,165, 23, 88,250,219, 26,127, 42, 72,100, 96,102, 6, 85,120,191,255,
+ 48,112,115, 49,104,170, 48, 88, 24, 48,108,217,255, 9, 40,235, 29,220, 77,211, 33, 32,172,151, 74,210,232,202, 7, 33, 33,161,
+ 45, 91, 56,101,101,191, 3,123, 0,239,223,179,168,128,193,151, 47, 95,238,221,187,119,224,192,129, 79,159, 62, 1,203,113,252,
+253,128,235,215,175,159, 59,119,142,149,149, 21, 89,240,251,247,239,115,231,206, 5, 26, 18, 17, 17, 65,140, 51, 54,110, 0,122,
+ 57, 29, 76,146, 0,224,247, 36, 67,142,189, 67,227,226,137, 17, 6,164, 19, 3,241,112,113,182,135,254,255, 23,121,251, 86,233,
+193, 3,225,167, 79,159,136,137, 61, 82, 82,250, 40, 38,246,159,232, 19,121,129,238, 36,230,156, 62, 60, 90,240,115,169,165, 23,
+ 62,248,147,150,182, 19,200,128,144, 16, 41, 32, 99,180, 14,192,218,234,135, 28, 13, 4, 23, 1, 8,160, 97,181, 10,136,113,136,
+184,243,221,235, 59,191,127,255, 54, 51,146,132,139, 48, 49, 49,178,177, 49,115,114,176,176,178, 50, 41, 43, 10, 2,123, 6, 64,
+ 53,184, 70,126,128,109,255,194, 36,134, 31, 63, 25,238, 63,102,120,255,145,225,195, 39,134,101,155, 24,114, 27, 24,170,122, 24,
+172,140, 24,152,254,127, 2,170, 25, 54,113,170,171,171,187,113,163,166,152, 24, 67, 84, 20,139,132,132, 41,176,188,246,245,245,
+245,241,241,113,119,119, 23, 23, 23, 7,150,236, 43, 87,174,188,123,247, 46,174,139, 18, 47, 93,186,116,225,194, 5,180,210, 31,
+ 14,246,239,223,127,245,234, 85, 60,101,241,161, 67,135,224,165, 45,164,244,135,176,129,226,196, 84,120,167, 96, 0, 43,151,200,
+250, 21, 63, 23,107,233,175,116,227,134,237,158, 61,178,183,238,176,125,250, 36,121,235,134,206,150,205,162, 23, 47, 50, 16,125,
+167, 55,208,133,192, 98, 23,216,103, 34, 62,154, 32, 90,240,112,241,235, 69, 46,238,241,112,113, 1, 72,185, 15, 33,127,249,170,
+ 48,140, 2,164,162, 31,255, 89, 15, 0, 1, 52, 88,122, 0, 84,105, 63,254,167,134,189,228, 13,101,192,111,218, 34,102,140,229,
+245,155,231,234,202, 66,144,114, 31, 77,138,131,157,229,195,199,159,106,202, 66,183,238, 61,199, 58, 25,112,239,238,173,112,208,
+145, 92, 12, 59, 14, 49, 76, 93,204,224,102,203,224,229,192,112,227, 14,195,249,171,255, 57, 57, 24, 13,181, 25,220,237, 25,214,
+237,188,101,100, 73,171, 33, 32,172, 65, 68,187, 27,223,128,173,123, 96,123, 31,200, 0,182,244,173,173,173,225,130,130,130,130,
+154,154, 44,126,126,192, 62,208,153, 91,183,190, 49, 48, 0, 3,133, 29,115,228,231,242,229,203,184, 74,127,120, 29,128,235,142,
+148,232,232,232,165, 96, 0,100,192,253, 11, 44,250,129, 34, 16, 89,250,228, 5,252, 92, 76,192,247,242,165,226,201,147,191,152,
+152, 88, 25, 25,254,252,251,255,239,247,223,127,127,254,136, 30, 62,244, 81, 68,228,167, 12,177, 43, 73,128,197,238,149, 43, 87,
+ 12, 13, 13, 13, 12, 12,136,215,130,220,185, 65,227, 18,217,141, 32,181,244,199, 44,238,119, 34,245, 3, 70, 1, 65, 0, 16, 64,
+232, 21, 0,230,244, 41,145,133, 26,174,194,148, 24,189,180, 24, 59, 38,114,153, 10,214, 9,100, 34,245,162, 41, 35,126, 46,250,
+229,235, 47,142,214,114,192, 6,217,225,227,143,191,125,255, 13, 20, 49,210,151, 16, 21,230,124,252,244,243,157,251,239, 89, 88,
+152, 84,149, 4,143,158,252,170,174,137, 69,239,221, 7, 63,172,141, 25,126,254,102,216,126,144, 97,255,241,255, 82,226,140, 74,
+114, 12,206, 54, 12, 26,202,140, 44,204,160,115,212, 45, 12, 24,186,103,254,192, 63,224, 67,144,129,167,213, 0, 31,241, 71, 27,
+151,160,221,218,152, 71,143, 30, 49,128,207,199, 71, 22,124,240,224,129,150,214,171,170, 42, 80,192,183,181,221,122,240, 64,155,
+129, 13,253,100, 80,160, 26,252,165, 63, 68, 13, 46, 41, 59, 48,128,148,248,144, 66, 31, 94, 49,192, 47, 52,166, 58,160,176,249,
+ 15, 4, 2,215,111,252,250,253,155,137,137,233, 63, 51, 51,232, 82, 4,200,129,118,127,255,177, 95,186, 68,124, 5,192, 0,190,
+ 87,242,232,209,163,192,174,170,180,180, 52, 49, 19, 45, 20,214, 1,228,181,253,129,197,189,251, 44,247,224,181, 12,105, 59, 65,
+ 12, 32, 23, 82, 43,176,109,190, 51, 90,184,163, 1,172,247,194, 3, 4, 16,225, 85, 64,196,175, 11,194,108, 21, 18,217, 78,196,
+ 90, 79, 16, 95,241, 96,117, 57,158,203,211,113, 21,211,240, 9,100, 34,245, 98, 85, 6, 49, 13,216,176,255,183, 10,231,108, 4,
+120,205, 15,168,185,250,248,217,167,239,223, 65,215, 90,169, 40, 9, 2, 43,128,139, 87, 95,221,188,253,142,131,131, 89, 89, 81,
+224,253, 71,236, 7,205, 63,126,254, 95, 89, 30,100,190,135, 29,131,129, 22, 35, 59, 27,195,159, 63,160,126,128, 0, 47,195,189,
+ 71, 12,238,118, 12,242, 50, 32, 53, 52, 77, 73,240,114,159,200, 33,233,129, 2, 88, 7, 49, 72,117, 42,164,172,135, 87, 0, 52,
+ 45,253,225, 0,215,213,237,120,174,116,135, 3,214,187,119,126,254,254,197,200,204,242,247,255,127, 96, 58,249,243,247,223,111,
+ 96, 71,224,239, 95,198,219, 55, 25, 24,188, 72,117, 9,176, 31, 0,236, 72,113,115,115,243,243,243, 19, 95, 7, 16, 57,248, 67,
+ 97,233, 95, 93, 93,221,218,218, 10, 44,253,225,149, 1,144, 4, 86, 3,192,210,127,243,230,187,144, 9, 0,200, 44,177,158, 93,
+252,104,233,143, 89,250, 3, 1, 64, 0, 13,150, 33, 32,172,133, 41,145, 5, 49, 73,107, 85,177,155, 64,165,181, 67, 64,151, 16,
+ 99, 20, 63, 63,235,251, 15, 63, 68,132,184, 66,253, 52,128,249,147,157,157,153, 25,216, 94,251,255,223,199, 77,217,219, 85, 25,
+104,194,219,247,223,129,106,176,234,149,149,100,188,251,240,191,134, 50,131,147, 37,104,200,235,198, 29, 6, 61, 13, 6, 65, 62,
+ 6, 79, 7,134,127,255, 24,128,157,128, 91,247, 65,106,240, 7, 50, 65, 6,241, 27, 73, 40, 25, 55, 35, 6, 0,219,175,192, 22,
+232,221,187,119,129, 45,113, 91, 91, 91, 30, 30, 30,200,137,193, 10, 10, 10,167, 78,137, 53, 54, 62,101,100,100,124,245, 74, 77,
+ 77, 77,225,218, 51, 44,122,209, 68, 86,173, 90,133,210,104,248,255, 63, 60, 60,156,248, 58,128,110,165, 63, 25,117, 3, 28,188,
+147,145,102,187,113,243, 63, 43, 3,219, 63,208,188,239,239,191,127,126,253,255,251,237,207,159,239, 42, 26,100, 56, 70, 71, 71,
+ 7, 24,254, 68,150,254, 12,224,107, 62,129, 77,126,120,241,141,198,197, 5, 32,189, 4,184, 50, 52, 46, 65, 0,108,254, 67,138,
+126, 32,137,220,246,135,204, 18, 3, 43,131,209,210, 31,107,233, 15, 4, 0, 1, 52, 28, 86, 1, 17,236,121, 16, 4,255,255, 51,
+ 48,133,191,167,188, 14,128, 44, 70, 98, 10,123,143,167,249, 15, 4,226, 34, 60,143,159,126, 6, 86, 0,125,211, 79,219, 89,201,
+ 26,233,137, 51,178, 50, 66,150, 3, 65, 86,106, 0,101,129,106,176,234, 85, 86,224, 56,122,246, 59,176, 2, 16, 49,102,168,200,
+100,200, 79, 96,224,231, 5,141,252, 52, 78, 98,104,200, 7, 41, 56,122, 22,164,134,164,129, 50,202, 23,131,210,110, 25,232,155,
+ 55,111, 32,247, 32,110,221,186,245,209,163, 71, 30, 30, 30,138,138,138,159, 63,127,126,255,254,253,245,235,127, 14, 28, 0, 22,
+ 22, 38,142,142,142, 50, 50, 50,215,158,189, 70,211, 11,108,183,226,191,177,235,207,159, 63,131, 45, 49,195, 75,127, 60,213, 0,
+254, 58,224,147,150, 54,251,165, 75,255,254,255,231,102, 98, 97,102,102,252, 3, 44,253,127,255,254,252,235,215,111,125,125,146,
+ 92,194,197,197, 69,210, 28, 0,188,184,199,197,165, 69, 29, 0,108,230,167,129,219,248,200,165, 63,188,249, 63, 10,240,151,254,
+ 64, 0, 16, 64,163,199, 65,195, 90,139, 84, 90, 63, 10,173, 3,240, 86, 39,162,162,146,119,238, 63,211,215, 22,171,200,183, 88,
+176,252, 50, 39, 7,139,129,142, 24,252, 58,229,127,255,254,223,185,255, 94, 92, 12,251,168,171,146,178,218,214,125, 23, 19,130,
+ 25,254,223, 99,176, 8, 98, 80,146,101, 88,186, 17, 38,151,207,240,247, 47,195,214,125, 32, 53,180, 11, 40,172,253, 51,218, 45,
+ 3,189,113,227,134,166,230,253,249,243,129,204,191, 77, 77,151,214,173,251,166,174,174, 14,172, 0,238,221,187,247,242,229, 75,
+ 35, 35, 35, 96, 19, 30,215, 50, 80, 37, 37,165,211,167, 79,227,185, 99,132,200,235,121,225, 67, 64, 64,146,214, 61, 0, 96,201,
+ 14, 41,250,113, 13, 1,225,146, 66,212,106, 50, 50,111,109,237,254,238, 63,240,139,141,149,231, 63,203,143,127,255, 62,254,250,
+245,217,201,249,191,156, 28,209, 29, 98, 70, 96,249, 75,252,208, 63, 92, 11,188,184, 71,227,146, 84, 7,224, 90, 59,139, 7,160,
+149,254,240,145,159,209,217, 96,252,165, 63, 16, 0, 4,208,104, 5, 64, 77, 0,157, 0, 32, 52, 10, 36, 36,170,242,225,227,155,
+147,103,159,153, 27, 75,121,186, 40,237,216,123,111,235, 46, 80,170,173, 41,182, 2,150,254, 64,113,118,118, 54, 92,251,129,141,
+ 44,179,182,174, 45,237,159, 7, 90, 9, 58,163, 5,180,250,211,197, 26,180, 18,180,191, 22, 84,250,247,207, 99,248,203,192, 71,
+252,126, 96, 82,219,236,184,122, 12,180, 91, 5,244,245,235, 87, 67,195, 31,144,146,196,196,228,255,142, 29,247,110,221,186, 5,
+217, 8,230,224,224, 96,111,111,143,103, 19,128,178,178,242,229,203,151,113,117, 2,128,205,127, 99, 99, 99, 98,220, 0, 89, 12,
+ 10, 89, 20, 4,100, 19, 95, 7,160,109, 52, 35,114,223, 25,188, 14,192, 37, 75, 64, 63, 19,211, 47,115,243, 55, 82, 82, 95, 46,
+ 93,226,121,244,232,135,162,226, 87,109,237,191,178,178, 12, 68, 95,182, 69, 94,217,141,172, 5,141,139,223,227,200,178,104,246,
+146,234, 12, 8, 64, 46,247, 33,189, 1, 82,135, 52,135, 25,192,179,166, 3, 32,128, 70, 43, 0, 44,171,119,232, 96,148,172,156,
+238,227, 71,151,215,110,185,169,162, 40,232,237,166, 44, 40,192,241,254,195,143,243,151, 95, 2,219,254,192,210, 31, 40,139, 71,
+175,149,125,234,225,131,179,143,157,253,228,237,196, 48,187, 29,180, 19,248,238, 67,134,185,171, 64,109,127, 96,233, 15,148,165,
+188, 64, 39,163,244,167,209, 28,128,132,132,196,131, 7, 34,103,206,128,134,119,110,221,226, 51, 53,213, 18, 22, 22,134,239, 4,
+ 38,120, 20,132,133,133,197,193,131, 7, 25, 49,246, 64, 1, 75,127, 21, 21, 21, 96, 13, 65, 76,233,143, 60,250, 15,233, 10, 16,
+ 89, 7,144, 93,156,225, 42,229, 9,151,254,176, 58,224,159,188,252, 55, 32, 34, 43,204,201, 40,118,241,251, 20,191,129,148,232,
+197, 95,250,131, 22,137,142,248, 9, 0, 6,108,251,129,225, 85, 2, 64, 0, 17, 94, 6, 74,252, 20, 43, 49,203, 64,137,215, 75,
+188,118, 74,236,197,234, 59,242,236, 37,105, 46,154,149,141, 91, 73,197,226,221,235, 59,247, 30, 60, 63,126,230, 9,252, 44, 32,
+113, 49, 41,130,103, 1, 9,138,168,121, 7,119,159, 59, 62,109,229,214, 91,109, 83,233,122, 22, 16,157, 75,127, 32, 80, 87, 87,
+191,120,209, 43, 49,241, 12,184, 7, 96, 18, 22,166,207,197,197, 69, 82,253, 17, 30, 30,126,243,230,205, 51,103,206, 48,131,230,
+218,153,128, 69, 63, 27, 27, 27,176,237, 15, 52,153,212,210,159,140, 58, 96, 20,208, 26,128,214, 2,165,181,186,207,114,199,186,
+ 39, 96,116, 50, 0, 63, 0, 8, 32, 22, 74, 6, 4,104,170,151, 72, 3, 7,149,155, 73, 5,192,178, 30,136,212,201,210, 11, 44,
+235,137,220,237, 69, 45, 95,208,109, 15, 7, 50, 0, 22,247,150, 96, 64, 97, 45, 66, 76,113,143, 9, 48,203,122, 32, 27,178, 45,
+ 96,180, 2, 24, 84,117, 0,195, 67, 44,226, 38,213, 38, 35, 60,100, 8, 94,249, 14, 16, 64,163,151,194,143,130, 81, 48, 10, 70,
+193, 8, 5, 0, 1, 52,122, 35,216, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0,
+ 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163,151,
+194, 83, 71, 47,158, 99,209,104,170,247, 30, 24,172, 94,189,154, 12,189,247,239,223,191,123,247, 46,121,122, 71,211,198,168,222,
+ 81,189, 67, 69, 47, 30, 0, 16, 64, 56, 55,130, 17,121, 10, 38,213,245, 82, 29,164,133,126,100, 96, 99,155,181,148, 19,143, 26,
+ 96, 25,138,103,239, 37,126, 55,195,245,246,246,246, 22, 23, 23,147,116, 91, 58, 92,239,149,169,124, 58,217,159,200,184,105, 93,
+ 79,120,202,255, 55,127,129,140, 89,179,102,129, 47,173, 37, 1,152,169,175,248,243,233, 19, 39, 39, 39,176, 14, 8, 13, 13,165,
+ 93, 20, 16,185,175, 2,171,127, 7, 74, 47, 46,211,232,147,128, 25, 25, 25,153,192, 0,178,133,237,215,175, 95,204,224,179,157,
+255,255,255,207, 48, 10, 70, 1,245, 0, 64, 0,177,224, 74,235, 88,147, 26, 35,161, 91,229, 32,153,132, 60,189,196,180,136,201,
+ 6,187,119,239,102,224,208,196, 83, 10,151,151,151,139,137,137,161, 73, 1, 11,116,252,198, 66,244, 66,138,254, 19, 39, 78, 64,
+170, 1,146,244,254,187, 86,199,164,213,180,104, 31,232,184, 2, 32, 27, 34, 5, 20, 33,232, 35,190, 79, 69,255,254, 51,172,216,
+ 1,210,232,105,207,170,173,114, 21, 88, 7,128, 42, 60, 34,170, 1, 97,185, 83,175,111,191, 56,124, 77,254,235, 79,110, 79,247,
+ 15,210, 18,140,103,206, 28,251,244,233,135,147,147, 19,141,210, 25, 77, 27, 13,120,244, 18, 44, 49,137, 79,150,164, 2, 96,252,
+118,117,117,149,150,150, 18,179,223, 24, 25, 0,203,122, 22, 48,128,236, 92, 3, 38, 18,160, 33,127,255,254,253, 3, 6, 64, 6,
+141, 28,188,117,235, 86,252,129,227,229, 69,248, 52,233,109,219,182,145,164,126, 20,208, 13, 64,246, 3,163,173,251, 7, 8, 32,
+ 22,146, 74,127, 99, 99,227,179,103,207, 18,204,132, 88, 51, 21, 30,189,104,230, 0,203, 98,200,176, 6,217, 7, 76,166,249,206,
+ 98,224, 84,155,181,202, 1,212, 52, 94,205, 15, 42,253, 9,149,224,152,103,199, 3, 75,112,252,167,178,192,245, 2,217,192, 22,
+180, 5, 24,144,164, 23, 82,226, 67,200, 14,216,110,109, 96,233, 95, 22,204,209,181,246, 7, 30, 15,242,127, 47,214, 81, 99,254,
+250,253,127, 81, 44,199,137,171,127,190,127,253,255,237, 23,131,163,193,213,171,183,254, 18,236, 10,220,123,220,127,238, 52, 55,
+ 47, 31,163,132,164,184,168,184,202,195,187,191, 20,180,126,179,114,188,218,179,254,205,250,245,235, 3, 3, 3, 71,179, 10, 85,
+ 0, 48,126,125,125,125,129,117, 0, 90, 26, 54, 50, 50,106,108,108, 4, 74, 97,111,145,177,176,176,193,192,227,199,143, 85, 85,
+ 85,129,213, 0, 47, 47,239,157, 59,119,120,120,120, 78,159, 62,125,252,248,241,236,236,108,156, 41, 31, 28,245,240,252, 11,207,
+137, 16, 17, 32, 23,210, 74,192, 10, 54,109,218,132,169, 5, 46, 2,228, 18, 83,160,111,220,184,145, 36,245, 84, 1, 47, 94,188,
+144,144,144, 24, 77,114,120,202,125, 92, 0, 32,128, 88, 72, 42,253,241,219,132,231,160, 18,252, 71,156,163,149,254, 29, 29, 29,
+ 21, 21, 21,112, 17,226,235,128, 52,227, 89, 12,194,106,179,118, 57,192, 91,253,174,174,174, 64, 6,132,196, 28, 23, 67, 46,193,
+177,150,254,152,125, 2, 76, 79,193, 91,250,192, 26, 11, 57, 40,136,209,139,181,165, 15, 44,253,241,123, 83,228,123,145,170, 60,
+ 51, 39, 59,163,188, 20,243,155,247,255,126,255, 97,126,251,225,255,199, 47,255,239, 60,249,199,192,196, 32,194,117, 9,232, 47,
+ 37, 37, 37,172,122,255,253, 95,173,169,172,116,252,197, 75, 69, 57, 81, 29, 61, 37,102,118, 33,121,197,247,239,191,255,120,245,
+226,239,147,151, 63,184, 88,128, 90,245,113,233,165,221,136, 16,241, 81, 76,158, 94,204, 22, 9,173,199, 82,128,225, 8,180, 84,
+ 75, 75,107,243,230,205,200,209, 1,204, 68,120, 74,127, 32, 96,101,101,229,224,224,120,243,230,141,154,154,154,161,161, 33,176,
+ 62,152, 52,105, 18,176,213,175,171,171,187,110,221, 58, 96, 5,112,233,210, 37, 96,149,128,171, 31,224,239,239, 15,241, 47,174,
+ 92,140,167, 80, 6,150,221,144,144,193,218,128, 3,138,191,124,249,146,152, 10,128, 36,245,144,226,123,255,254,253, 88,165, 28,
+ 29, 29,137, 41,217,129,218,165,164,164,212,213,213, 71,171, 1, 82, 1, 64, 0,177, 96,230, 46, 92,237,119,250, 56, 8,152, 91,
+128,165, 63,145, 21, 6,206,209, 30,134, 52, 32,185,122,150, 25, 3,219,119, 60,163,255,104, 37, 56, 90,101,134,191, 4,135, 0,
+120,229,113,226,196, 9,228,230, 63, 49,122,151,149,242, 96,230,210,232,158,175,248,117,253,251,247,143,157,139,145,137,137,129,
+139,147,225,195,167,127, 63,255,255,231,230,100,252,241,143,225,251,207,255, 50,162, 76,255,254, 48,220,126,252,119,207,158, 61,
+ 88, 59, 1,159, 62,158, 16, 16,224,102, 99,251,159,154, 96,254,247,239,255, 23,175,126, 61,122,250,129,129,245, 49,167,224,207,
+231,175, 30, 48,177,125,188,118,237,195,211,151,123, 72,157, 75,160,112, 68, 8,249,102, 49, 98, 0,242,137,123,152,247,119,226,
+ 2,239,222,185,192,217, 66, 66,123,112, 21,145, 4,235, 27,100, 17, 60,117, 15, 48,105,249,248,248, 64,202,253,171, 87,175, 66,
+ 24,144,182, 63, 80, 28,143,141,236,236,236, 95,191,126,213,212,212, 4,150,125,192,132,148,156,156, 12, 20,252,253,251,247,130,
+ 5, 11,128, 29,232,115,231,206,173, 92,185,242,251,247,239,152,119,221, 64,128,183,183, 55,217,145, 50,119,238, 92,252,149, 40,
+ 49, 45,122,184, 33, 68,170,103, 0,159,215, 4, 44,190,159, 61, 67,191,208, 7, 40, 72,124,129,254, 12, 12, 70,171, 1, 76, 0,
+ 31,243,193,218, 21, 0, 8, 32, 22, 98, 90,241,148, 20,199,164, 2,228,118, 52, 81,173,254, 89,233, 12,146, 12,179,124, 65, 89,
+113,214,217, 52,248,104, 15,184,213,255, 17,185, 31,128,191, 4,127,245,234, 21,188,212, 38,178, 4,199, 15, 32,245, 10,176,188,
+192,117,216, 6,158, 2, 8, 50,254,131,169, 23,168,229,205,181, 34, 73,240,224, 15, 68,228,251,223,255, 63,126, 49,252, 6,115,
+127,255,249,255,159, 9,196,184,124,233, 44,176, 30,101, 96, 96, 67, 51,246,227,199,171,172,236,130, 34, 66, 2, 31,222,125,251,
+240,241,195,137, 51, 47,158,190,252,207,198,253, 77, 90,229,203,247,111,111, 84,245,126, 43,104,254, 92, 57,251,236,157, 59,119,
+ 24, 24, 56, 70,115, 14,133,205,127, 32, 0, 54,255,129,197,253,150, 45, 91,180,181,181, 67, 67, 67, 9,150,254,144, 10,224,245,
+235,215, 92, 92, 92,118,118,118, 61, 61, 61,192, 14, 1, 48, 25, 44, 92,184, 16, 88,250, 3, 27, 25,123,247,238,189,124,249,178,
+136,136, 8,158,171,108,128,245, 55,174, 33,160,217,179,103,227,177,154, 42, 67, 64, 64, 67,200, 24, 2, 2,150,218,152, 21, 0,
+ 25,199, 55,141, 86, 3,164, 2,128, 0, 26, 92,199, 65, 99,222, 43, 66,228,224, 0,168,189, 95,113,159,129,153, 45,205, 77,129,
+ 65, 64, 97, 22,248,226, 63,252,163,255, 84, 25,196,128, 76,252,194,219,254,200, 0, 50, 43,128,217,189, 32,178,197,186,180,132,
+ 27,179, 55,192,251,169,248,193,175,255, 47,222, 0, 91,127, 76, 60, 92,160,174, 58,176,208,255,241,147, 1, 88, 7, 0,201, 95,
+191, 25,126,124,103,248,245, 19,214, 2, 69,173, 60,120,254, 20, 61,125, 36, 39,171,200,243,159,149,229,205,247,239,251, 15, 62,
+190,118,231,233,187,119, 95,180,141,255,126,253,241,231,199,207,191,223,191,253,123,241,136,225,251, 87,134,238,238,238,209, 19,
+162,176,246, 84,136, 76,144,144,230,191,150,150, 22,176,225, 15,172, 12,128, 21, 0,164, 19, 64,176,244,135, 12, 1, 25, 24, 24,
+112,112,112, 0, 11,253,164,164,164,246,246,118, 96, 73,122,242,228,201,131, 7, 15, 94,186,116,233,227,199,143,170,170,170,159,
+ 62,125,194,115,203, 77, 64, 64, 0,102,219, 2,210,227,193,223, 63, 24,168, 33, 32,172,157, 0,146,154,255,163,213, 0,217, 0,
+ 32,128, 6, 69, 5, 0, 25,250,135,116,147,145,235, 0,120,102,131, 12,214, 19, 63, 82, 12, 41,247,129, 13,127,240, 40, 16,219,
+172,165,212,119, 51,100,229,143,139,139,203,158, 61,123,112,117,101,112,245,102,176, 22,238,196,140, 5,197, 87,126,149, 18,103,
+138,242,101, 3, 22,247,252,188,140, 76,140,224,134, 63,195,255, 31,223, 24,190,254,250, 15,236, 22,124,253,241,255,223,127,236,
+ 55,127,196,231,127,213,213,191, 39,161,241,110,247,246, 87,239,222,253, 48,176,252,164, 39,244,133,129,245,231,143,111,255, 94,
+ 61,253,255,245, 43,227,159, 63,140, 66, 34,140, 12,140,255, 70,115, 5, 85, 0, 36, 61, 35, 79,168, 0,107, 2,228,162, 25,235,
+ 76, 0,176,100, 47, 43, 43, 99, 97, 97, 89,180,104,209,252,249,243, 19, 19, 19, 59, 58, 58,128, 37,242,131, 7, 15,190,127,255,
+ 14,204, 38,192,182,127, 70, 70, 6,158,197, 75,100, 79,189, 14,212, 16, 16,214, 78, 0,121,167,183,142, 2, 82, 1, 64, 0, 13,
+150, 30, 0,242,176, 53,102, 65,143,171,144, 69, 6,179,206,166,193,138,254,219,171, 39,221, 7,175, 2, 66,212, 7,120, 70,129,
+ 40, 25,225, 1, 58, 12,222,252,135,244, 6,224,108, 96, 15, 0,178,199, 10,115,242,153, 96,233, 15, 89, 5,132,169,247,207, 95,
+134,175,223,254,255,252, 5,154,242, 5,146, 44,236, 80, 65, 96, 5,240,253,247,255,183,239,254,191,126,255,255,220,181, 63,255,
+254,129,134,242,174, 62, 69, 49,243,207, 31,134,103,143,127, 61,190,251,254,200,241,247,192, 70,222,181, 27,255,124,162,254,176,
+177,252,127,253,146,225,200, 46,134, 79,159,254,255,255,199, 96,227,196,200,193,193,224,233,233, 79,204, 74,195, 13, 11,210, 3,
+ 18,200, 92,167, 75,201, 13, 98, 36,221,187, 0, 7, 66, 66,123,232,150,152,209, 18, 48,144,107,100,100,116,238,220,185,205,155,
+ 55, 35,139,227,154, 10, 6,182, 45, 4, 4, 4, 32,141,232,121,243,230, 1,251, 1,192,154, 0, 82,115, 0,165, 62,124,248, 0,
+236, 1,124,251,134,239,174,151,212,212, 84,228,161, 27, 72,243, 31,255,248,207,192, 14, 1,161,117, 2, 40,105,254, 67,180,143,
+182,253,137, 4, 0, 1, 52, 88, 42,128,179,103,207,226, 90,187, 2, 20, 39,176,126,148,157,123,181,194, 33,134, 63,103, 25, 20,
+185,211, 90, 21,103, 29, 0,118,180,103,193, 42, 3, 87,226, 71,129,144, 87,130, 98,174, 10,197,204,225,192, 82, 12, 82,250, 35,
+207, 0, 67,218,254, 16, 46,214, 30, 0, 92, 47,121, 37,203,237,219,183, 31, 93,153,244, 79,244, 31, 19, 11, 3, 43, 19, 40,167,
+253,254,247, 31, 88,184,127,254,252,255,215,111,134, 63,191, 65,245, 65, 97, 17,168, 59,117,245,233, 19, 76,189, 15,111, 77,212,
+214,254,119,248,224, 95, 70, 38,134,215, 47, 24, 57, 56, 25, 14,238, 96,248,245, 29, 88, 66, 48,232, 25,177, 62,123,244,207,222,
+222, 27,152,111, 9,238, 36, 4,150,254, 93,217, 12,101, 83,201,169, 3, 40,185, 64,152, 60,189,184,134, 53,232, 3, 32, 43,127,
+124,124,124, 32, 81, 15,233,206, 2,155,249, 88, 21,255,251,247,239,252,249,243,182,182,182,112, 17, 96, 29, 0, 41,139,127,255,
+254,253,247,239, 95, 96, 36,138,138,138,226,154, 4,134,143, 2,145,209,126, 31,192, 33, 32,180, 78, 0,217,205,255,209,162,159,
+ 84, 0, 16, 64,164, 85, 0,192,130,152, 22, 59, 33, 33,141,101, 96,174, 0, 50, 92, 92, 92,208,218,254,144, 98,148,248,173,170,
+240, 85, 64, 16, 46, 49,109,127,228, 25, 96, 8,128,112, 33,139, 65,241,235,133,151,254,104,243, 1,196,232,197, 5,128,205,127,
+ 92,122, 85, 85, 85,231,207,249,237,108,193, 10, 44, 0,126,255,250,199,206, 6,202,171,159,191,254,255,249,251, 63,176,232, 63,
+123,229,239,223,127,255,113,173,227, 4,234, 93,188,240,143,189, 3,115, 96, 52,243,151,207,255, 63,127,100,248,250,153, 81, 81,
+245,255,223,223,140, 44, 76, 28, 31,222,253,123,246,228, 87, 73, 33,225,113,106, 96,233, 63, 33,159, 65, 77,142, 97,114, 17, 67,
+110, 31,153,117, 0,217,125, 2,242,244, 82,190,238,147,188,148, 15, 44,253, 27, 26, 26,144, 27,251, 93, 93, 93, 64, 46,174,221,
+ 97,191,126,253, 2, 22, 97, 63,126,252, 96,102,102,134,220,125,182,118,237,218,224,224,224,239,223,191, 3, 5,127,254,252,201,
+195,195, 3,172, 6,240,123,135,188,181, 64, 3, 59, 4, 4,239, 4, 64, 24,163, 69, 63,125, 0, 64, 0,145, 80, 1, 80, 88,250,
+227,209, 14, 44,244, 33,165, 60,100,220, 28,190,228, 20,185,225,143, 86, 49,160, 0,102, 70, 6, 54, 38, 6, 78,102, 6, 30, 22,
+134,159,159, 87,183,179, 50,112,158, 74, 11, 81,100,224, 20,154,181,152,168,134, 63,214, 53, 63,144, 18, 28,255,162,120,228,210,
+ 31,121, 62,128, 24,189,248, 75,127, 60,122,219, 58,103, 20,229,103,112,112, 0, 91,139, 12,186,234,204,208,176,186,252,247,247,
+223,255,127,255, 49,151,148,148,224, 49,188,169,101, 70, 73, 73, 6,176,199,240,235,247,255,191,127, 24,128, 93, 8, 7,111,134,
+207, 31, 24,111, 92, 4, 22, 48, 76,126,190, 65,196,148,254, 13,201, 12, 42,224,131, 73,148,165, 25,200,238, 7,140, 4,128,185,
+231, 11,180,178, 11, 12,112,105, 1, 86, 0,192,178, 30,180, 29, 67, 95,255,207,159, 63,172,172,172,192, 54, 53,176, 17, 3, 44,
+253,191,125,251, 6,108,254, 11, 10, 10,226, 89, 6, 10, 7,240, 1, 85, 98, 6,127, 6,195, 16, 16,188, 19, 64, 70, 56, 19,185,
+ 93, 96, 20, 96, 2,128, 0, 34,182, 2,160, 81,219, 31,107,215, 30,115,192,135,108,171, 9,142,254, 83, 82,250, 51,160,206,244,
+194,235, 48, 6,240,106, 90,130,122,113,205, 4, 16,163,183,111,226, 12, 96,112, 49, 49, 49, 28, 57, 11, 26,241,135,204,250,130,
+135,254, 75, 8,234,237,233,153,145,145, 9,222,240,193, 4,210,114,234, 16,195,215, 47,255,254,255, 99,240,243,243,118,119,119,
+ 39, 88,250,151,199, 48, 8,240, 48, 60,123,195,192,201,206,240,239, 63, 3, 55, 7, 67,107, 58, 67,245,204, 97, 91, 7,224,234,
+ 94, 16,147, 38,209, 74,255,140,140, 12, 72,209,191,121,243,102, 96, 41,137,181, 26, 0, 86, 0, 76, 76, 76,192,246,236,231,207,
+159,207,156, 57, 99,104,104, 8,172, 6, 62,126,252,120,241,226, 69, 69, 69, 69, 97, 97, 97, 96,233, 15, 20, 33,216,161,129,236,
+ 8, 35,169, 67, 48,224, 67, 64,228,181,253,201,214, 53, 10,128, 0, 32,128,208, 43, 0, 92, 75,254,137, 92,253, 70, 73, 15, 26,
+168, 0,243, 80, 54,130,165,225,172,180,153,160,209,158, 91, 12, 32,132, 0, 31,193,232, 62,217,110, 38,166, 20,134,251, 8, 88,
+ 70, 64,246, 19, 0,171, 13, 82,175, 50, 6,234, 93, 90,194, 13,169, 15, 72,189,161, 23, 30, 92,144, 89, 95,226, 59, 28, 51,166,
+ 35,244,126,249, 4, 42, 32,252,252,252,136,212,219,185,132,154,197, 40,173,245, 14,224,208, 63, 3,234, 52, 47, 48,192,129,101,
226,150, 45, 91, 48,165,208, 42, 0,160, 50, 96, 3, 31,200,144,147,147,251,240,225, 67,109,109, 45,176, 2,144,150,150,254,242,
229, 11, 80, 16, 50, 19, 64,208,106, 50, 70,129, 94,188,120, 65,185,151,169, 98,200, 40,160, 27, 0, 8,160, 65,113, 41, 60, 28,
- 0,139, 48, 50,204, 33,123,133, 15, 21,251, 52, 4,143,126, 35,163, 43, 64, 76,112, 97,101,147,170,151,152,210,159,146,102,254,
+ 0,139, 48, 50,204, 33,123,133, 15, 21,251, 52, 4,143,126, 35,163, 43, 64, 76,112, 97,101,147,170,151,248,210,159,188,102,254,
64,165, 43,170,196, 47,121,134,192,143,243,132,159,232,169,169,169, 57,111,222,188,127, 96,128,167,253, 14,105,221, 3,213, 0,
11,122,200, 97,112,224, 10,254, 31, 29, 14,131, 27, 5,195, 27, 96,221,220, 3, 16, 64,163,151,194,143,130, 81, 48, 10, 70,193,
8, 5, 0, 1, 52,122, 35,216, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16,
@@ -1449,7 +1437,7 @@ char datatoc_blenderbuttons[]= {
123,223,254,127, 99, 96,100, 96,251,199, 42, 39, 42, 47, 42, 44, 74, 80,215,177, 99,199,144,185, 86, 86, 86,163, 13,213, 81, 64,
35, 0, 16, 64,212, 60, 12,142,200, 75, 84,174, 62,253,128, 41,136, 86,230, 34,111, 71,196, 95, 28, 19,185, 75, 8, 79,229, 1,
49, 1, 82,162, 97, 46,208,134,200, 98, 93, 44,139,108,181,180,162, 44,144,124,249,227,199,159,239,224,243,248, 63,124, 98, 0,
-159, 95,132,239, 4, 11, 48, 64,190,144,178,175,175,143,152, 11,208,153, 24, 65, 27,113, 33, 36, 16, 96,101, 76,159, 65,147,202,
+159, 95,132,239, 4, 11, 48, 64,190,144,178,175,175,143,152, 11,208,153, 24, 65, 91,112, 33, 36, 16, 96,101, 76,159, 65,147,202,
18, 57,172, 32, 69, 63,241, 97, 69,118,253, 13, 41,253,193, 5, 55,168, 14, 32,222, 40, 72,133,129, 81, 1,144,230,140, 95,191,
202,119,238, 76,115,119,159,229,235,219, 9,233, 13, 16, 89, 13, 28,185,122, 68,222, 80, 54, 57, 56, 65,144, 75,240,223,159,191,
63,254,255,220,113,114,215,190,131,123,173,148,172, 57, 56, 56,240,148,254,153,153,153,200, 34,211,167, 79, 31,173, 3, 70, 1,
@@ -1547,5 +1535,5 @@ char datatoc_blenderbuttons[]= {
225,100, 23,103,148, 55,123,233, 48,122,142,117,248, 7,118,226, 6,253,194,138, 18,143,147,218, 78,167,238,112, 16,168,148,127,
136, 69,220,164,218,132,160, 94, 46, 46, 46, 29, 85, 93, 74,156, 29, 28, 28, 60, 90,132,141, 2,202,235, 0, 92, 82, 0, 1, 52,
122, 41,252, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 55,130,141,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,
-130, 81, 48, 10, 70,193, 8, 5, 0, 1, 6, 0,178,212, 98,212,112,143,196, 46, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+130, 81, 48, 10, 70,193, 8, 5, 0, 1, 6, 0,179, 52, 4, 9, 62,158, 98,201, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
};
diff --git a/source/blender/src/butspace.c b/source/blender/src/butspace.c
index 43813f7f907..a068ec8c71e 100644
--- a/source/blender/src/butspace.c
+++ b/source/blender/src/butspace.c
@@ -221,6 +221,23 @@ void test_grouppoin_but(char *name, ID **idpp)
*idpp= NULL;
}
+void test_texpoin_but(char *name, ID **idpp)
+{
+ ID *id;
+
+ if( *idpp ) (*idpp)->us--;
+
+ id= G.main->tex.first;
+ while(id) {
+ if( strcmp(name, id->name+2)==0 ) {
+ *idpp= id;
+ id_us_plus(id);
+ return;
+ }
+ id= id->next;
+ }
+ *idpp= NULL;
+}
/* --------------------------------- */
@@ -372,11 +389,12 @@ void redraw_test_buttons(Object *new)
addqueue(sa->win, REDRAW, 1);
buts->re_align= 1;
- if(new) {
- BIF_preview_changed(buts);
+ if(new && buts->mainb==CONTEXT_SHADING) {
+ /* does node previews too... */
+ BIF_preview_changed(ID_TE);
}
}
- // always to context switch
+ // always do context switch
if(new) butspace_context_switch(buts, new);
}
diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c
index 963744696ac..51f9b2531c6 100644
--- a/source/blender/src/buttons_shading.c
+++ b/source/blender/src/buttons_shading.c
@@ -49,6 +49,7 @@
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
+#include "DNA_node_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_radio_types.h"
#include "DNA_screen_types.h"
@@ -64,6 +65,7 @@
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_node.h"
#include "BKE_material.h"
#include "BKE_utildefines.h"
#include "BKE_texture.h"
@@ -77,6 +79,7 @@
#include "BSE_filesel.h"
#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "BIF_gl.h"
#include "BIF_graphics.h"
@@ -107,9 +110,8 @@
/* ---------function prototypes ------------- */
void load_tex_image(char *);
void load_plugin_tex(char *);
-int vergcband(const void *, const void *);
+
void save_env(char *);
-void drawcolorband(ColorBand *, float , float , float , float );
static MTex emptytex;
static int packdummy = 0;
@@ -213,7 +215,7 @@ void load_tex_image(char *str) /* called from fileselect */
BIF_undo_push("Load image");
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
}
@@ -230,20 +232,9 @@ void load_plugin_tex(char *str) /* called from fileselect */
tex->plugin= add_plugin_tex(str);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
-int vergcband(const void *a1, const void *a2)
-{
- const CBData *x1=a1, *x2=a2;
-
- if( x1->pos > x2->pos ) return 1;
- else if( x1->pos < x2->pos) return -1;
- return 0;
-}
-
-
-
void save_env(char *name)
{
Tex *tex;
@@ -264,276 +255,18 @@ void save_env(char *name)
}
-void drawcolorband(ColorBand *coba, float x1, float y1, float sizex, float sizey)
-{
- CBData *cbd;
- float dx, v3[2], v1[2], v2[2];
- int a;
-
- if(coba==NULL) return;
-
- /* first background, to show tranparency */
- dx= sizex/12.0;
- v1[0]= x1;
- for(a=0; a<12; a++) {
- if(a & 1) glColor3f(0.3, 0.3, 0.3); else glColor3f(0.8, 0.8, 0.8);
- glRectf(v1[0], y1, v1[0]+dx, y1+0.5*sizey);
- if(a & 1) glColor3f(0.8, 0.8, 0.8); else glColor3f(0.3, 0.3, 0.3);
- glRectf(v1[0], y1+0.5*sizey, v1[0]+dx, y1+sizey);
- v1[0]+= dx;
- }
-
- glShadeModel(GL_SMOOTH);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
-
- cbd= coba->data;
-
- v1[0]= v2[0]= x1;
- v1[1]= y1;
- v2[1]= y1+sizey;
-
- glBegin(GL_QUAD_STRIP);
-
- glColor4fv( &cbd->r );
- glVertex2fv(v1); glVertex2fv(v2);
-
- for(a=0; a<coba->tot; a++, cbd++) {
-
- v1[0]=v2[0]= x1+ cbd->pos*sizex;
-
- glColor4fv( &cbd->r );
- glVertex2fv(v1); glVertex2fv(v2);
- }
-
- v1[0]=v2[0]= x1+ sizex;
- glVertex2fv(v1); glVertex2fv(v2);
-
- glEnd();
- glShadeModel(GL_FLAT);
- glDisable(GL_BLEND);
-
- /* outline */
- v1[0]= x1; v1[1]= y1;
-
- cpack(0x0);
- glBegin(GL_LINE_LOOP);
- glVertex2fv(v1);
- v1[0]+= sizex;
- glVertex2fv(v1);
- v1[1]+= sizey;
- glVertex2fv(v1);
- v1[0]-= sizex;
- glVertex2fv(v1);
- glEnd();
-
-
- /* help lines */
-
- v1[0]= v2[0]=v3[0]= x1;
- v1[1]= y1;
- v2[1]= y1+0.5*sizey;
- v3[1]= y1+sizey;
-
- cbd= coba->data;
- glBegin(GL_LINES);
- for(a=0; a<coba->tot; a++, cbd++) {
- v1[0]=v2[0]=v3[0]= x1+ cbd->pos*sizex;
-
- glColor3ub(0, 0, 0);
- glVertex2fv(v1);
- glVertex2fv(v2);
-
- if(a==coba->cur) {
- glVertex2f(v1[0]-1, v1[1]);
- glVertex2f(v2[0]-1, v2[1]);
- glVertex2f(v1[0]+1, v1[1]);
- glVertex2f(v2[0]+1, v2[1]);
- }
-
- glColor3ub(255, 255, 255);
- glVertex2fv(v2);
- glVertex2fv(v3);
-
- if(a==coba->cur) {
- if(cbd->pos>0.01) {
- glVertex2f(v2[0]-1, v2[1]);
- glVertex2f(v3[0]-1, v3[1]);
- }
- if(cbd->pos<0.99) {
- glVertex2f(v2[0]+1, v2[1]);
- glVertex2f(v3[0]+1, v3[1]);
- }
- }
- }
- glEnd();
-
-
- glFlush();
-}
-
-static void drawcolorband_cb(void)
+static int vergcband(const void *a1, const void *a2)
{
- ID *id, *idfrom;
-
- buttons_active_id(&id, &idfrom); /* base material, not the matlayer! */
- if( GS(id->name)==ID_TE) {
- Tex *tex= (Tex *)id;
- drawcolorband(tex->coba, 10,145,300,30);
- }
- else if( GS(id->name)==ID_MA) {
- Material *ma= (Material *)id;
- ma= get_active_matlayer(ma);
- if(ma) {
- if(ma->ramp_show==0)
- drawcolorband(ma->ramp_col, 10,110,300,30);
- else
- drawcolorband(ma->ramp_spec, 10,110,300,30);
- }
- }
-}
-
-static void do_colorbandbuts(ColorBand *coba, unsigned short event)
-{
- int a;
-
- if(coba==NULL) return;
-
- switch(event) {
- case B_ADDCOLORBAND:
-
- if(coba->tot < MAXCOLORBAND-1) coba->tot++;
- coba->cur= coba->tot-1;
-
- do_colorbandbuts(coba, B_CALCCBAND);
- BIF_undo_push("Add colorband");
-
- break;
-
- case B_DELCOLORBAND:
- if(coba->tot<2) return;
-
- for(a=coba->cur; a<coba->tot; a++) {
- coba->data[a]= coba->data[a+1];
- }
- if(coba->cur) coba->cur--;
- coba->tot--;
-
- BIF_undo_push("Delete colorband");
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
- break;
-
- case B_CALCCBAND:
- case B_CALCCBAND2:
- if(coba->tot<2) return;
-
- for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
- qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
- for(a=0; a<coba->tot; a++) {
- if(coba->data[a].cur==coba->cur) {
- if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); /* button cur */
- coba->cur= a;
- break;
- }
- }
- if(event==B_CALCCBAND2) return;
-
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
-
- break;
-
- case B_DOCOLORBAND:
-
- break;
- }
-}
-
-/* callback for label button... the size of the button (300) still hardcoded! */
-static void do_colorband_cb(void *namev, void *arg2_unused)
-{
- ColorBand *coba= namev;
- CBData *cbd;
- uiBlock *block;
- float dx;
- int a;
- short mval[2], mvalo[2];
-
- /* weak; find panel where colorband is */
- block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Colors");
- if(block==NULL) block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Ramps");
+ const CBData *x1=a1, *x2=a2;
- if(coba && block) {
- int mindist= 12, xco;
- uiGetMouse(mywinget(), mvalo);
-
- if(G.qual & LR_CTRLKEY) {
- /* insert new key on mouse location */
- if(coba->tot < MAXCOLORBAND-1) {
- float pos= ((float)(mvalo[0] - 12))/300.0f;
- float col[4];
-
- do_colorband(coba, pos, col);
-
- coba->tot++;
- coba->cur= coba->tot-1;
-
- coba->data[coba->cur].r= col[0];
- coba->data[coba->cur].g= col[1];
- coba->data[coba->cur].b= col[2];
- coba->data[coba->cur].a= col[3];
- coba->data[coba->cur].pos= pos;
-
- do_colorbandbuts(coba, B_CALCCBAND);
- BIF_undo_push("Add colorband");
- }
- }
- else {
-
- /* first, activate new key when mouse is close */
- for(a=0, cbd= coba->data; a<coba->tot; a++, cbd++) {
- xco= 12 + (cbd->pos*300.0);
- xco= ABS(xco-mvalo[0]);
- if(a==coba->cur) xco+= 5; // selected one disadvantage
- if(xco<mindist) {
- coba->cur= a;
- mindist= xco;
- }
- }
-
- cbd= coba->data + coba->cur;
-
- while(get_mbut() & L_MOUSE) {
- uiGetMouse(mywinget(), mval);
- if(mval[0]!=mvalo[0]) {
- dx= mval[0]-mvalo[0];
- dx/= 300.0;
- cbd->pos+= dx;
- CLAMP(cbd->pos, 0.0, 1.0);
-
- glDrawBuffer(GL_FRONT);
- drawcolorband_cb();
- glDrawBuffer(GL_BACK);
-
- do_colorbandbuts(coba, B_CALCCBAND2);
- cbd= coba->data + coba->cur; /* because qsort */
-
- mvalo[0]= mval[0];
- }
- BIF_wait_for_statechange();
- }
- }
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
- shade_buttons_change_3d();
- }
+ if( x1->pos > x2->pos ) return 1;
+ else if( x1->pos < x2->pos) return -1;
+ return 0;
}
void do_texbuts(unsigned short event)
{
Tex *tex;
- Material *ma;
ImBuf *ibuf;
ScrArea *sa;
ID *id;
@@ -545,21 +278,21 @@ void do_texbuts(unsigned short event)
switch(event) {
case B_TEXCHANNEL:
scrarea_queue_headredraw(curarea);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
allqueue(REDRAWBUTSSHADING, 0);
break;
case B_TEXTYPE:
if(tex==0) return;
tex->stype= 0;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_DEFTEXVAR:
if(tex==0) return;
default_tex(tex);
BIF_undo_push("Default texture vars");
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_LOADTEXIMA:
if(tex==0) return;
@@ -600,13 +333,9 @@ void do_texbuts(unsigned short event)
load_tex_image(str);
}
break;
- case B_TEXPRV:
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
- break;
case B_TEXREDR_PRV:
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
shade_buttons_change_3d();
break;
case B_TEXIMABROWSE:
@@ -625,7 +354,7 @@ void do_texbuts(unsigned short event)
BIF_undo_push("Browse image");
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
}
}
@@ -647,7 +376,7 @@ void do_texbuts(unsigned short event)
IMB_freeImBuf(ibuf);
tex->ima->ibuf= 0;
tex->ima->ok= 1;
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
}
}
@@ -676,7 +405,7 @@ void do_texbuts(unsigned short event)
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIMAGE, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
allqueue(REDRAWBUTSSHADING, 0); // redraw buttons
@@ -686,7 +415,7 @@ void do_texbuts(unsigned short event)
tex->ima->id.us--;
tex->ima= NULL;
allqueue(REDRAWBUTSSHADING, 0); // redraw buttons
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
break;
case B_TEXSETFRAMES:
@@ -741,49 +470,29 @@ void do_texbuts(unsigned short event)
tex->stype= 0;
tex->plugin= add_plugin_tex(str);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_COLORBAND:
if(tex==0) return;
- if(tex->coba==0) tex->coba= add_colorband();
+ if(tex->coba==0) tex->coba= add_colorband(0);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed(); // also ramps, so we do this
- break;
-
- case B_ADDCOLORBAND:
- case B_DELCOLORBAND:
- case B_CALCCBAND:
- case B_CALCCBAND2:
- case B_DOCOLORBAND:
- /* these events can be called from material subcontext too */
- id= G.buts->lockpoin;
- if(id) {
- if( GS(id->name)==ID_TE) {
- tex= (Tex *)id;
- do_colorbandbuts(tex->coba, event);
- }
- else {
- ma= get_active_matlayer((Material *)id);
- if(ma->ramp_show==0) do_colorbandbuts(ma->ramp_col, event);
- else do_colorbandbuts(ma->ramp_spec, event);
- }
- }
+ BIF_preview_changed(ID_TE); // also ramps, so we do this
break;
-
+
case B_ENV_DELETE:
if(tex->env) {
RE_free_envmap(tex->env);
tex->env= 0;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
break;
case B_ENV_FREE:
if(tex->env) {
RE_free_envmapdata(tex->env);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
break;
case B_ENV_FREE_ALL:
@@ -797,7 +506,7 @@ void do_texbuts(unsigned short event)
tex= tex->id.next;
}
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_ENV_SAVE:
if(tex->env && tex->env->ok) {
@@ -809,7 +518,7 @@ void do_texbuts(unsigned short event)
break;
case B_ENV_OB:
if(tex->env && tex->env->object) {
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
if ELEM(tex->env->object->type, OB_CAMERA, OB_LAMP) {
error("Camera or Lamp not allowed");
tex->env->object= NULL;
@@ -822,7 +531,7 @@ void do_texbuts(unsigned short event)
PluginTex *pit= tex->plugin;
if(pit && pit->callback) {
pit->callback(event - B_PLUGBUT);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
allqueue(REDRAWBUTSSHADING, 0);
}
}
@@ -1353,39 +1062,113 @@ static void texture_panel_image(Tex *tex)
}
-static void draw_colorband_buts(uiBlock *block, ColorBand *coba, int offs, int redraw)
+static void colorband_pos_cb(void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+ int a;
+
+ if(coba->tot<2) return;
+
+ for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
+ qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+ for(a=0; a<coba->tot; a++) {
+ if(coba->data[a].cur==coba->cur) {
+ if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); /* button cur */
+ coba->cur= a;
+ break;
+ }
+ }
+}
+
+static void colorband_add_cb(void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+
+ if(coba->tot < MAXCOLORBAND-1) coba->tot++;
+ coba->cur= coba->tot-1;
+
+ colorband_pos_cb(coba, NULL);
+ BIF_undo_push("Add colorband");
+
+}
+
+static void colorband_del_cb(void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+ int a;
+
+ if(coba->tot<2) return;
+
+ for(a=coba->cur; a<coba->tot; a++) {
+ coba->data[a]= coba->data[a+1];
+ }
+ if(coba->cur) coba->cur--;
+ coba->tot--;
+
+ BIF_undo_push("Delete colorband");
+ BIF_preview_changed(ID_TE);
+}
+
+
+/* offset aligns from bottom, standard width 300, height 115 */
+static void draw_colorband_buts(uiBlock *block, ColorBand *coba, int xoffs, int yoffs, int redraw)
{
CBData *cbd;
uiBut *bt;
-
+
if(coba==NULL) return;
- uiDefBut(block, BUT, B_ADDCOLORBAND, "Add", 90,180+offs,37,20, 0, 0, 0, 0, 0, "Adds a new colour position to the colorband");
- uiDefButS(block, NUM, B_REDR, "Cur:", 127,180+offs,81,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active colour from the colorband");
- uiDefBut(block, BUT, B_DELCOLORBAND, "Del", 209,180+offs,37,20, 0, 0, 0, 0, 0, "Deletes the active position");
- uiDefButS(block, ROW, redraw, "E", 246,180+offs,16,20, &coba->ipotype, 5.0, 1.0, 0, 0, "Sets interpolation type 'Ease' (quadratic) ");
- uiDefButS(block, ROW, B_TEXREDR_PRV, "C", 262,180+offs,16,20, &coba->ipotype, 5.0, 3.0, 0, 0, "Sets interpolation type Cardinal");
- uiDefButS(block, ROW, B_TEXREDR_PRV, "L", 278,180+offs,16,20, &coba->ipotype, 5.0, 0.0, 0, 0, "Sets interpolation type Linear");
- uiDefButS(block, ROW, B_TEXREDR_PRV, "S", 294,180+offs,16,20, &coba->ipotype, 5.0, 2.0, 0, 0, "Sets interpolation type B-Spline");
-
- bt=uiDefBut(block, LABEL, B_DOCOLORBAND, "", 10,150+offs,300,30, 0, 0, 0, 0, 0, "Colorband"); /* only for event! */
- uiButSetFunc(bt, do_colorband_cb, coba, NULL);
+ bt= uiDefBut(block, BUT, redraw, "Add", 80+xoffs,95+yoffs,37,20, 0, 0, 0, 0, 0, "Adds a new colour position to the colorband");
+ uiButSetFunc(bt, colorband_add_cb, coba, NULL);
+ uiDefButS(block, NUM, redraw, "Cur:", 117+xoffs,95+yoffs,81,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active colour from the colorband");
+ bt= uiDefBut(block, BUT, redraw, "Del", 199+xoffs,95+yoffs,37,20, 0, 0, 0, 0, 0, "Deletes the active position");
+ uiButSetFunc(bt, colorband_del_cb, coba, NULL);
+ uiDefButS(block, ROW, redraw, "E", 236+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 1.0, 0, 0, "Sets interpolation type 'Ease' (quadratic) ");
+ uiDefButS(block, ROW, redraw, "C", 252+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 3.0, 0, 0, "Sets interpolation type Cardinal");
+ uiDefButS(block, ROW, redraw, "L", 268+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 0.0, 0, 0, "Sets interpolation type Linear");
+ uiDefButS(block, ROW, redraw, "S", 284+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 2.0, 0, 0, "Sets interpolation type B-Spline");
- uiBlockSetDrawExtraFunc(block, drawcolorband_cb);
+ uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, "");
+
cbd= coba->data + coba->cur;
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_CALCCBAND, "Pos", 10,125+offs,110,20, &cbd->pos, 0.0, 1.0, 10, 0, "Sets the position of the active colour");
- uiDefButF(block, COL, B_TEXREDR_PRV, "", 10,105+offs,110,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "");
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "A ", 10,85+offs,110,20, &cbd->a, 0.0, 1.0, 0, 0, "Sets the alpha value for this position");
+ bt= uiDefButF(block, NUM, redraw, "Pos", xoffs,40+yoffs,110,20, &cbd->pos, 0.0, 1.0, 10, 0, "Sets the position of the active colour");
+ uiButSetFunc(bt, colorband_pos_cb, coba, NULL);
+ uiDefButF(block, COL, redraw, "", xoffs,20+yoffs,110,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "");
+ uiDefButF(block, NUMSLI, redraw, "A ", xoffs,yoffs,110,20, &cbd->a, 0.0, 1.0, 10, 0, "Sets the alpha value for this position");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "R ", 125,125+offs,185,20, &cbd->r, 0.0, 1.0, B_BANDCOL, 0, "Sets the red value for the active colour");
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "G ", 125,105+offs,185,20, &cbd->g, 0.0, 1.0, B_BANDCOL, 0, "Sets the green value for the active colour");
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "B ", 125,85+offs,185,20, &cbd->b, 0.0, 1.0, B_BANDCOL, 0, "Sets the blue value for the active colour");
+ uiDefButF(block, NUMSLI, redraw, "R ", 115+xoffs,40+yoffs,185,20, &cbd->r, 0.0, 1.0, B_BANDCOL, 0, "Sets the red value for the active colour");
+ uiDefButF(block, NUMSLI, redraw, "G ", 115+xoffs,20+yoffs,185,20, &cbd->g, 0.0, 1.0, B_BANDCOL, 0, "Sets the green value for the active colour");
+ uiDefButF(block, NUMSLI, redraw, "B ", 115+xoffs,yoffs,185,20, &cbd->b, 0.0, 1.0, B_BANDCOL, 0, "Sets the blue value for the active colour");
uiBlockEndAlign(block);
}
+void draw_colorband_buts_small(uiBlock *block, ColorBand *coba, rctf *butr, int event)
+{
+ CBData *cbd;
+ uiBut *bt;
+ float unit= (butr->xmax-butr->xmin)/12.0f;
+ float xs= butr->xmin;
+
+ cbd= coba->data + coba->cur;
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, COL, event, "", xs,butr->ymin+20.0f,2.0f*unit,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "");
+ uiDefButF(block, NUM, event, "A:", xs+2.0f*unit,butr->ymin+20.0f,4.0f*unit,20, &(cbd->a), 0.0f, 1.0f, 10, 2, "");
+ bt= uiDefBut(block, BUT, event, "Del", xs+6.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Deletes the active position");
+ uiButSetFunc(bt, colorband_del_cb, coba, NULL);
+ uiDefButS(block, ROW, event, "E", xs+8.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 1.0, 0, 0, "Sets interpolation type 'Ease' (quadratic) ");
+ uiDefButS(block, ROW, event, "C", xs+9.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 3.0, 0, 0, "Sets interpolation type Cardinal");
+ uiDefButS(block, ROW, event, "L", xs+10.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 0.0, 0, 0, "Sets interpolation type Linear");
+ uiDefButS(block, ROW, event, "S", xs+11.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 2.0, 0, 0, "Sets interpolation type B-Spline");
+
+ uiDefBut(block, BUT_COLORBAND, event, "", xs,butr->ymin,butr->xmax-butr->xmin,20.0f, coba, 0, 0, 0, 0, "");
+ uiBlockEndAlign(block);
+
+}
+
static void texture_panel_colors(Tex *tex)
{
uiBlock *block;
@@ -1400,7 +1183,7 @@ static void texture_panel_colors(Tex *tex)
uiDefButBitS(block, TOG, TEX_COLORBAND, B_COLORBAND, "Colorband",10,180,80,20, &tex->flag, 0, 0, 0, 0, "Toggles colorband operations");
if(tex->flag & TEX_COLORBAND) {
- draw_colorband_buts(block, tex->coba, 0, B_TEXREDR_PRV);
+ draw_colorband_buts(block, tex->coba, 10, 85, B_TEXREDR_PRV);
}
/* RGB-BRICON */
@@ -1752,7 +1535,7 @@ void do_worldbuts(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWOOPS, 0);
BIF_undo_push("Unlink world texture");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
break;
case B_WMTEXCOPY:
@@ -1780,7 +1563,7 @@ void do_worldbuts(unsigned short event)
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
scrarea_queue_winredraw(curarea);
}
break;
@@ -1807,35 +1590,35 @@ static void world_panel_mapto(World *wrld)
/* TEXTURE OUTPUT */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, MTEX_STENCIL, B_MATPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
- uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_MATPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
- uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_MATPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
+ uiDefButBitS(block, TOG, MTEX_STENCIL, B_WORLDPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
+ uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_WORLDPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
+ uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_WORLDPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
- uiDefButF(block, NUMSLI, B_MATPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, COL, B_WORLDPRV, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
uiBlockEndAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value for textures to mix with values (not RGB)");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value for textures to mix with values (not RGB)");
/* MAP TO */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, WOMAP_BLEND, B_MATPRV, "Blend", 10,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour progression of the background");
- uiDefButBitS(block, TOG, WOMAP_HORIZ, B_MATPRV, "Hori", 85,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the horizon");
- uiDefButBitS(block, TOG, WOMAP_ZENUP, B_MATPRV, "ZenUp", 160,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith above");
- uiDefButBitS(block, TOG, WOMAP_ZENDOWN, B_MATPRV, "ZenDo", 235,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith below");
+ uiDefButBitS(block, TOG, WOMAP_BLEND, B_WORLDPRV, "Blend", 10,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour progression of the background");
+ uiDefButBitS(block, TOG, WOMAP_HORIZ, B_WORLDPRV, "Hori", 85,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the horizon");
+ uiDefButBitS(block, TOG, WOMAP_ZENUP, B_WORLDPRV, "ZenUp", 160,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith above");
+ uiDefButBitS(block, TOG, WOMAP_ZENDOWN, B_WORLDPRV, "ZenDo", 235,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith below");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_MATPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
+ uiDefButS(block, MENU, B_WORLDPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
- uiDefButF(block, NUMSLI, B_MATPRV, "Nor ", 155,80,155,19, &(mtex->norfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects normal values");
- uiDefButF(block, NUMSLI, B_MATPRV, "Var ", 155,60,155,19, &(mtex->varfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects other values");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "Nor ", 155,80,155,19, &(mtex->norfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects normal values");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "Var ", 155,60,155,19, &(mtex->varfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects other values");
}
@@ -1902,24 +1685,24 @@ static void world_panel_texture(World *wrld)
/* TEXCO */
uiBlockBeginAlign(block);
- uiDefButS(block, ROW, B_MATPRV, "View", 100,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view vector for the texture coordinates");
- uiDefButS(block, ROW, B_MATPRV, "Global", 200,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates (interior mist)");
+ uiDefButS(block, ROW, B_WORLDPRV, "View", 100,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view vector for the texture coordinates");
+ uiDefButS(block, ROW, B_WORLDPRV, "Global", 200,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates (interior mist)");
- uiDefButS(block, ROW, B_MATPRV, "AngMap", 100,90,70,20, &(mtex->texco), 4.0, (float)TEXCO_ANGMAP, 0, 0, "Uses 360 degree angular coordinates, e.g. for spherical light probes");
- uiDefButS(block, ROW, B_MATPRV, "Sphere", 170,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_SPHEREMAP, 0, 0, "For 360 degree panorama sky, spherical mapped, only top half");
- uiDefButS(block, ROW, B_MATPRV, "Tube", 235,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_TUBEMAP, 0, 0, "For 360 degree panorama sky, cylindrical mapped, only top half");
+ uiDefButS(block, ROW, B_WORLDPRV, "AngMap", 100,90,70,20, &(mtex->texco), 4.0, (float)TEXCO_ANGMAP, 0, 0, "Uses 360 degree angular coordinates, e.g. for spherical light probes");
+ uiDefButS(block, ROW, B_WORLDPRV, "Sphere", 170,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_SPHEREMAP, 0, 0, "For 360 degree panorama sky, spherical mapped, only top half");
+ uiDefButS(block, ROW, B_WORLDPRV, "Tube", 235,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_TUBEMAP, 0, 0, "For 360 degree panorama sky, cylindrical mapped, only top half");
- uiDefButS(block, ROW, B_MATPRV, "Object", 100,70,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
- uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_MATPRV, "", 170,70,130,20, &(mtex->object), "");
+ uiDefButS(block, ROW, B_WORLDPRV, "Object", 100,70,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_WORLDPRV, "", 170,70,130,20, &(mtex->object), "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "dX", 100,40,100,19, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dY", 100,20,100,19, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dZ", 100, 0,100,19, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
+ uiDefButF(block, NUM, B_WORLDPRV, "dX", 100,40,100,19, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
+ uiDefButF(block, NUM, B_WORLDPRV, "dY", 100,20,100,19, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
+ uiDefButF(block, NUM, B_WORLDPRV, "dZ", 100, 0,100,19, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "sizeX", 200,40,100,19, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
- uiDefButF(block, NUM, B_MATPRV, "sizeY", 200,20,100,19, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
- uiDefButF(block, NUM, B_MATPRV, "sizeZ", 200, 0,100,19, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
+ uiDefButF(block, NUM, B_WORLDPRV, "sizeX", 200,40,100,19, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
+ uiDefButF(block, NUM, B_WORLDPRV, "sizeY", 200,20,100,19, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
+ uiDefButF(block, NUM, B_WORLDPRV, "sizeZ", 200, 0,100,19, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
}
@@ -2037,28 +1820,28 @@ static void world_panel_world(World *wrld)
uiSetButLock(wrld->id.lib!=0, "Can't edit library data");
uiBlockSetCol(block, TH_AUTO);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,150,145,19, &wrld->horr, 0, 0, 0, B_COLHOR, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 160,150,145,19, &wrld->zenr, 0, 0, 0, B_COLZEN, "");
+ uiDefButF(block, COL, B_WORLDPRV, "", 10,150,145,19, &wrld->horr, 0, 0, 0, B_COLHOR, "");
+ uiDefButF(block, COL, B_WORLDPRV, "", 160,150,145,19, &wrld->zenr, 0, 0, 0, B_COLZEN, "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"HoR ", 10,130,145,19, &(wrld->horr), 0.0, 1.0, B_COLHOR,0, "Sets the amount of red colour at the horizon");
- uiDefButF(block, NUMSLI,B_MATPRV,"HoG ", 10,110,145,19, &(wrld->horg), 0.0, 1.0, B_COLHOR,0, "Sets the amount of green colour at the horizon");
- uiDefButF(block, NUMSLI,B_MATPRV,"HoB ", 10,90,145,19, &(wrld->horb), 0.0, 1.0, B_COLHOR,0, "Sets the amount of blue colour at the horizon");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"HoR ", 10,130,145,19, &(wrld->horr), 0.0, 1.0, B_COLHOR,0, "Sets the amount of red colour at the horizon");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"HoG ", 10,110,145,19, &(wrld->horg), 0.0, 1.0, B_COLHOR,0, "Sets the amount of green colour at the horizon");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"HoB ", 10,90,145,19, &(wrld->horb), 0.0, 1.0, B_COLHOR,0, "Sets the amount of blue colour at the horizon");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"ZeR ", 160,130,145,19, &(wrld->zenr), 0.0, 1.0, B_COLZEN,0, "Sets the amount of red colour at the zenith");
- uiDefButF(block, NUMSLI,B_MATPRV,"ZeG ", 160,110,145,19, &(wrld->zeng), 0.0, 1.0, B_COLZEN,0, "Sets the amount of green colour at the zenith");
- uiDefButF(block, NUMSLI,B_MATPRV,"ZeB ", 160,90,145,19, &(wrld->zenb), 0.0, 1.0, B_COLZEN,0, "Sets the amount of blue colour at the zenith");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"ZeR ", 160,130,145,19, &(wrld->zenr), 0.0, 1.0, B_COLZEN,0, "Sets the amount of red colour at the zenith");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"ZeG ", 160,110,145,19, &(wrld->zeng), 0.0, 1.0, B_COLZEN,0, "Sets the amount of green colour at the zenith");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"ZeB ", 160,90,145,19, &(wrld->zenb), 0.0, 1.0, B_COLZEN,0, "Sets the amount of blue colour at the zenith");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"AmbR ", 10,50,145,19, &(wrld->ambr), 0.0, 1.0 ,0,0, "Sets the amount of red ambient colour");
- uiDefButF(block, NUMSLI,B_MATPRV,"AmbG ", 10,30,145,19, &(wrld->ambg), 0.0, 1.0 ,0,0, "Sets the amount of green ambient colour");
- uiDefButF(block, NUMSLI,B_MATPRV,"AmbB ", 10,10,145,19, &(wrld->ambb), 0.0, 1.0 ,0,0, "Sets the amount of blue ambient colour");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"AmbR ", 10,50,145,19, &(wrld->ambr), 0.0, 1.0 ,0,0, "Sets the amount of red ambient colour");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"AmbG ", 10,30,145,19, &(wrld->ambg), 0.0, 1.0 ,0,0, "Sets the amount of green ambient colour");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"AmbB ", 10,10,145,19, &(wrld->ambb), 0.0, 1.0 ,0,0, "Sets the amount of blue ambient colour");
uiBlockBeginAlign(block);
uiBlockSetCol(block, TH_BUT_SETTING1);
- uiDefButF(block, NUMSLI,B_MATPRV, "Exp ", 160,30,145,19, &(wrld->exp), 0.0, 1.0, 0, 2, "Sets amount of exponential color correction for light");
- uiDefButF(block, NUMSLI,B_MATPRV, "Range ", 160,10,145,19, &(wrld->range), 0.2, 5.0, 0, 2, "Sets the color amount that will be mapped on color 1.0");
+ uiDefButF(block, NUMSLI,B_WORLDPRV, "Exp ", 160,30,145,19, &(wrld->exp), 0.0, 1.0, 0, 2, "Sets amount of exponential color correction for light");
+ uiDefButF(block, NUMSLI,B_WORLDPRV, "Range ", 160,10,145,19, &(wrld->range), 0.2, 5.0, 0, 2, "Sets the color amount that will be mapped on color 1.0");
}
@@ -2081,9 +1864,9 @@ static void world_panel_preview(World *wrld)
uiDefBut(block, LABEL, 0, " ", 20,20,10,10, 0, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, WO_SKYREAL, B_MATPRV,"Real", 200,175,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with a real horizon");
- uiDefButBitS(block, TOG, WO_SKYBLEND, B_MATPRV,"Blend",200,150,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with natural progression from horizon to zenith");
- uiDefButBitS(block, TOG,WO_SKYPAPER, B_MATPRV,"Paper",200,125,80,25, &wrld->skytype, 0, 0, 0, 0, "Flattens blend or texture coordinates");
+ uiDefButBitS(block, TOG, WO_SKYREAL, B_WORLDPRV,"Real", 200,175,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with a real horizon");
+ uiDefButBitS(block, TOG, WO_SKYBLEND, B_WORLDPRV,"Blend",200,150,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with natural progression from horizon to zenith");
+ uiDefButBitS(block, TOG,WO_SKYPAPER, B_WORLDPRV,"Paper",200,125,80,25, &wrld->skytype, 0, 0, 0, 0, "Flattens blend or texture coordinates");
uiBlockEndAlign(block);
}
@@ -2099,7 +1882,7 @@ void do_lampbuts(unsigned short event)
switch(event) {
case B_LAMPREDRAW:
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSSHADING, 0);
break;
@@ -2113,7 +1896,7 @@ void do_lampbuts(unsigned short event)
BIF_undo_push("Unlink world texture");
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
break;
case B_SBUFF:
@@ -2162,7 +1945,7 @@ void do_lampbuts(unsigned short event)
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
scrarea_queue_winredraw(curarea);
}
break;
@@ -2193,27 +1976,27 @@ static void lamp_panel_mapto(Object *ob, Lamp *la)
/* TEXTURE OUTPUT */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, MTEX_STENCIL, B_MATPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
- uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_MATPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
- uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_MATPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
+ uiDefButBitS(block, TOG, MTEX_STENCIL, B_LAMPPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
+ uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_LAMPPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
+ uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_LAMPPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
- uiDefButF(block, NUMSLI, B_MATPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, COL, B_LAMPPRV, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
uiBlockEndAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value the textures uses to mix with");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value the textures uses to mix with");
/* MAP TO */
- uiDefButBitS(block, TOG, MAP_COL, B_MATPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic colour of the lamp");
+ uiDefButBitS(block, TOG, MAP_COL, B_LAMPPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic colour of the lamp");
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_MATPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
+ uiDefButS(block, MENU, B_LAMPPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
uiBlockEndAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
}
@@ -2282,19 +2065,19 @@ static void lamp_panel_texture(Object *ob, Lamp *la)
/* TEXCO */
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
- uiDefButS(block, ROW, B_MATPRV, "Glob", 100,110,60,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates");
- uiDefButS(block, ROW, B_MATPRV, "View", 160,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view coordinates for the texture coordinates");
- uiDefButS(block, ROW, B_MATPRV, "Object", 230,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
- uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_MATPRV, "", 100,90,200,20, &(mtex->object), "");
+ uiDefButS(block, ROW, B_LAMPPRV, "Glob", 100,110,60,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates");
+ uiDefButS(block, ROW, B_LAMPPRV, "View", 160,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view coordinates for the texture coordinates");
+ uiDefButS(block, ROW, B_LAMPPRV, "Object", 230,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_LAMPPRV, "", 100,90,200,20, &(mtex->object), "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "dX", 100,50,100,18, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dY", 100,30,100,18, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dZ", 100,10,100,18, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
+ uiDefButF(block, NUM, B_LAMPPRV, "dX", 100,50,100,18, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
+ uiDefButF(block, NUM, B_LAMPPRV, "dY", 100,30,100,18, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
+ uiDefButF(block, NUM, B_LAMPPRV, "dZ", 100,10,100,18, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "sizeX", 200,50,100,18, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
- uiDefButF(block, NUM, B_MATPRV, "sizeY", 200,30,100,18, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
- uiDefButF(block, NUM, B_MATPRV, "sizeZ", 200,10,100,18, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
+ uiDefButF(block, NUM, B_LAMPPRV, "sizeX", 200,50,100,18, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
+ uiDefButF(block, NUM, B_LAMPPRV, "sizeY", 200,30,100,18, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
+ uiDefButF(block, NUM, B_LAMPPRV, "sizeZ", 200,10,100,18, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
uiBlockEndAlign(block);
}
@@ -2497,33 +2280,33 @@ static void lamp_panel_lamp(Object *ob, Lamp *la)
}
else if ELEM(la->type, LA_LOCAL, LA_SPOT) {
uiBlockSetCol(block, TH_BUT_SETTING1);
- uiDefButBitS(block, TOG, LA_QUAD, B_MATPRV,"Quad", 10,150,100,19,&la->mode, 0, 0, 0, 0, "Uses inverse quadratic proportion for light attenuation");
+ uiDefButBitS(block, TOG, LA_QUAD, B_LAMPPRV,"Quad", 10,150,100,19,&la->mode, 0, 0, 0, 0, "Uses inverse quadratic proportion for light attenuation");
uiDefButBitS(block, TOG, LA_SPHERE, REDRAWVIEW3D,"Sphere", 10,130,100,19,&la->mode, 0, 0, 0, 0, "Sets light intensity to zero for objects beyond the distance value");
}
uiBlockBeginAlign(block);
uiBlockSetCol(block, TH_BUT_SETTING1);
uiDefButBitS(block, TOG, LA_LAYER, 0,"Layer", 10,70,100,19,&la->mode, 0, 0, 0, 0, "Illuminates objects in the same layer as the lamp only");
- uiDefButBitS(block, TOG, LA_NEG, B_MATPRV,"Negative", 10,50,100,19,&la->mode, 0, 0, 0, 0, "Sets lamp to cast negative light");
+ uiDefButBitS(block, TOG, LA_NEG, B_LAMPPRV,"Negative", 10,50,100,19,&la->mode, 0, 0, 0, 0, "Sets lamp to cast negative light");
uiDefButBitS(block, TOG, LA_NO_DIFF, 0,"No Diffuse", 10,30,100,19,&la->mode, 0, 0, 0, 0, "Disables diffuse shading of material illuminated by this lamp");
uiDefButBitS(block, TOG, LA_NO_SPEC, 0,"No Specular", 10,10,100,19,&la->mode, 0, 0, 0, 0, "Disables specular shading of material illuminated by this lamp");
uiBlockEndAlign(block);
uiBlockSetCol(block, TH_AUTO);
- uiDefButF(block, NUMSLI,B_MATPRV,"Energy ", 120,150,180,20, &(la->energy), 0.0, 10.0, 0, 0, "Sets the intensity of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Energy ", 120,150,180,20, &(la->energy), 0.0, 10.0, 0, 0, "Sets the intensity of the light");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"R ", 120,120,180,20,&la->r, 0.0, 1.0, B_COLLAMP, 0, "Sets the red component of the light");
- uiDefButF(block, NUMSLI,B_MATPRV,"G ", 120,100,180,20,&la->g, 0.0, 1.0, B_COLLAMP, 0, "Sets the green component of the light");
- uiDefButF(block, NUMSLI,B_MATPRV,"B ", 120,80,180,20,&la->b, 0.0, 1.0, B_COLLAMP, 0, "Sets the blue component of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"R ", 120,120,180,20,&la->r, 0.0, 1.0, B_COLLAMP, 0, "Sets the red component of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"G ", 120,100,180,20,&la->g, 0.0, 1.0, B_COLLAMP, 0, "Sets the green component of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"B ", 120,80,180,20,&la->b, 0.0, 1.0, B_COLLAMP, 0, "Sets the blue component of the light");
uiBlockEndAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 120,52,180,24, &la->r, 0, 0, 0, B_COLLAMP, "");
+ uiDefButF(block, COL, B_LAMPPRV, "", 120,52,180,24, &la->r, 0, 0, 0, B_COLLAMP, "");
uiBlockBeginAlign(block);
if ELEM(la->type, LA_LOCAL, LA_SPOT) {
- uiDefButF(block, NUMSLI,B_MATPRV,"Quad1 ", 120,30,180,19,&la->att1, 0.0, 1.0, 0, 0, "Set the linear distance attenuatation for a quad lamp");
- uiDefButF(block, NUMSLI,B_MATPRV,"Quad2 ", 120,10,180,19,&la->att2, 0.0, 1.0, 0, 0, "Set the quadratic distance attenuatation for a quad lamp");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Quad1 ", 120,30,180,19,&la->att1, 0.0, 1.0, 0, 0, "Set the linear distance attenuatation for a quad lamp");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Quad2 ", 120,10,180,19,&la->att2, 0.0, 1.0, 0, 0, "Set the quadratic distance attenuatation for a quad lamp");
}
else if(la->type==LA_AREA) {
if(la->k==0.0) la->k= 1.0;
@@ -2626,7 +2409,7 @@ void do_matbuts(unsigned short event)
break;
}
}
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
@@ -2636,7 +2419,7 @@ void do_matbuts(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
break;
case B_MATFROM:
scrarea_queue_headredraw(curarea);
@@ -2645,15 +2428,21 @@ void do_matbuts(unsigned short event)
// BIF_previewdraw(); push/pop!
break;
case B_MATPRV:
- /* this event also used by lamp, tex and sky */
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
- case B_MATPRV_DRAW:
- BIF_preview_changed(G.buts);
+ case B_TEXPRV:
+ BIF_preview_changed(ID_TE);
+ allqueue(REDRAWBUTSSHADING, 0);
+ break;
+ case B_LAMPPRV:
+ BIF_preview_changed(ID_LA);
+ allqueue(REDRAWBUTSSHADING, 0);
+ break;
+ case B_WORLDPRV:
+ BIF_preview_changed(ID_WO);
allqueue(REDRAWBUTSSHADING, 0);
- shade_buttons_change_3d();
break;
case B_MATHALO:
/* when halo is disabled, clear star flag, this is the same as MA_FACETEXTURE <blush> */
@@ -2661,7 +2450,7 @@ void do_matbuts(unsigned short event)
if((ma->mode & MA_HALO)==0) {
ma->mode &= ~(MA_STAR|MA_HALO_XALPHA|MA_ZINV);
}
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
@@ -2674,7 +2463,7 @@ void do_matbuts(unsigned short event)
BIF_undo_push("Unlink material texture");
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case B_MTEXCOPY:
@@ -2700,7 +2489,7 @@ void do_matbuts(unsigned short event)
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
scrarea_queue_winredraw(curarea);
}
break;
@@ -2714,25 +2503,25 @@ void do_matbuts(unsigned short event)
if(ma) {
ma->mode &= ~MA_RAYTRANSP;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case B_MATRAYTRANSP:
if(ma) {
ma->mode &= ~MA_ZTRA;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case B_MATCOLORBAND:
if(ma) {
if(ma->mode & MA_RAMP_COL)
- if(ma->ramp_col==NULL) ma->ramp_col= add_colorband();
+ if(ma->ramp_col==NULL) ma->ramp_col= add_colorband(0);
if(ma->mode & MA_RAMP_SPEC)
- if(ma->ramp_spec==NULL) ma->ramp_spec= add_colorband();
+ if(ma->ramp_spec==NULL) ma->ramp_spec= add_colorband(0);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_MA);
shade_buttons_change_3d();
}
break;
@@ -2756,13 +2545,29 @@ void do_matbuts(unsigned short event)
ml->mat->id.us++;
}
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_MA);
break;
}
}
}
break;
+ case B_MAT_USENODES:
+ ma= G.buts->lockpoin; /* use base material instead */
+ if(ma) {
+ if(ma->use_nodes && ma->nodetree==NULL) {
+ node_shader_default(ma);
+ }
+ BIF_preview_changed(ID_MA);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ }
+ break;
+ case B_NODE_EXEC:
+ BIF_preview_changed(ID_MA);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ break;
}
}
@@ -2791,7 +2596,7 @@ static void material_panel_map_to(Material *ma)
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
if(ma->colormodel==MA_HSV) {
uiBlockSetCol(block, TH_BUT_SETTING1);
@@ -2877,7 +2682,7 @@ static void material_panel_map_input(Object *ob, Material *ma)
uiDefButS(block, ROW, B_MATPRV, "Refl", 864,160,44,18, &(mtex->texco), 4.0, (float)TEXCO_REFL, 0, 0, "Uses reflection vector as texture coordinates");
uiDefButS(block, ROW, B_MATPRV, "Stress", 630,140,70,18, &(mtex->texco), 4.0, (float)TEXCO_STRESS, 0, 0, "Uses the difference of edge lengths compared to original coordinates of the mesh");
- uiDefButS(block, ROW, B_MATPRV, "Tangent", 700,140,70,18, &(mtex->texco), 4.0, (float)TEXCO_TANGENT, 0, 0, "Uses te optional tangent vector as texture coordinates");
+ uiDefButS(block, ROW, B_MATPRV, "Tangent", 700,140,70,18, &(mtex->texco), 4.0, (float)TEXCO_TANGENT, 0, 0, "Uses the optional tangent vector as texture coordinates");
/* COORDS */
uiBlockBeginAlign(block);
@@ -2933,7 +2738,7 @@ static void material_panel_texture(Material *ma)
if(mtex && mtex->tex) splitIDname(mtex->tex->id.name+2, str, &loos);
else strcpy(str, "");
str[10]= 0;
- uiDefButC(block, ROW, B_MATPRV_DRAW, str, 10, 180-18*a, 70, 20, &(ma->texact), 3.0, (float)a, 0, 0, "");
+ uiDefButC(block, ROW, B_MATPRV, str, 10, 180-18*a, 70, 20, &(ma->texact), 3.0, (float)a, 0, 0, "");
}
uiBlockEndAlign(block);
@@ -2944,8 +2749,8 @@ static void material_panel_texture(Material *ma)
mtex= ma->mtex[a];
if(mtex && mtex->tex) {
if(ma->septex & (1<<a))
- uiDefButBitS(block, TOG, 1<<a, B_MATPRV_DRAW, " ", -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
- else uiDefIconButBitS(block, TOG, 1<<a, B_MATPRV_DRAW, ICON_CHECKBOX_HLT, -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
+ uiDefButBitS(block, TOG, 1<<a, B_MATPRV, " ", -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
+ else uiDefIconButBitS(block, TOG, 1<<a, B_MATPRV, ICON_CHECKBOX_HLT, -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
}
}
@@ -3077,7 +2882,7 @@ static void material_panel_tramir_yafray(Material *ma)
/* absorption color */
uiDefBut(block, LABEL, 0, "Absorption Color", 10, 98, 150, 18, 0, 0.0, 0.0, 0, 0, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10, 38, 30, 58, &ma->YF_ar, 0, 0, 0, B_MATCOL, "transmit absorption color, white is no absorption");
+ uiDefButF(block, COL, B_MATPRV, "", 10, 38, 30, 58, &ma->YF_ar, 0, 0, 0, B_MATCOL, "transmit absorption color, white is no absorption");
uiDefButF(block, NUMSLI, B_MATPRV, "aR ", 40, 78, 120, 18, &ma->YF_ar, 1e-7f, 1.0, B_MATCOL, 0, "");
uiDefButF(block, NUMSLI, B_MATPRV, "aG ", 40, 58, 120, 18, &ma->YF_ag, 1e-7f, 1.0, B_MATCOL, 0, "");
uiDefButF(block, NUMSLI, B_MATPRV, "aB ", 40, 38, 120, 18, &ma->YF_ab, 1e-7f, 1.0, B_MATCOL, 0, "");
@@ -3123,7 +2928,7 @@ static void material_panel_shading(Material *ma)
uiBlockSetCol(block, TH_BUT_SETTING1);
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, MA_HALO_FLARE, B_MATPRV_DRAW, "Flare",245,142,65,28, &(ma->mode), 0, 0, 0, 0, "Renders halo as a lensflare");
+ uiDefButBitI(block, TOG, MA_HALO_FLARE, B_MATPRV, "Flare",245,142,65,28, &(ma->mode), 0, 0, 0, 0, "Renders halo as a lensflare");
uiDefButBitI(block, TOG, MA_HALO_RINGS, B_MATPRV, "Rings", 245,123,65, 18, &(ma->mode), 0, 0, 0, 0, "Renders rings over halo");
uiDefButBitI(block, TOG, MA_HALO_LINES, B_MATPRV, "Lines", 245,104,65, 18, &(ma->mode), 0, 0, 0, 0, "Renders star shaped lines over halo");
uiDefButBitI(block, TOG, MA_STAR, B_MATPRV, "Star", 245,85,65, 18, &(ma->mode), 0, 0, 0, 0, "Renders halo as a star");
@@ -3138,7 +2943,7 @@ static void material_panel_shading(Material *ma)
char *str2= "Specular Shader%t|CookTorr %x0|Phong %x1|Blinn %x2|Toon %x3|WardIso %x4";
/* diff shader buttons */
- uiDefButS(block, MENU, B_MATPRV_DRAW, str1, 9, 180,78,19, &(ma->diff_shader), 0.0, 0.0, 0, 0, "Creates a diffuse shader");
+ uiDefButS(block, MENU, B_MATPRV, str1, 9, 180,78,19, &(ma->diff_shader), 0.0, 0.0, 0, 0, "Creates a diffuse shader");
uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI, B_MATPRV, "Ref ", 90,180,150,19, &(ma->ref), 0.0, 1.0, 0, 0, "Sets the amount of reflection");
@@ -3157,7 +2962,7 @@ static void material_panel_shading(Material *ma)
uiBlockEndAlign(block);
/* spec shader buttons */
- uiDefButS(block, MENU, B_MATPRV_DRAW, str2, 9,120,77,19, &(ma->spec_shader), 0.0, 0.0, 0, 0, "Creates a specular shader");
+ uiDefButS(block, MENU, B_MATPRV, str2, 9,120,77,19, &(ma->spec_shader), 0.0, 0.0, 0, 0, "Creates a specular shader");
uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI, B_MATPRV, "Spec ", 90,120,150,19, &(ma->spec), 0.0, 2.0, 0, 0, "Sets the degree of specularity");
@@ -3302,13 +3107,13 @@ static void material_panel_layers(Material *ma)
if(ml->flag & ML_ACTIVE) break;
if(ml==NULL)
- but=uiDefIconBut(block, BUT, B_MATPRV_DRAW, ICON_MATERIAL, 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
- else but=uiDefBut(block, BUT, B_MATPRV_DRAW, " ", 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
+ but=uiDefIconBut(block, BUT, B_MATPRV, ICON_MATERIAL, 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
+ else but=uiDefBut(block, BUT, B_MATPRV, " ", 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
uiButSetFunc(but, matlayer_active, ma, NULL);
/* Enable/disable for current material */
if(ma->ml_flag & ML_RENDER)
- uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV_DRAW, ICON_CHECKBOX_HLT, 30, 180, 20, 20, &ma->ml_flag, 0.0, 0.0, 0, 0, "Enable or disable base Material");
+ uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV, ICON_CHECKBOX_HLT, 30, 180, 20, 20, &ma->ml_flag, 0.0, 0.0, 0, 0, "Enable or disable base Material");
else uiDefButBitS(block, TOG, ML_RENDER, B_MATPRV, " ", 30, 180, 20, 20, &ma->ml_flag, 0.0, 0.0, 0, 0, "Enable or disable base Material");
uiBlockEndAlign(block);
@@ -3328,13 +3133,13 @@ static void material_panel_layers(Material *ma)
/* Active button */
uiBlockBeginAlign(block);
if(ml->flag & ML_ACTIVE)
- but=uiDefIconBut(block, BUT, B_MATPRV_DRAW, ICON_MATERIAL, 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
- else but=uiDefBut(block, BUT, B_MATPRV_DRAW, " ", 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
+ but=uiDefIconBut(block, BUT, B_MATPRV, ICON_MATERIAL, 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
+ else but=uiDefBut(block, BUT, B_MATPRV, " ", 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
uiButSetFunc(but, matlayer_active, ma, ml);
/* enable/disable button */
if(ml->flag & ML_RENDER)
- uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV_DRAW, ICON_CHECKBOX_HLT, 30, yco, 20, 20, &ml->flag, 0.0, 0.0, 0, 0, "Enable or disable this layer");
+ uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV, ICON_CHECKBOX_HLT, 30, yco, 20, 20, &ml->flag, 0.0, 0.0, 0, 0, "Enable or disable this layer");
else uiDefButBitS(block, TOG, ML_RENDER, B_MATPRV, " ", 30, yco, 20, 20, &ml->flag, 0.0, 0.0, 0, 0, "Enable or disable this layer");
uiBlockBeginAlign(block);
@@ -3369,13 +3174,13 @@ static void material_panel_layers(Material *ma)
uiButSetFunc(but, matlayer_add, ma, ml);
/* move up/down/delete */
- but = uiDefIconBut(block, BUT, B_MATPRV_DRAW, VICON_MOVE_UP, 250, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer up");
+ but = uiDefIconBut(block, BUT, B_MATPRV, VICON_MOVE_UP, 250, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer up");
uiButSetFunc(but, matlayer_moveUp, ma, ml);
- but = uiDefIconBut(block, BUT, B_MATPRV_DRAW, VICON_MOVE_DOWN, 270, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer down");
+ but = uiDefIconBut(block, BUT, B_MATPRV, VICON_MOVE_DOWN, 270, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer down");
uiButSetFunc(but, matlayer_moveDown, ma, ml);
- but = uiDefIconBut(block, BUT, B_MATPRV_DRAW, VICON_X, 290, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete material layer");
+ but = uiDefIconBut(block, BUT, B_MATPRV, VICON_X, 290, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete material layer");
uiButSetFunc(but, matlayer_del, ma, ml);
/* blend slider and operation */
@@ -3401,6 +3206,36 @@ static void material_panel_layers(Material *ma)
}
+static void material_panel_nodes(Material *ma)
+{
+ Material *nodema;
+ bNode *node;
+ uiBlock *block;
+ char str[64];
+
+ block= uiNewBlock(&curarea->uiblocks, "material_panel_nodes", UI_EMBOSS, UI_HELV, curarea->win);
+ uiNewPanelTabbed("Preview", "Material");
+ if(uiNewPanel(curarea, block, "Nodes", "Material", 0, 0, 318, 204)==0) return;
+
+ uiDefButC(block, TOG, B_MAT_USENODES, "Use Nodes", 10,180,150,20, &ma->use_nodes, 0.0f, 0.0f, 0, 0, "");
+ nodema= get_active_matlayer(ma);
+ if(nodema) {
+ sprintf(str, "Active: %s", nodema->id.name+2);
+ uiDefBut(block, LABEL, B_NOP, str, 160,180,150,20, NULL, 0.0f, 0.0f, 0, 0, "");
+ }
+ node= nodeGetActive(ma->nodetree);
+ if(node==NULL) return;
+
+ if(node->typeinfo->butfunc) {
+ rctf rct;
+ rct.xmin= 10.0f;
+ rct.xmax= rct.xmin+node->typeinfo->width;
+ rct.ymax= 155.0;
+ rct.ymin= rct.ymax - (float)node->typeinfo->butfunc(NULL, node, NULL);
+ node->typeinfo->butfunc(block, node, &rct);
+ }
+}
+
static void material_panel_ramps(Material *ma)
{
@@ -3436,7 +3271,7 @@ static void material_panel_ramps(Material *ma)
methodc= &ma->rampblend_spec;
facp= &ma->rampfac_spec;
}
- draw_colorband_buts(block, coba, -35, B_MATPRV); // aligns with previous button
+ draw_colorband_buts(block, coba, 10, 50, B_MATPRV); // aligns with previous button
uiDefBut(block, LABEL, 0, "Input",10,30,90,20, NULL, 0, 0, 0, 0, "");
uiDefBut(block, LABEL, 0, "Method",100,30,90,20, NULL, 0, 0, 0, 0, "");
@@ -3554,9 +3389,9 @@ static void material_panel_material(Object *ob, Material *ma)
}
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 8,97,72,20, &(ma->r), 0, 0, 0, B_MATCOL, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 8,77,72,20, &(ma->specr), 0, 0, 0, B_SPECCOL, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 8,57,72,20, &(ma->mirr), 0, 0, 0, B_MIRCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 8,97,72,20, &(ma->r), 0, 0, 0, B_MATCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 8,77,72,20, &(ma->specr), 0, 0, 0, B_SPECCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 8,57,72,20, &(ma->mirr), 0, 0, 0, B_MIRCOL, "");
uiBlockBeginAlign(block);
if(ma->mode & MA_HALO) {
@@ -3609,6 +3444,8 @@ static void material_panel_preview(Material *ma)
if(uiNewPanel(curarea, block, "Preview", "Material", 0, 0, 318, 204)==0) return;
if(ma) {
+ G.buts->lockpoin= ma; /* BIF_previewdraw callback will read it */
+
uiBlockSetDrawExtraFunc(block, BIF_previewdraw);
// label to force a boundbox for buttons not to be centered
@@ -3646,6 +3483,7 @@ void material_panels()
if(ma) {
material_panel_layers(ma);
+ material_panel_nodes(ma);
ma= get_active_matlayer(ma);
if(ma) {
@@ -3827,7 +3665,7 @@ void clever_numbuts_buts()
la->r = (rgb[0]/255.0 >= 0.0 && rgb[0]/255.0 <= 1.0 ? rgb[0]/255.0 : 0.0) ;
la->g = (rgb[1]/255.0 >= 0.0 && rgb[1]/255.0 <= 1.0 ? rgb[1]/255.0 : 0.0) ;
la->b = (rgb[2]/255.0 >= 0.0 && rgb[2]/255.0 <= 1.0 ? rgb[2]/255.0 : 0.0) ;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case TAB_SHADING_WORLD:
@@ -3847,7 +3685,7 @@ void clever_numbuts_buts()
wo->zenr = (rgb[0]/255.0 >= 0.0 && rgb[0]/255.0 <= 1.0 ? rgb[0]/255.0 : 0.0) ;
wo->zeng = (rgb[1]/255.0 >= 0.0 && rgb[1]/255.0 <= 1.0 ? rgb[1]/255.0 : 0.0) ;
wo->zenb = (rgb[2]/255.0 >= 0.0 && rgb[2]/255.0 <= 1.0 ? rgb[2]/255.0 : 0.0) ;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
break;
@@ -3880,7 +3718,7 @@ void clever_numbuts_buts()
ma->mirg = (rgb[1]/255.0 >= 0.0 && rgb[1]/255.0 <= 1.0 ? rgb[1]/255.0 : 0.0) ;
ma->mirb = (rgb[2]/255.0 >= 0.0 && rgb[2]/255.0 <= 1.0 ? rgb[2]/255.0 : 0.0) ;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
}
diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c
index 8364424674b..d9a85da601e 100644
--- a/source/blender/src/drawimage.c
+++ b/source/blender/src/drawimage.c
@@ -1034,7 +1034,7 @@ void drawimagespace(ScrArea *sa, void *spacedata)
glPixelZoom((float)sima->zoom, (float)sima->zoom);
if(sima->flag & SI_EDITTILE) {
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->rect);
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
glPixelZoom(1.0, 1.0);
@@ -1079,14 +1079,14 @@ void drawimagespace(ScrArea *sa, void *spacedata)
/* rect= ibuf->rect; */
for(sy= 0; sy+dy<=ibuf->y; sy+= dy) {
for(sx= 0; sx+dx<=ibuf->x; sx+= dx) {
- glaDrawPixelsSafe(x1+sx*sima->zoom, y1+sy*sima->zoom, dx, dy, rect);
+ glaDrawPixelsSafe(x1+sx*sima->zoom, y1+sy*sima->zoom, dx, dy, GL_UNSIGNED_BYTE, rect);
}
}
MEM_freeN(rect);
}
else
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->rect);
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
if(Gip.current == IMAGEPAINT_CLONE) {
int w, h;
@@ -1103,7 +1103,7 @@ void drawimagespace(ScrArea *sa, void *spacedata)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glaDrawPixelsSafe(x1 + offx, y1 + offy, w, h, clonerect);
+ glaDrawPixelsSafe(x1 + offx, y1 + offy, w, h, GL_UNSIGNED_BYTE, clonerect);
glDisable(GL_BLEND);
MEM_freeN(clonerect);
diff --git a/source/blender/src/drawnode.c b/source/blender/src/drawnode.c
index 1c933ed6743..1ca7c1f82c8 100644
--- a/source/blender/src/drawnode.c
+++ b/source/blender/src/drawnode.c
@@ -42,6 +42,7 @@
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
+#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
#include "BKE_global.h"
@@ -51,7 +52,9 @@
#include "BKE_utildefines.h"
#include "BIF_gl.h"
+#include "BIF_glutil.h"
#include "BIF_interface.h"
+#include "BIF_interface_icons.h"
#include "BIF_language.h"
#include "BIF_mywindow.h"
#include "BIF_resources.h"
@@ -64,147 +67,324 @@
#include "BMF_Api.h"
#include "blendef.h"
+#include "butspace.h"
#include "interface.h" /* urm... for rasterpos_safe, roundbox */
+#include "mydevice.h"
#include "MEM_guardedalloc.h"
-/* ************** Draw callbacks *********** */
+static void snode_drawstring(SpaceNode *snode, char *str, int okwidth)
+{
+ char drawstr[NODE_MAXSTR];
+ int width;
+
+ if(str[0]==0) return;
+
+ BLI_strncpy(drawstr, str, NODE_MAXSTR);
+ width= snode->aspect*BIF_GetStringWidth(snode->curfont, drawstr, 0);
+ if(width > okwidth) {
+ int len= strlen(drawstr)-1;
+
+ while(width > okwidth && len>=0) {
+ drawstr[len]= 0;
+
+ width= snode->aspect*BIF_GetStringWidth(snode->curfont, drawstr, 0);
+ len--;
+ }
+ if(len==0) return;
+ }
+ BIF_DrawString(snode->curfont, drawstr, 0);
+
+}
+
+/* ************** Socket callbacks *********** */
+
+/* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */
+static uiBlock *socket_value_menu(void *sock_v)
+{
+ bNodeSocket *sock= sock_v;
+ uiBlock *block;
+ char name[NODE_MAXSTR];
+
+ /* don't add new block to a listbase if caller is LABEL button */
+ block= uiNewBlock(NULL, "socket menu", UI_EMBOSS, UI_HELV, curarea->win);
+
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -4, -4, 188, 28, NULL, 0, 0, 0, 0, "");
+
+ BLI_strncpy(name, sock->name, NODE_MAXSTR-1);
+ strcat(name, " ");
+ uiDefButF(block, NUMSLI, 0, name, 0,0,180,20, sock->ns.vec, 0.0, 1.0, 10, 0, "");
+
+ uiBlockSetDirection(block, UI_TOP);
+
+ return block;
+}
+/* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */
+static uiBlock *socket_vector_menu(void *sock_v)
+{
+ bNodeSocket *sock= sock_v;
+ uiBlock *block;
+
+ /* don't add new block to a listbase if caller is LABEL button */
+ block= uiNewBlock(NULL, "socket menu", UI_EMBOSS, UI_HELV, curarea->win);
+
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUMSLI, 0, "X ", 0,40,180,20, sock->ns.vec, -1.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "Y ", 0,20,180,20, sock->ns.vec+1, -1.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "Z ", 0,0,180,20, sock->ns.vec+2, -1.0, 1.0, 10, 0, "");
+
+ uiBlockSetDirection(block, UI_TOP);
+
+ return block;
+}
-static void node_shader_draw_value(SpaceNode *snode, bNode *node)
+static uiBlock *socket_color_menu(void *sock_v)
{
+ bNodeSocket *sock= sock_v;
+ uiBlock *block;
+
+ /* don't add new block to a listbase if caller is LABEL button */
+ block= uiNewBlock(NULL, "socket menu", UI_EMBOSS, UI_HELV, curarea->win);
+
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUMSLI, 0, "R ", 0,40,180,20, sock->ns.vec, 0.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "G ", 0,20,180,20, sock->ns.vec+1, 0.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "B ", 0,0,180,20, sock->ns.vec+2, 0.0, 1.0, 10, 0, "");
+
+ uiBlockSetDirection(block, UI_TOP);
- if(snode->block) {
+ return block;
+}
+
+static void node_ID_title_cb(void *node_v, void *unused_v)
+{
+ bNode *node= node_v;
+
+ if(node->id)
+ BLI_strncpy(node->name, node->id->name+2, 21);
+}
+
+/* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */
+
+static int node_shader_buts_material(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block) {
uiBut *bt;
+ float dx= (butr->xmax-butr->xmin)/3.0f;
- bt= uiDefButF(snode->block, NUM, B_NODE_EXEC, "",
- node->prv.xmin, node->prv.ymin, node->prv.xmax-node->prv.xmin, node->prv.ymax-node->prv.ymin,
- node->ns.vec, 0.0f, 1.0f, 100, 2, "");
+ uiBlockBeginAlign(block);
+ bt= uiDefIDPoinBut(block, test_matpoin_but, ID_MA, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin+19.0f, butr->xmax-butr->xmin, 19.0f,
+ &node->id, "");
+ uiButSetFunc(bt, node_ID_title_cb, node, NULL);
- }
+ uiDefButBitS(block, TOG, SH_NODE_MAT_DIFF, B_NODE_EXEC, "Diff",
+ butr->xmin, butr->ymin, dx, 19.0f,
+ &node->custom1, 0, 0, 0, 0, "Material Node outputs Diffuse");
+ uiDefButBitS(block, TOG, SH_NODE_MAT_SPEC, B_NODE_EXEC, "Spec",
+ butr->xmin+dx, butr->ymin, dx, 19.0f,
+ &node->custom1, 0, 0, 0, 0, "Material Node outputs Specular");
+ uiDefButBitS(block, TOG, SH_NODE_MAT_NEG, B_NODE_EXEC, "Neg Normal",
+ butr->xmin+2.0f*dx, butr->ymin, dx, 19.0f,
+ &node->custom1, 0, 0, 0, 0, "Material Node uses inverted Normal");
+ uiBlockEndAlign(block);
+
+ }
+ return 38;
}
-static void node_shader_draw_rgb(SpaceNode *snode, bNode *node)
+static int node_shader_buts_texture(uiBlock *block, bNode *node, rctf *butr)
{
-
- if(snode->block) {
+ if(block) {
+ uiBut *bt;
- /* enforce square box drawing */
- uiBlockSetEmboss(snode->block, UI_EMBOSSP);
+ bt= uiDefIDPoinBut(block, test_texpoin_but, ID_TE, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 19.0f,
+ &node->id, "");
+ uiButSetFunc(bt, node_ID_title_cb, node, NULL);
- uiDefButF(snode->block, HSVCUBE, B_NODE_EXEC, "",
- node->prv.xmin, node->prv.ymin, node->prv.xmax-node->prv.xmin, 10.0f,
- node->ns.vec, 0.0f, 1.0f, 3, 0, "");
- uiDefButF(snode->block, HSVCUBE, B_NODE_EXEC, "",
- node->prv.xmin, node->prv.ymin+14.0f, node->prv.xmax-node->prv.xmin, node->prv.ymax-node->prv.ymin-14.0f,
- node->ns.vec, 0.0f, 1.0f, 2, 0, "");
+ }
+ return 19;
+}
+
+static int node_shader_buts_value(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block) {
+ bNodeSocket *sock= node->outputs.first; /* first socket stores value */
- uiDefButF(snode->block, COL, B_NOP, "",
- node->prv.xmin, node->prv.ymax+10.0f, node->prv.xmax-node->prv.xmin, 15.0f,
- node->ns.vec, 0.0, 0.0, -1, 0, "");
- /* the -1 above prevents col button to popup a color picker */
+ uiDefButF(block, NUM, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20.0f,
+ sock->ns.vec, 0.0f, 1.0f, 10, 2, "");
- uiBlockSetEmboss(snode->block, UI_EMBOSS);
}
+ return 20;
}
-static void node_shader_draw_show_rgb(SpaceNode *snode, bNode *node)
+static int node_shader_buts_rgb(uiBlock *block, bNode *node, rctf *butr)
{
-
- if(snode->block) {
-
+ if(block) {
+ bNodeSocket *sock= node->outputs.first; /* first socket stores value */
+
/* enforce square box drawing */
- uiBlockSetEmboss(snode->block, UI_EMBOSSP);
+ uiBlockSetEmboss(block, UI_EMBOSSP);
+
+ uiDefButF(block, HSVCUBE, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 12.0f,
+ sock->ns.vec, 0.0f, 1.0f, 3, 0, "");
+ uiDefButF(block, HSVCUBE, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin+15.0f, butr->xmax-butr->xmin, butr->ymax-butr->ymin -15.0f -15.0f,
+ sock->ns.vec, 0.0f, 1.0f, 2, 0, "");
+ uiDefButF(block, COL, B_NOP, "",
+ butr->xmin, butr->ymax-12.0f, butr->xmax-butr->xmin, 12.0f,
+ sock->ns.vec, 0.0, 0.0, -1, 0, "");
+ /* the -1 above prevents col button to popup a color picker */
+
+ uiBlockSetEmboss(block, UI_EMBOSS);
+ }
+ return 30 + (int)(node->width-NODE_DY);
+}
+
+static void node_but_title_cb(void *node_v, void *but_v)
+{
+ bNode *node= node_v;
+ uiBut *bt= but_v;
+ BLI_strncpy(node->name, bt->drawstr, NODE_MAXSTR);
+}
+
+static int node_shader_buts_mix_rgb(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block) {
+ uiBut *bt;
+ bNodeSocket *sock= node->inputs.first; /* first socket stores "fac" */
- uiDefButF(snode->block, COL, B_NOP, "",
- node->prv.xmin, node->prv.ymin-NODE_DY, node->prv.xmax-node->prv.xmin, NODE_DY,
- node->ns.vec, 0.0f, 0.0f, -1, 0, "");
- /* the -1 above prevents col button to popup a color picker */
- uiBlockSetEmboss(snode->block, UI_EMBOSS);
+ uiBlockBeginAlign(block);
+ /* blend type */
+ bt=uiDefButS(block, MENU, B_NODE_EXEC, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Divide %x5|Difference %x6|Darken %x7|Lighten %x8",
+ butr->xmin, butr->ymin+20.0f, butr->xmax-butr->xmin, 20.0f,
+ &node->custom1, 0, 0, 0, 0, "");
+ uiButSetFunc(bt, node_but_title_cb, node, bt);
+ /* value */
+ uiDefButF(block, NUM, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20.0f,
+ sock->ns.vec, 0.0f, 1.0f, 10, 2, "");
+ uiBlockEndAlign(block);
}
+ return 40;
}
+static int node_shader_buts_valtorgb(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block && (node->flag & NODE_OPTIONS)) {
+ if(node->storage) {
+ draw_colorband_buts_small(block, node->storage, butr, B_NODE_EXEC);
+ }
+ }
+ return 40;
+}
-/* exported to editnode.c */
-void node_shader_set_drawfunc(bNode *node)
+/* only once called */
+static void node_shader_set_butfunc(bNodeType *ntype)
{
- switch(node->type) {
- case SH_NODE_TEST:
- node->drawfunc= NULL;
+ switch(ntype->type) {
+ case SH_NODE_MATERIAL:
+ ntype->butfunc= node_shader_buts_material;
+ break;
+ case SH_NODE_TEXTURE:
+ ntype->butfunc= node_shader_buts_texture;
break;
case SH_NODE_VALUE:
- node->drawfunc= node_shader_draw_value;
+ ntype->butfunc= node_shader_buts_value;
break;
case SH_NODE_RGB:
- node->drawfunc= node_shader_draw_rgb;
- break;
- case SH_NODE_SHOW_RGB:
- node->drawfunc= node_shader_draw_show_rgb;
+ ntype->butfunc= node_shader_buts_rgb;
break;
case SH_NODE_MIX_RGB:
- node->drawfunc= NULL;
+ ntype->butfunc= node_shader_buts_mix_rgb;
+ break;
+ case SH_NODE_VALTORGB:
+ ntype->butfunc= node_shader_buts_valtorgb;
break;
+ default:
+ ntype->butfunc= NULL;
}
}
-/* ******* init draw callbacks for all tree types ************* */
+/* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */
-static void ntree_init_callbacks(bNodeTree *ntree)
+void init_node_butfuncs(void)
{
- bNode *node;
+ bNodeType **typedefs;
- for(node= ntree->nodes.first; node; node= node->next) {
- if(ntree->type==NTREE_SHADER)
- node_shader_set_drawfunc(node);
+ /* shader nodes */
+ typedefs= node_all_shaders; /* BKE_node.h */
+ while( *typedefs) {
+ node_shader_set_butfunc(*typedefs);
+ typedefs++;
}
- ntree->init |= NTREE_DRAW_SET;
-}
+}
/* ************** Generic drawing ************** */
static void draw_nodespace_grid(SpaceNode *snode)
{
-// float fac, step= 20.0f;
-
+ float start, step= 25.0f;
+
/* window is 'pixel size', like buttons */
- BIF_ThemeColorShade(TH_BACK, 10);
+ BIF_ThemeColorShade(TH_BACK, -10);
- glRectf(0.0f, 0.0f, curarea->winx, curarea->winy);
-}
-
+ start= snode->v2d.cur.xmin -fmod(snode->v2d.cur.xmin, step);
+
+ glBegin(GL_LINES);
+ for(; start<snode->v2d.cur.xmax; start+=step) {
+ glVertex2f(start, snode->v2d.cur.ymin);
+ glVertex2f(start, snode->v2d.cur.ymax);
+ }
-/* get from assigned ID */
-static void get_nodetree(SpaceNode *snode)
-{
- /* note: once proper coded, remove free from freespacelist() */
- if(snode->nodetree==NULL) {
- snode->nodetree= MEM_callocN(sizeof(bNodeTree), "new node tree");
- }
+ start= snode->v2d.cur.ymin -fmod(snode->v2d.cur.ymin, step);
+ for(; start<snode->v2d.cur.ymax; start+=step) {
+ glVertex2f(snode->v2d.cur.xmin, start);
+ glVertex2f(snode->v2d.cur.xmax, start);
+ }
+ glEnd();
}
-static void nodeshadow(rctf *rct, int select)
+
+static void nodeshadow(rctf *rct, float radius, int select)
{
- int a;
+ float rad;
+ float a;
char alpha= 2;
- uiSetRoundBox(15);
glEnable(GL_BLEND);
- if(select) a= 10; else a=7;
- for(; a>0; a-=1) {
+ if(radius > (rct->ymax-rct->ymin-10.0f)/2.0f)
+ rad= (rct->ymax-rct->ymin-10.0f)/2.0f;
+ else
+ rad= radius;
+
+ if(select) a= 10.0f; else a= 7.0f;
+ for(; a>0.0f; a-=1.0f) {
/* alpha ranges from 2 to 20 or so */
glColor4ub(0, 0, 0, alpha);
alpha+= 2;
- gl_round_box(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax-10.0f + a, 8.0f+a);
+ gl_round_box(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax-10.0f + a, rad+a);
}
/* outline emphasis */
glEnable( GL_LINE_SMOOTH );
glColor4ub(0, 0, 0, 100);
- gl_round_box(GL_LINE_LOOP, rct->xmin-0.5f, rct->ymin-0.5f, rct->xmax+0.5f, rct->ymax+0.5f, 8.0f);
+ gl_round_box(GL_LINE_LOOP, rct->xmin-0.5f, rct->ymin-0.5f, rct->xmax+0.5f, rct->ymax+0.5f, radius);
glDisable( GL_LINE_SMOOTH );
glDisable(GL_BLEND);
@@ -230,7 +410,9 @@ static void socket_circle_draw(float x, float y, float size, int type, int selec
int a;
if(select==0) {
- if(type==SOCK_VALUE)
+ if(type==-1)
+ glColor3ub(0, 0, 0);
+ else if(type==SOCK_VALUE)
glColor3ub(160, 160, 160);
else if(type==SOCK_VECTOR)
glColor3ub(100, 100, 200);
@@ -266,54 +448,288 @@ static void socket_circle_draw(float x, float y, float size, int type, int selec
glDisable(GL_BLEND);
}
-static int node_basis_draw(SpaceNode *snode, bNode *node)
+/* not a callback */
+static void node_draw_preview(bNodePreview *preview, rctf *prv)
+{
+ float scale= (prv->xmax-prv->xmin)/((float)preview->xsize);
+
+ glPixelZoom(scale, scale);
+ glEnable(GL_BLEND);
+
+ glaDrawPixelsTex(prv->xmin, prv->ymin, preview->xsize, preview->ysize, GL_FLOAT, preview->rect);
+
+ glDisable(GL_BLEND);
+ glPixelZoom(1.0f, 1.0f);
+
+}
+
+/* based on settings in node, sets drawing rect info */
+static void node_update(bNode *node)
+{
+ bNodeSocket *nsock;
+ float dy= node->locy;
+
+ if(node->flag & NODE_HIDDEN) {
+ float rad, drad;
+
+ node->totr.xmin= node->locx;
+ node->totr.xmax= node->locx + 3*HIDDEN_RAD;
+ node->totr.ymax= node->locy;
+ node->totr.ymin= node->locy - 2*HIDDEN_RAD;
+
+ /* output connectors */
+ rad=drad= M_PI/(1.0f + (float)BLI_countlist(&node->outputs));
+
+ for(nsock= node->outputs.first; nsock; nsock= nsock->next, rad+= drad) {
+ nsock->locx= node->totr.xmax - HIDDEN_RAD + sin(rad)*HIDDEN_RAD;
+ nsock->locy= node->totr.ymin + HIDDEN_RAD + cos(rad)*HIDDEN_RAD;
+ }
+
+ /* input connectors */
+ rad=drad= - M_PI/(1.0f + (float)BLI_countlist(&node->inputs));
+
+ for(nsock= node->inputs.first; nsock; nsock= nsock->next, rad+= drad) {
+ nsock->locx= node->totr.xmin + HIDDEN_RAD + sin(rad)*HIDDEN_RAD;
+ nsock->locy= node->totr.ymin + HIDDEN_RAD + cos(rad)*HIDDEN_RAD;
+ }
+ }
+ else {
+ /* header */
+ dy-= NODE_DY;
+
+ /* output connectors */
+ for(nsock= node->outputs.first; nsock; nsock= nsock->next) {
+ nsock->locx= node->locx + node->width;
+ nsock->locy= dy - NODE_DYS;
+ dy-= NODE_DY;
+ }
+
+ node->prvr.xmin= node->butr.xmin= node->locx + NODE_DYS;
+ node->prvr.xmax= node->butr.xmax= node->locx + node->width- NODE_DYS;
+
+ /* preview rect? */
+ if(node->flag & NODE_PREVIEW) {
+ dy-= NODE_DYS/2;
+ node->prvr.ymax= dy;
+ node->prvr.ymin= dy-(node->width-NODE_DY);
+ dy= node->prvr.ymin - NODE_DYS/2;
+ }
+
+ /* buttons rect? */
+ if((node->flag & NODE_OPTIONS) && node->typeinfo->butfunc) {
+ dy-= NODE_DYS/2;
+ node->butr.ymax= dy;
+ node->butr.ymin= dy - (float)node->typeinfo->butfunc(NULL, node, NULL);
+ dy= node->butr.ymin - NODE_DYS/2;
+ }
+
+ /* input connectors */
+ for(nsock= node->inputs.first; nsock; nsock= nsock->next) {
+ nsock->locx= node->locx;
+ nsock->locy= dy - NODE_DYS;
+ dy-= NODE_DY;
+ }
+
+ node->totr.xmin= node->locx;
+ node->totr.xmax= node->locx + node->width;
+ node->totr.ymax= node->locy;
+ node->totr.ymin= dy;
+ }
+}
+
+static void node_scaling_widget(int color_id, float aspect, float xmin, float ymin, float xmax, float ymax)
+{
+ float dx;
+ float dy;
+
+ dx= 0.5f*(xmax-xmin);
+ dy= 0.5f*(ymax-ymin);
+
+ BIF_ThemeColorShade(color_id, +30);
+ fdrawline(xmin, ymin, xmax, ymax);
+ fdrawline(xmin+dx, ymin, xmax, ymax-dy);
+
+ BIF_ThemeColorShade(color_id, -10);
+ fdrawline(xmin, ymin+aspect, xmax, ymax+aspect);
+ fdrawline(xmin+dx, ymin+aspect, xmax, ymax-dy+aspect);
+}
+
+static int node_get_colorid(bNode *node)
+{
+ if(node->typeinfo->nclass==NODE_CLASS_INPUT)
+ return TH_NODE_IN_OUT;
+ if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
+ if(node->flag & NODE_DO_OUTPUT)
+ return TH_NODE_IN_OUT;
+ else
+ return TH_NODE;
+ }
+ if(node->typeinfo->nclass==NODE_CLASS_GENERATOR)
+ return TH_NODE_GENERATOR;
+ if(node->typeinfo->nclass==NODE_CLASS_OPERATOR)
+ return TH_NODE_OPERATOR;
+ return TH_NODE;
+}
+
+static void node_basis_draw(SpaceNode *snode, bNode *node)
{
bNodeSocket *sock;
- rctf *rct= &node->tot;
- float slen;
- int trans= (U.transopts & USER_TR_BUTTONS);
+ rctf *rct= &node->totr;
+ float slen, iconofs;
+ int ofs, color_id= node_get_colorid(node);
- nodeshadow(rct, node->flag & SELECT);
+ uiSetRoundBox(15-4);
+ nodeshadow(rct, BASIS_RAD, node->flag & SELECT);
- BIF_ThemeColorShade(TH_HEADER, 0);
+ /* header */
+ BIF_ThemeColorShade(color_id, 0);
uiSetRoundBox(3);
- uiRoundBox(rct->xmin, rct->ymax-NODE_DY, rct->xmax, rct->ymax, 8);
+ uiRoundBox(rct->xmin, rct->ymax-NODE_DY, rct->xmax, rct->ymax, BASIS_RAD);
- BIF_ThemeColorShade(TH_HEADER, 20);
- uiSetRoundBox(12);
- uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax-NODE_DY, 8);
+ /* open/close entirely? */
+// ui_draw_tria_icon(rct->xmin+6.0f, rct->ymax-NODE_DY+5.0f, snode->aspect, 'h');
- ui_rasterpos_safe(rct->xmin+4.0f, rct->ymax-NODE_DY+5.0f, snode->aspect);
+ /* show/hide icons */
+ iconofs= rct->xmax;
+ if(node->typeinfo->flag & NODE_PREVIEW) {
+ int icon_id;
+
+ if(node->flag & (NODE_ACTIVE_ID|NODE_DO_OUTPUT))
+ icon_id= ICON_MATERIAL;
+ else
+ icon_id= ICON_MATERIAL_DEHLT;
+ iconofs-= 18.0f;
+ glEnable(GL_BLEND);
+ BIF_icon_set_aspect(icon_id, snode->aspect);
+ BIF_icon_draw_blended(iconofs, rct->ymax-NODE_DY+2, icon_id, 0, -50);
+ glDisable(GL_BLEND);
+ }
+ if(node->typeinfo->flag & NODE_OPTIONS) {
+ iconofs-= 18.0f;
+ glEnable(GL_BLEND);
+ BIF_icon_set_aspect(ICON_BUTS, snode->aspect);
+ BIF_icon_draw_blended(iconofs, rct->ymax-NODE_DY+2, ICON_BUTS, 0, -50);
+ glDisable(GL_BLEND);
+ }
+
+ /* title */
if(node->flag & SELECT)
BIF_ThemeColor(TH_TEXT_HI);
else
BIF_ThemeColor(TH_TEXT);
- BIF_DrawString(snode->curfont, node->name, trans);
+ ui_rasterpos_safe(rct->xmin+6.0f, rct->ymax-NODE_DY+5.0f, snode->aspect);
+ snode_drawstring(snode, node->name, (int)(iconofs - rct->xmin-6.0f));
+
+ /* body */
+ BIF_ThemeColorShade(color_id, 20);
+ uiSetRoundBox(8);
+ uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax-NODE_DY, BASIS_RAD);
+ /* scaling indicator */
+ node_scaling_widget(color_id, snode->aspect, rct->xmax-BASIS_RAD*snode->aspect, rct->ymin, rct->xmax, rct->ymin+BASIS_RAD*snode->aspect);
+
+ /* outline active emphasis */
+ if(node->flag & NODE_ACTIVE) {
+ glEnable(GL_BLEND);
+ glColor4ub(200, 200, 200, 140);
+ uiSetRoundBox(15-4);
+ gl_round_box(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
+ glDisable(GL_BLEND);
+ }
+
+ /* socket inputs, label buttons */
for(sock= node->inputs.first; sock; sock= sock->next) {
- socket_circle_draw(sock->locx, sock->locy, NODE_SOCK, sock->type, sock->flag & SELECT);
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
- BIF_ThemeColor(TH_TEXT);
- ui_rasterpos_safe(sock->locx+8.0f, sock->locy-5.0f, snode->aspect);
- BIF_DrawString(snode->curfont, sock->name, trans);
+ if(sock->type==SOCK_VALUE) {
+ uiBut *bt= uiDefBut(snode->block, LABEL, B_NODE_EXEC, sock->name, sock->locx+5.0f, sock->locy-10.0f, node->width-NODE_DY, NODE_DY, sock, 0, 0, 0, 0, "");
+ bt->block_func= socket_value_menu;
+ }
+ else if(sock->type==SOCK_VECTOR) {
+ uiBut *bt= uiDefBut(snode->block, LABEL, B_NODE_EXEC, sock->name, sock->locx+5.0f, sock->locy-10.0f, node->width-NODE_DY, NODE_DY, sock, 0, 0, 0, 0, "");
+ bt->block_func= socket_vector_menu;
+ }
+ else if(sock->type==SOCK_RGBA) {
+ uiBut *bt= uiDefBut(snode->block, LABEL, B_NODE_EXEC, sock->name, sock->locx+5.0f, sock->locy-10.0f, node->width-NODE_DY, NODE_DY, sock, 0, 0, 0, 0, "");
+ bt->block_func= socket_color_menu;
+ }
+ else {
+ BIF_ThemeColor(TH_TEXT);
+ ui_rasterpos_safe(sock->locx+8.0f, sock->locy-5.0f, snode->aspect);
+ BIF_DrawString(snode->curfont, sock->name, 0);
+ }
}
+ /* socket outputs */
for(sock= node->outputs.first; sock; sock= sock->next) {
- socket_circle_draw(sock->locx, sock->locy, NODE_SOCK, sock->type, sock->flag & SELECT);
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
BIF_ThemeColor(TH_TEXT);
- slen= snode->aspect*BIF_GetStringWidth(snode->curfont, sock->name, trans);
+ ofs= 0;
+ slen= snode->aspect*BIF_GetStringWidth(snode->curfont, sock->name, 0);
+ while(slen > node->width) {
+ ofs++;
+ slen= snode->aspect*BIF_GetStringWidth(snode->curfont, sock->name+ofs, 0);
+ }
ui_rasterpos_safe(sock->locx-8.0f-slen, sock->locy-5.0f, snode->aspect);
- BIF_DrawString(snode->curfont, sock->name, trans);
+ BIF_DrawString(snode->curfont, sock->name+ofs, 0);
}
- return 0;
+ /* preview */
+ if(node->flag & NODE_PREVIEW)
+ if(node->preview)
+ node_draw_preview(node->preview, &node->prvr);
+
+ /* buttons */
+ if(node->flag & NODE_OPTIONS)
+ if(node->typeinfo->butfunc)
+ node->typeinfo->butfunc(snode->block, node, &node->butr);
+
}
+void node_hidden_draw(SpaceNode *snode, bNode *node)
+{
+ bNodeSocket *sock;
+ rctf *rct= &node->totr;
+ int color_id= node_get_colorid(node);
+
+ /* shadow */
+ uiSetRoundBox(15);
+ nodeshadow(rct, HIDDEN_RAD, node->flag & SELECT);
-static void node_draw_link(SpaceNode *snode, bNodeLink *link)
+ /* body */
+ BIF_ThemeColorShade(color_id, 20);
+ uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, HIDDEN_RAD);
+
+ /* outline active emphasis */
+ if(node->flag & NODE_ACTIVE) {
+ glEnable(GL_BLEND);
+ glColor4ub(200, 200, 200, 140);
+ gl_round_box(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, HIDDEN_RAD);
+ glDisable(GL_BLEND);
+ }
+
+ /* icon */
+ if(node->id) {
+ glEnable(GL_BLEND);
+ BIF_icon_set_aspect(node->id->icon_id, snode->aspect);
+ BIF_icon_draw(rct->xmin+HIDDEN_RAD, -1.0f+rct->ymin+HIDDEN_RAD/2, node->id->icon_id);
+ glDisable(GL_BLEND);
+ }
+
+ /* sockets */
+ for(sock= node->inputs.first; sock; sock= sock->next) {
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
+ }
+
+ for(sock= node->outputs.first; sock; sock= sock->next) {
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
+ }
+}
+
+void node_draw_link(SpaceNode *snode, bNodeLink *link)
{
float vec[4][3];
float dist, spline_step, mx=0.0f, my=0.0f;
@@ -358,7 +774,7 @@ static void node_draw_link(SpaceNode *snode, bNodeLink *link)
vec[3][1]= my;
}
- dist= 0.5*VecLenf(vec[0], vec[3]);
+ dist= 0.5f*ABS(vec[0][0] - vec[3][0]);
/* check direction later, for top sockets */
vec[1][0]= vec[0][0]+dist;
@@ -414,15 +830,17 @@ void drawnodespace(ScrArea *sa, void *spacedata)
draw_nodespace_grid(snode);
/* nodes */
- get_nodetree(snode); /* editor context */
+
+ snode_set_context(snode);
if(snode->nodetree) {
bNode *node;
bNodeLink *link;
- if((snode->nodetree->init & NTREE_DRAW_SET)==0)
- ntree_init_callbacks(snode->nodetree);
-
+ /* for now, we set drawing coordinates on each redraw */
+ for(node= snode->nodetree->nodes.first; node; node= node->next)
+ node_update(node);
+
/* node lines */
glEnable(GL_BLEND);
glEnable( GL_LINE_SMOOTH );
@@ -437,8 +855,10 @@ void drawnodespace(ScrArea *sa, void *spacedata)
for(node= snode->nodetree->nodes.first; node; node= node->next) {
if(!(node->flag & SELECT)) {
- node_basis_draw(snode, node);
- if(node->drawfunc) node->drawfunc(snode, node);
+ if(node->flag & NODE_HIDDEN)
+ node_hidden_draw(snode, node);
+ else
+ node_basis_draw(snode, node);
}
}
uiDrawBlock(snode->block);
@@ -449,8 +869,10 @@ void drawnodespace(ScrArea *sa, void *spacedata)
for(node= snode->nodetree->nodes.first; node; node= node->next) {
if(node->flag & SELECT) {
- node_basis_draw(snode, node);
- if(node->drawfunc) node->drawfunc(snode, node);
+ if(node->flag & NODE_HIDDEN)
+ node_hidden_draw(snode, node);
+ else
+ node_basis_draw(snode, node);
}
}
@@ -465,4 +887,10 @@ void drawnodespace(ScrArea *sa, void *spacedata)
draw_area_emboss(sa);
curarea->win_swap= WIN_BACK_OK;
+
+ /* in the end, this is a delayed previewrender test, to allow buttons to be first */
+ if(snode->flag & SNODE_DO_PREVIEW) {
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ snode->flag &= ~SNODE_DO_PREVIEW;
+ }
}
diff --git a/source/blender/src/drawseq.c b/source/blender/src/drawseq.c
index c215a256b4e..ea39e172d7e 100644
--- a/source/blender/src/drawseq.c
+++ b/source/blender/src/drawseq.c
@@ -503,7 +503,7 @@ static void draw_image_seq(ScrArea *sa)
glaDefine2DArea(&curarea->winrct);
glPixelZoom(zoom, zoom);
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->rect);
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
glPixelZoom(1.0, 1.0);
diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c
index 03c8d62b25d..74e68ba5cb1 100644
--- a/source/blender/src/drawview.c
+++ b/source/blender/src/drawview.c
@@ -435,7 +435,7 @@ static void draw_bgpic(void)
glaDefine2DArea(&curarea->winrct);
glPixelZoom(zoomx, zoomy);
- glaDrawPixelsSafe(x1, y1, ima->ibuf->x, ima->ibuf->y, bgpic->rect);
+ glaDrawPixelsSafe(x1, y1, ima->ibuf->x, ima->ibuf->y, GL_UNSIGNED_BYTE, bgpic->rect);
glPixelZoom(1.0, 1.0);
glMatrixMode(GL_PROJECTION);
diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c
index 58edc4a817b..3d0bee6f080 100644
--- a/source/blender/src/edit.c
+++ b/source/blender/src/edit.c
@@ -129,12 +129,12 @@ void circle_selectCB(select_CBfunc func);
/* local protos ---------------*/
void snap_curs_to_firstsel(void);
-
-int get_border(rcti *rect, short col)
+/* flag==2 only border, flag==3 cross+border */
+int get_border(rcti *rect, short flag)
{
float dvec[4], fac1, fac2;
int retval=1;
- unsigned short event;
+ unsigned short event= 0;
short mval[2], mvalo[4], val, x1, y1;
char str[64];
@@ -153,56 +153,59 @@ int get_border(rcti *rect, short col)
persp(PERSP_WIN);
initgrabz(0.0, 0.0, 0.0);
- getmouseco_areawin(mvalo);
-
- /* draws the selection initial cross */
- sdrawXORline4(0, 0, mvalo[1], curarea->winx, mvalo[1]);
- sdrawXORline4(1, mvalo[0], 0, mvalo[0], curarea->winy);
- glFlush();
-
- while(TRUE) {
-
- /* selection loop while mouse pressed */
- getmouseco_areawin(mval);
+ if(flag & 1) {
+ getmouseco_areawin(mvalo);
- if(mvalo[0]!=mval[0] || mvalo[1]!=mval[1]) {
+ /* draws the selection initial cross */
+ sdrawXORline4(0, 0, mvalo[1], curarea->winx, mvalo[1]);
+ sdrawXORline4(1, mvalo[0], 0, mvalo[0], curarea->winy);
+ glFlush();
+
+ while(TRUE) {
+
+ /* selection loop while mouse pressed */
+ getmouseco_areawin(mval);
+
+ if(mvalo[0]!=mval[0] || mvalo[1]!=mval[1]) {
- /* aiming cross */
- sdrawXORline4(0, 0, mval[1], curarea->winx, mval[1]);
- sdrawXORline4(1, mval[0], 0, mval[0], curarea->winy);
- glFlush();
+ /* aiming cross */
+ sdrawXORline4(0, 0, mval[1], curarea->winx, mval[1]);
+ sdrawXORline4(1, mval[0], 0, mval[0], curarea->winy);
+ glFlush();
- mvalo[0]= mval[0];
- mvalo[1]= mval[1];
- }
- event= extern_qread(&val);
+ mvalo[0]= mval[0];
+ mvalo[1]= mval[1];
+ }
+ event= extern_qread(&val);
- if(event && val) {
+ if(event && val) {
- /* for when a renderwindow is open, and a mouse cursor activates it */
- persp(PERSP_VIEW);
- mywinset(curarea->win);
- persp(PERSP_WIN);
-
- if(event==ESCKEY) {
- retval= 0;
- break;
- }
- else if(event==BKEY) {
- /* b has been pressed twice: proceed with circle select */
- retval= 0;
- break;
+ /* for when a renderwindow is open, and a mouse cursor activates it */
+ persp(PERSP_VIEW);
+ mywinset(curarea->win);
+ persp(PERSP_WIN);
+
+ if(event==ESCKEY) {
+ retval= 0;
+ break;
+ }
+ else if(event==BKEY) {
+ /* b has been pressed twice: proceed with circle select */
+ retval= 0;
+ break;
+ }
+ else if(event==LEFTMOUSE) break;
+ else if(event==MIDDLEMOUSE) break;
+ else if(event==RIGHTMOUSE) break;
}
- else if(event==LEFTMOUSE) break;
- else if(event==MIDDLEMOUSE) break;
- else if(event==RIGHTMOUSE) break;
- }
- else PIL_sleep_ms(10);
-
- } /* end while (TRUE) */
+ else PIL_sleep_ms(10);
+
+ } /* end while (TRUE) */
- /* erase XORed lines */
- sdrawXORline4(-1, 0, 0, 0, 0);
+ /* erase XORed lines */
+ sdrawXORline4(-1, 0, 0, 0, 0);
+ }
+ else getmouseco_areawin(mval);
if(retval) {
/* box select */
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c
index 8416a9d1304..89a0ee35fbe 100644
--- a/source/blender/src/editnode.c
+++ b/source/blender/src/editnode.c
@@ -43,19 +43,20 @@
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
-
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_material.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BIF_editview.h"
#include "BIF_gl.h"
+#include "BIF_graphics.h"
#include "BIF_interface.h"
-
#include "BIF_mywindow.h"
+#include "BIF_previewrender.h"
#include "BIF_resources.h"
#include "BIF_space.h"
#include "BIF_screen.h"
@@ -72,58 +73,148 @@
#include "BDR_editobject.h"
#include "blendef.h"
+#include "butspace.h"
#include "PIL_time.h"
#include "mydevice.h"
+/* currently called from BIF_preview_changed */
+void snode_tag_dirty(SpaceNode *snode)
+{
+ bNode *node;
+
+ if(snode->treetype==NTREE_SHADER) {
+ if(snode->nodetree) {
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->type==SH_NODE_OUTPUT)
+ node->lasty= 0;
+ }
+ snode->flag |= SNODE_DO_PREVIEW; /* this adds an afterqueue on a redraw, to allow button previews to work first */
+ }
+ }
+ allqueue(REDRAWNODE, 1);
+}
+
+static void shader_node_previewrender(ScrArea *sa, SpaceNode *snode)
+{
+ bNode *node;
+
+ if(snode->id==NULL) return;
+ if( ((Material *)snode->id )->use_nodes==0 ) return;
-/* ************************** Node generic ************** */
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->type==SH_NODE_OUTPUT) {
+ if(node->flag & NODE_DO_OUTPUT) {
+ if(node->lasty<PREVIEW_RENDERSIZE-2) {
+ RenderInfo ri;
+ int test= node->lasty;
+
+ ri.cury = node->lasty;
+ ri.rect = NULL;
+ ri.pr_rectx = PREVIEW_RENDERSIZE;
+ ri.pr_recty = PREVIEW_RENDERSIZE;
+
+ BIF_previewrender(snode->id, &ri, NULL, PR_DO_RENDER); /* sends redraw event */
+ if(ri.rect) MEM_freeN(ri.rect);
+
+ if(node->lasty<PREVIEW_RENDERSIZE-2)
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+// if(test!=node->lasty)
+// printf("node rendered y %d to %d\n", test, node->lasty);
-/* based on settings in tree and node,
- - it fills it with appropriate callbacks
- - sets drawing rect info */
-void node_update(bNodeTree *ntree, bNode *node)
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+static void snode_handle_recalc(SpaceNode *snode)
{
- bNodeSocket *nsock;
- float dy= node->locy;
+ if(snode->treetype==NTREE_SHADER) {
+ BIF_preview_changed(ID_MA); /* signals buttons windows and node editors */
+ }
+ else
+ allqueue(REDRAWNODE, 1);
+}
+
+/* assumes nothing being done in ntree yet, sets the default in/out node */
+/* called from shading buttons or header */
+void node_shader_default(Material *ma)
+{
+ bNode *in, *out;
+ bNodeSocket *fromsock, *tosock;
- /* input connectors */
- for(nsock= node->inputs.last; nsock; nsock= nsock->prev) {
- nsock->locx= node->locx;
- nsock->locy= dy + NODE_DYS;
- dy+= NODE_DY;
+ /* but lets check it anyway */
+ if(ma->nodetree) {
+ printf("error in shader initialize\n");
+ return;
}
- /* spacer */
- dy+= NODE_DYS;
+ ma->nodetree= ntreeAddTree(NTREE_SHADER);
- /* preview rect? */
- node->prv.xmin= node->locx + NODE_DYS;
- node->prv.xmax= node->locx + node->width- NODE_DYS;
- node->prv.ymin= dy;
- node->prv.ymax= dy+=node->prv_h;
+ in= nodeAddNodeType(ma->nodetree, SH_NODE_INPUT);
+ in->locx= 10.0f; in->locy= 200.0f;
+ out= nodeAddNodeType(ma->nodetree, SH_NODE_OUTPUT);
+ out->locx= 200.0f; out->locy= 200.0f;
- /* spacer */
- dy+= NODE_DYS;
+ /* only a link from color to color */
+ fromsock= in->outputs.first;
+ tosock= out->inputs.first;
+ nodeAddLink(ma->nodetree, in, fromsock, out, tosock);
- /* output connectors */
- for(nsock= node->outputs.last; nsock; nsock= nsock->prev) {
- nsock->locx= node->locx + node->width;
- nsock->locy= dy + NODE_DYS;
- dy+= NODE_DY;
- }
+ ntreeSolveOrder(ma->nodetree); /* needed for pointers */
+}
+
+/* even called for each redraw now, so keep it fast :) */
+void snode_set_context(SpaceNode *snode)
+{
+ Object *ob= OBACT;
- /* header */
- dy+= NODE_DY;
+ snode->nodetree= NULL;
+ snode->id= snode->from= NULL;
+
+ if(snode->treetype==NTREE_SHADER) {
+ /* need active object, or we allow pinning... */
+ if(ob) {
+ Material *ma= give_current_material(ob, ob->actcol);
+ if(ma) {
+ snode->from= &ob->id;
+ snode->id= &ma->id;
+ snode->nodetree= ma->nodetree;
+ }
+ }
+ }
+}
+
+/* ************************** Node generic ************** */
- node->tot.xmin= node->locx;
- node->tot.xmax= node->locx + node->width;
- node->tot.ymin= node->locy;
- node->tot.ymax= dy;
+static void snode_home(ScrArea *sa, SpaceNode *snode)
+{
+ bNode *node;
+ int first= 1;
+
+ snode->v2d.cur.xmin= snode->v2d.cur.ymin= 0.0f;
+ snode->v2d.cur.xmax= sa->winx;
+ snode->v2d.cur.xmax= sa->winy;
+
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(first) {
+ first= 0;
+ snode->v2d.cur= node->totr;
+ }
+ else {
+ BLI_union_rctf(&snode->v2d.cur, &node->totr);
+ }
+ }
+ snode->v2d.tot= snode->v2d.cur;
+ test_view2d(G.v2d, sa->winx, sa->winy);
+
}
/* checks mouse position, and returns found node/socket */
/* type is SOCK_IN and/or SOCK_OUT */
-static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **sockp, int type, int in_out)
+static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **sockp, int in_out)
{
bNode *node;
bNodeSocket *sock;
@@ -133,32 +224,28 @@ static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &rect.xmin, &rect.ymin);
- rect.xmin -= NODE_SOCK+3;
- rect.ymin -= NODE_SOCK+3;
- rect.xmax = rect.xmin + 2*NODE_SOCK+6;
- rect.ymax = rect.ymin + 2*NODE_SOCK+6;
+ rect.xmin -= NODE_SOCKSIZE+3;
+ rect.ymin -= NODE_SOCKSIZE+3;
+ rect.xmax = rect.xmin + 2*NODE_SOCKSIZE+6;
+ rect.ymax = rect.ymin + 2*NODE_SOCKSIZE+6;
/* check if we click in a socket */
for(node= snode->nodetree->nodes.first; node; node= node->next) {
if(in_out & SOCK_IN) {
for(sock= node->inputs.first; sock; sock= sock->next) {
- if(type==-1 || type==sock->type) {
- if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
- *nodep= node;
- *sockp= sock;
- return 1;
- }
+ if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
+ *nodep= node;
+ *sockp= sock;
+ return 1;
}
}
}
if(in_out & SOCK_OUT) {
for(sock= node->outputs.first; sock; sock= sock->next) {
- if(type==-1 || type==sock->type) {
- if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
- *nodep= node;
- *sockp= sock;
- return 1;
- }
+ if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
+ *nodep= node;
+ *sockp= sock;
+ return 1;
}
}
}
@@ -169,13 +256,12 @@ static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **
/* ********************* transform ****************** */
/* releases on event, only intern (for extern see below) */
-static void transform_nodes(SpaceNode *snode, char *undostr)
+static void transform_nodes(SpaceNode *snode, char mode, char *undostr)
{
bNode *node;
float mxstart, mystart, mx, my, *oldlocs, *ol;
int cont=1, tot=0, cancel=0, firsttime=1;
short mval[2], mvalo[2];
- char str[64];
/* count total */
for(node= snode->nodetree->nodes.first; node; node= node->next)
@@ -199,6 +285,8 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
getmouseco_areawin(mval);
if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1] || firsttime) {
+// char str[64];
+
firsttime= 0;
areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
@@ -209,13 +297,12 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
if(node->flag & SELECT) {
node->locx= ol[0] + mx-mxstart;
node->locy= ol[1] + my-mystart;
- node_update(snode->nodetree, node);
ol+= 2;
}
}
- sprintf(str, "X: %.1f Y: %.1f", mx-mxstart, my-mystart);
- headerprint(str);
+// sprintf(str, "X: %.1f Y: %.1f", mx-mxstart, my-mystart);
+// headerprint(str);
force_draw(0);
}
else
@@ -252,7 +339,6 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
node->locx= ol[0];
node->locy= ol[1];
ol+= 2;
- node_update(snode->nodetree, node);
}
}
@@ -267,9 +353,73 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
/* external call, also for callback */
void node_transform_ext(int mode, int unused)
{
- transform_nodes(curarea->spacedata.first, "Translate node");
+ transform_nodes(curarea->spacedata.first, 'g', "Translate node");
}
+
+/* releases on event, only 1 node */
+static void scale_node(SpaceNode *snode, bNode *node)
+{
+ float mxstart, mystart, mx, my, oldwidth;
+ int cont=1, cancel=0;
+ short mval[2], mvalo[2];
+
+ /* store old */
+ oldwidth= node->width;
+
+ getmouseco_areawin(mvalo);
+ areamouseco_to_ipoco(G.v2d, mvalo, &mxstart, &mystart);
+
+ while(cont) {
+
+ getmouseco_areawin(mval);
+ if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) {
+
+ areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
+ mvalo[0]= mval[0];
+ mvalo[1]= mval[1];
+
+ node->width= oldwidth + mx-mxstart;
+ CLAMP(node->width, node->typeinfo->minwidth, node->typeinfo->maxwidth);
+
+ force_draw(0);
+ }
+ else
+ PIL_sleep_ms(10);
+
+ while (qtest()) {
+ short val;
+ unsigned short event= extern_qread(&val);
+
+ switch (event) {
+ case LEFTMOUSE:
+ case SPACEKEY:
+ case RETKEY:
+ cont=0;
+ break;
+ case ESCKEY:
+ case RIGHTMOUSE:
+ if(val) {
+ cancel=1;
+ cont=0;
+ }
+ break;
+ }
+ }
+
+ }
+
+ if(cancel) {
+ node->width= oldwidth;
+ }
+ else
+ BIF_undo_push("Scale Node");
+
+ allqueue(REDRAWNODE, 1);
+}
+
+
+
/* ********************** select ******************** */
/* no undo here! */
@@ -296,8 +446,37 @@ void node_deselectall(SpaceNode *snode, int swap)
allqueue(REDRAWNODE, 0);
}
+/* two active flags, ID nodes have special flag for buttons display */
+static void node_set_active(SpaceNode *snode, bNode *node)
+{
+ bNode *tnode;
+
+ /* make sure only one node is active, and only one per ID type */
+ for(tnode= snode->nodetree->nodes.first; tnode; tnode= tnode->next) {
+ tnode->flag &= ~NODE_ACTIVE;
+
+ /* activate input/output will de-active all node-id types */
+ if(node->typeinfo->nclass==NODE_CLASS_INPUT || node->typeinfo->nclass==NODE_CLASS_OUTPUT)
+ tnode->flag &= ~NODE_ACTIVE_ID;
+
+ if(node->id && tnode->id) {
+ if(GS(node->id->name) == GS(tnode->id->name))
+ tnode->flag &= ~NODE_ACTIVE_ID;
+ }
+ }
+
+ node->flag |= NODE_ACTIVE;
+ if(node->id)
+ node->flag |= NODE_ACTIVE_ID;
+
+ /* tree specific activate calls */
+ if(snode->treetype==NTREE_SHADER) {
+ allqueue(REDRAWBUTSSHADING, 1);
+ }
+}
-static void node_mouse_select(SpaceNode *snode)
+/* return 0: nothing done */
+static int node_mouse_select(SpaceNode *snode, unsigned short event)
{
bNode *node;
float mx, my;
@@ -306,37 +485,77 @@ static void node_mouse_select(SpaceNode *snode)
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
- if((G.qual & LR_SHIFTKEY)==0)
- node_deselectall(snode, 0);
-
+ /* first check for the headers or scaling widget */
for(node= snode->nodetree->nodes.first; node; node= node->next) {
- if(BLI_in_rctf(&node->tot, mx, my)) {
- if(G.qual & LR_SHIFTKEY) {
- if(node->flag & SELECT)
- node->flag &= ~SELECT;
- else
- node->flag |= SELECT;
+ if((node->flag & NODE_HIDDEN)==0) {
+ rctf totr= node->totr;
+ totr.ymin= totr.ymax-20.0f;
+ totr.xmin= totr.xmax-18.0f;
+
+ if(node->typeinfo->flag & NODE_PREVIEW) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag ^= NODE_PREVIEW;
+ allqueue(REDRAWNODE, 0);
+ return 1;
+ }
+ totr.xmin-=18.0f;
+ }
+ if(node->typeinfo->flag & NODE_OPTIONS) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag ^= NODE_OPTIONS;
+ allqueue(REDRAWNODE, 0);
+ return 1;
+ }
}
- else
- node->flag |= SELECT;
- break;
+ totr= node->totr;
+ totr.xmin= totr.xmax-10.0f;
+ totr.ymax= totr.ymin+10.0f;
+ if(BLI_in_rctf(&totr, mx, my)) {
+ scale_node(snode, node);
+ return 1;
+ }
}
}
- /* not so nice (no event), but function below delays redraw otherwise */
- force_draw(0);
-
- std_rmouse_transform(node_transform_ext); /* does undo push for select */
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(BLI_in_rctf(&node->totr, mx, my))
+ break;
+ }
+ if(node) {
+ if((G.qual & LR_SHIFTKEY)==0)
+ node_deselectall(snode, 0);
+
+ if(G.qual & LR_SHIFTKEY) {
+ if(node->flag & SELECT)
+ node->flag &= ~SELECT;
+ else
+ node->flag |= SELECT;
+ }
+ else
+ node->flag |= SELECT;
+
+ node_set_active(snode, node);
+
+ /* not so nice (no event), but function below delays redraw otherwise */
+ force_draw(0);
+
+ std_rmouse_transform(node_transform_ext); /* does undo push for select */
+
+ return 1;
+ }
+ return 0;
}
-static int node_socket_hilights(SpaceNode *snode, int type, int in_out)
+static int node_socket_hilights(SpaceNode *snode, int in_out)
{
bNode *node;
bNodeSocket *sock, *tsock, *socksel= NULL;
float mx, my;
short mval[2], redraw= 0;
+ if(snode->nodetree==NULL) return 0;
+
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
@@ -358,7 +577,7 @@ static int node_socket_hilights(SpaceNode *snode, int type, int in_out)
}
}
- if(find_indicated_socket(snode, &node, &tsock, type, in_out)) {
+ if(find_indicated_socket(snode, &node, &tsock, in_out)) {
tsock->flag |= SELECT;
if(redraw==1 && tsock==socksel) redraw= 0;
else redraw= 1;
@@ -384,7 +603,7 @@ void node_border_select(SpaceNode *snode)
areamouseco_to_ipoco(G.v2d, mval, &rectf.xmax, &rectf.ymax);
for(node= snode->nodetree->nodes.first; node; node= node->next) {
- if(BLI_isect_rctf(&rectf, &node->tot, NULL)) {
+ if(BLI_isect_rctf(&rectf, &node->totr, NULL)) {
if(val==LEFTMOUSE)
node->flag |= SELECT;
else
@@ -398,14 +617,14 @@ void node_border_select(SpaceNode *snode)
/* ****************** Add *********************** */
-/* can be called from menus too */
-void node_add_shader_node(SpaceNode *snode, int type, float locx, float locy)
+/* can be called from menus too, but they should do own undopush and redraws */
+bNode *node_add_shadernode(SpaceNode *snode, int type, float locx, float locy)
{
bNode *node= NULL;
node_deselectall(snode, 0);
- node= node_shader_add(snode->nodetree, type);
+ node= nodeAddNodeType(snode->nodetree, type);
/* generics */
if(node) {
@@ -413,12 +632,15 @@ void node_add_shader_node(SpaceNode *snode, int type, float locx, float locy)
node->locy= locy;
node->flag |= SELECT;
- node_shader_set_execfunc(node);
- node_shader_set_drawfunc(node);
- /* update calculates all coords for usage */
- node_update(snode->nodetree, node);
+ /* custom storage, will become handlerized.. */
+ if(node->type==SH_NODE_VALTORGB)
+ node->storage= add_colorband(1);
+ else if(node->type==SH_NODE_MATERIAL)
+ node->custom1= SH_NODE_MAT_DIFF|SH_NODE_MAT_SPEC;
+
+ node_set_active(snode, node);
}
-
+ return node;
}
/* hotkey context */
@@ -427,66 +649,63 @@ static void node_add_menu(SpaceNode *snode)
float locx, locy;
short event, mval[2];
- /* shader menu */
- event= pupmenu("Add Node%t|Testnode%x0|Value %x2|Color %x1|Mix Color %x3|Show Color %x4");
- if(event<0) return;
+ /* shader menu, still hardcoded defines... solve */
+ event= pupmenu("Add Node%t|Input%x0|Output%x1|Material%x100|Texture%x106|Value %x102|Color %x101|Mix Color %x103|ColorRamp %x104|Color to BW %x105");
+ if(event<1) return;
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &locx, &locy);
- node_add_shader_node(snode, event, locx, locy);
+ node_add_shadernode(snode, event, locx, locy+40.0f);
+
+ snode_handle_recalc(snode);
- allqueue(REDRAWNODE, 0);
BIF_undo_push("Add Node");
}
void node_adduplicate(SpaceNode *snode)
{
- bNode *node, *nnode;
- bNodeLink *link, *nlink;
- bNodeSocket *sock;
- int a;
- /* backwards, we add to list end */
- for(node= snode->nodetree->nodes.last; node; node= node->prev) {
- node->new= NULL;
- if(node->flag & SELECT) {
- nnode= nodeCopyNode(snode->nodetree, node);
- node->flag &= ~SELECT;
- nnode->flag |= SELECT;
- node->new= nnode;
- }
- }
+ ntreeCopyTree(snode->nodetree, 1); /* 1 == internally selected nodes */
+ ntreeSolveOrder(snode->nodetree);
+ snode_handle_recalc(snode);
+
+ transform_nodes(snode, 'g', "Duplicate");
+}
+
+static void node_insert_convertor(SpaceNode *snode, bNodeLink *link)
+{
+ bNode *newnode= NULL;
- /* check for copying links */
- for(link= snode->nodetree->links.first; link; link= link->next) {
- if(link->fromnode->new && link->tonode->new) {
- nlink= nodeAddLink(snode->nodetree, link->fromnode->new, NULL, link->tonode->new, NULL);
- /* sockets were copied in order */
- for(a=0, sock= link->fromnode->outputs.first; sock; sock= sock->next, a++) {
- if(sock==link->fromsock)
- break;
- }
- nlink->fromsock= BLI_findlink(&link->fromnode->new->outputs, a);
+ if(snode->nodetree->type==NTREE_SHADER) {
+ if(link->fromsock->type==SOCK_RGBA && link->tosock->type==SOCK_VALUE) {
+ newnode= node_add_shadernode(snode, SH_NODE_RGBTOBW, 0.0f, 0.0f);
+ }
+ else if(link->fromsock->type==SOCK_VALUE && link->tosock->type==SOCK_RGBA) {
+ newnode= node_add_shadernode(snode, SH_NODE_VALTORGB, 0.0f, 0.0f);
+ }
+
+ if(newnode) {
+ /* dangerous assumption to use first in/out socks, but thats fine for now */
+ newnode->flag |= NODE_HIDDEN;
+ newnode->locx= 0.5f*(link->fromsock->locx + link->tosock->locx);
+ newnode->locy= 0.5f*(link->fromsock->locy + link->tosock->locy) + HIDDEN_RAD;
- for(a=0, sock= link->tonode->inputs.first; sock; sock= sock->next, a++) {
- if(sock==link->tosock)
- break;
- }
- nlink->tosock= BLI_findlink(&link->tonode->new->inputs, a);
+ nodeAddLink(snode->nodetree, newnode, newnode->outputs.first, link->tonode, link->tosock);
+ link->tonode= newnode;
+ link->tosock= newnode->inputs.first;
}
}
-
- transform_nodes(snode, "Duplicate");
}
+
/* loop that adds a nodelink, called by function below */
-/* type = starting socket */
-static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock, int in_out)
+/* in_out = starting socket */
+static int node_add_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock, int in_out)
{
bNode *tnode;
bNodeSocket *tsock;
bNodeLink *link= NULL;
- short mval[2], mvalo[2];
+ short mval[2], mvalo[2], firsttime=1; /* firsttime reconnects a link broken by caller */
/* we make a temporal link */
if(in_out==SOCK_OUT)
@@ -498,21 +717,20 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
while (get_mbut() & L_MOUSE) {
getmouseco_areawin(mval);
- if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) {
-
+ if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1] || firsttime) {
+ firsttime= 0;
+
mvalo[0]= mval[0];
mvalo[1]= mval[1];
if(in_out==SOCK_OUT) {
- if(find_indicated_socket(snode, &tnode, &tsock, sock->type, SOCK_IN)) {
+ if(find_indicated_socket(snode, &tnode, &tsock, SOCK_IN)) {
if(nodeFindLink(snode->nodetree, sock, tsock)==NULL) {
- if(nodeCountSocketLinks(snode->nodetree, tsock) < tsock->limit) {
if(tnode!=node && link->tonode!=tnode && link->tosock!= tsock) {
link->tonode= tnode;
link->tosock= tsock;
- nodeSolveOrder(snode->nodetree); /* for interactive red line warning */
+ ntreeSolveOrder(snode->nodetree); /* for interactive red line warning */
}
- }
}
}
else {
@@ -521,13 +739,13 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
}
}
else {
- if(find_indicated_socket(snode, &tnode, &tsock, sock->type, SOCK_OUT)) {
+ if(find_indicated_socket(snode, &tnode, &tsock, SOCK_OUT)) {
if(nodeFindLink(snode->nodetree, sock, tsock)==NULL) {
if(nodeCountSocketLinks(snode->nodetree, tsock) < tsock->limit) {
if(tnode!=node && link->fromnode!=tnode && link->fromsock!= tsock) {
link->fromnode= tnode;
link->fromsock= tsock;
- nodeSolveOrder(snode->nodetree); /* for interactive red line warning */
+ ntreeSolveOrder(snode->nodetree); /* for interactive red line warning */
}
}
}
@@ -538,7 +756,7 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
}
}
/* hilight target sockets only */
- node_socket_hilights(snode, sock->type, in_out==SOCK_OUT?SOCK_IN:SOCK_OUT);
+ node_socket_hilights(snode, in_out==SOCK_OUT?SOCK_IN:SOCK_OUT);
force_draw(0);
}
@@ -546,27 +764,60 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
}
if(link->tonode==NULL || link->fromnode==NULL) {
- BLI_remlink(&snode->nodetree->links, link);
- MEM_freeN(link);
+ nodeRemLink(snode->nodetree, link);
+ }
+ else {
+ bNodeLink *tlink;
+ /* we might need to remove a link */
+ if(in_out==SOCK_OUT) {
+ if(nodeCountSocketLinks(snode->nodetree, link->tosock) > tsock->limit) {
+
+ for(tlink= snode->nodetree->links.first; tlink; tlink= tlink->next) {
+ if(link!=tlink && tlink->tosock==link->tosock)
+ break;
+ }
+ if(tlink) {
+ /* is there a free input socket with same type? */
+ for(tsock= tlink->tonode->inputs.first; tsock; tsock= tsock->next) {
+ if(tsock->type==sock->type)
+ if(nodeCountSocketLinks(snode->nodetree, tsock) < tsock->limit)
+ break;
+ }
+ if(tsock)
+ tlink->tosock= tsock;
+ else {
+ nodeRemLink(snode->nodetree, tlink);
+ }
+ }
+ }
+ }
+
+ /* and last trick: insert a convertor when types dont match */
+ if(link->tosock->type!=link->fromsock->type) {
+ node_insert_convertor(snode, link);
+ ntreeSolveOrder(snode->nodetree); /* so nice do it twice! well, the sort-order can only handle 1 added link at a time */
+ }
}
- nodeSolveOrder(snode->nodetree);
- nodeExecTree(snode->nodetree);
+ ntreeSolveOrder(snode->nodetree);
+ snode_handle_recalc(snode);
allqueue(REDRAWNODE, 0);
-
+ BIF_undo_push("Add link");
+
return 1;
}
-static int node_draw_link(SpaceNode *snode)
+/* return 1 when socket clicked */
+static int node_add_link(SpaceNode *snode)
{
bNode *node;
bNodeLink *link;
bNodeSocket *sock;
/* output indicated? */
- if(find_indicated_socket(snode, &node, &sock, -1, SOCK_OUT)) {
+ if(find_indicated_socket(snode, &node, &sock, SOCK_OUT)) {
if(nodeCountSocketLinks(snode->nodetree, sock)<sock->limit)
- return node_draw_link_drag(snode, node, sock, SOCK_OUT);
+ return node_add_link_drag(snode, node, sock, SOCK_OUT);
else {
/* find if we break a link */
for(link= snode->nodetree->links.first; link; link= link->next) {
@@ -576,16 +827,15 @@ static int node_draw_link(SpaceNode *snode)
if(link) {
node= link->tonode;
sock= link->tosock;
- BLI_remlink(&snode->nodetree->links, link);
- MEM_freeN(link);
- return node_draw_link_drag(snode, node, sock, SOCK_IN);
+ nodeRemLink(snode->nodetree, link);
+ return node_add_link_drag(snode, node, sock, SOCK_IN);
}
}
}
/* or an input? */
- else if(find_indicated_socket(snode, &node, &sock, -1, SOCK_IN)) {
+ else if(find_indicated_socket(snode, &node, &sock, SOCK_IN)) {
if(nodeCountSocketLinks(snode->nodetree, sock)<sock->limit)
- return node_draw_link_drag(snode, node, sock, SOCK_IN);
+ return node_add_link_drag(snode, node, sock, SOCK_IN);
else {
/* find if we break a link */
for(link= snode->nodetree->links.first; link; link= link->next) {
@@ -595,9 +845,8 @@ static int node_draw_link(SpaceNode *snode)
if(link) {
node= link->fromnode;
sock= link->fromsock;
- BLI_remlink(&snode->nodetree->links, link);
- MEM_freeN(link);
- return node_draw_link_drag(snode, node, sock, SOCK_OUT);
+ nodeRemLink(snode->nodetree, link);
+ return node_add_link_drag(snode, node, sock, SOCK_OUT);
}
}
}
@@ -615,10 +864,147 @@ static void node_delete(SpaceNode *snode)
nodeFreeNode(snode->nodetree, node);
}
+ snode_handle_recalc(snode);
BIF_undo_push("Delete nodes");
+ allqueue(REDRAWNODE, 1);
+}
+
+static void node_hide(SpaceNode *snode)
+{
+ bNode *node;
+ int nothidden=0, ishidden=0;
+
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if(node->flag & NODE_HIDDEN)
+ ishidden++;
+ else
+ nothidden++;
+ }
+ }
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if( (ishidden && nothidden) || ishidden==0)
+ node->flag |= NODE_HIDDEN;
+ else
+ node->flag &= ~NODE_HIDDEN;
+ }
+ }
+ BIF_undo_push("Hide nodes");
+ allqueue(REDRAWNODE, 1);
+}
+
+
+static void node_border_link_delete(SpaceNode *snode)
+{
+ rcti rect;
+ short val, mval[2];
+
+ setcursor_space(SPACE_NODE, CURSOR_VPAINT);
+
+ if ( (val = get_border(&rect, 2)) ) {
+ if(rect.xmin<rect.xmax && rect.ymin<rect.ymax) {
+ //#define NODE_MAXPICKBUF 256
+ bNodeLink *link, *next;
+ GLuint buffer[256];
+ rctf rectf;
+ int code=0, hits;
+
+ mval[0]= rect.xmin;
+ mval[1]= rect.ymin;
+ areamouseco_to_ipoco(&snode->v2d, mval, &rectf.xmin, &rectf.ymin);
+ mval[0]= rect.xmax;
+ mval[1]= rect.ymax;
+ areamouseco_to_ipoco(&snode->v2d, mval, &rectf.xmax, &rectf.ymax);
+
+ myortho2(rectf.xmin, rectf.xmax, rectf.ymin, rectf.ymax);
+
+ glSelectBuffer(256, buffer);
+ glRenderMode(GL_SELECT);
+ glInitNames();
+ glPushName(-1);
+
+ /* draw links */
+ for(link= snode->nodetree->links.first; link; link= link->next) {
+ glLoadName(code++);
+ node_draw_link(snode, link);
+ }
+
+ hits= glRenderMode(GL_RENDER);
+ glPopName();
+ if(hits>0) {
+ int a;
+ for(a=0; a<hits; a++) {
+ bNodeLink *link= BLI_findlink(&snode->nodetree->links, buffer[ (4 * a) + 3]);
+ if(link)
+ link->tonode= NULL; /* first tag for delete, otherwise indices are wrong */
+ }
+ for(link= snode->nodetree->links.first; link; link= next) {
+ next= link->next;
+ if(link->tonode==NULL) {
+ nodeRemLink(snode->nodetree, link);
+ }
+ }
+ ntreeSolveOrder(snode->nodetree);
+ snode_handle_recalc(snode);
+ }
+ allqueue(REDRAWNODE, 0);
+ BIF_undo_push("Erase links");
+ }
+ }
+
+ setcursor_space(SPACE_NODE, CURSOR_STD);
+
+}
+/* ********************** */
+
+static void convert_nodes(SpaceNode *snode)
+{
+ bNode *node, *bnode, *prevnode;
+ bNodeSocket *fromsock, *tosock;
+ Material *mat= (Material *)snode->id;
+ MaterialLayer *ml;
+ float locx= 200;
+
+ if(GS(mat->id.name)!=ID_MA) return;
+
+ prevnode= snode->nodetree->nodes.first;
+
+ for(ml= mat->layers.first; ml; ml= ml->next) {
+ if(ml->mat) {
+ node= nodeAddNodeType(snode->nodetree, SH_NODE_MATERIAL);
+ node->id= (ID *)ml->mat;
+ node->locx= locx; locx+= 100;
+ node->locy= 300;
+
+ bnode= nodeAddNodeType(snode->nodetree, SH_NODE_MIX_RGB);
+ bnode->custom1= ml->blendmethod;
+ bnode->locx= locx; locx+= 100;
+ bnode->locy= 200;
+
+ fromsock= bnode->inputs.first;
+ fromsock->ns.vec[0]= ml->blendfac;
+
+ if(prevnode) {
+ fromsock= prevnode->outputs.first;
+ tosock= bnode->inputs.last;
+ nodeAddLink(snode->nodetree, prevnode, fromsock, bnode, tosock);
+ }
+
+ fromsock= node->outputs.first;
+ tosock= bnode->inputs.first; tosock= tosock->next;
+ nodeAddLink(snode->nodetree, node, fromsock, bnode, tosock);
+
+ prevnode= bnode;
+
+ }
+ }
+
+ ntreeSolveOrder(snode->nodetree);
allqueue(REDRAWNODE, 0);
}
+
/* ******************** main event loop ****************** */
void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
@@ -629,19 +1015,21 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
short val= evt->val, doredraw=0;
if(sa->win==0) return;
-
+ if(snode->nodetree==NULL) return;
+
if(val) {
if( uiDoBlocks(&sa->uiblocks, event)!=UI_NOTHING ) event= 0;
switch(event) {
case LEFTMOUSE:
- if(node_draw_link(snode)==0)
- node_mouse_select(snode);
+ if(node_add_link(snode)==0)
+ if(node_mouse_select(snode, event)==0)
+ node_border_link_delete(snode);
break;
case RIGHTMOUSE:
- node_mouse_select(snode);
+ node_mouse_select(snode, event);
break;
case MIDDLEMOUSE:
@@ -651,16 +1039,19 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case MOUSEY:
- doredraw= node_socket_hilights(snode, -1, SOCK_IN|SOCK_OUT);
+ doredraw= node_socket_hilights(snode, SOCK_IN|SOCK_OUT);
break;
case UI_BUT_EVENT:
if(val==B_NODE_EXEC) {
- nodeExecTree(snode->nodetree);
- doredraw= 1;
+ snode_handle_recalc(snode); /* sets redraw events too */
}
break;
+ case RENDERPREVIEW:
+ shader_node_previewrender(sa, snode);
+ break;
+
case PADPLUSKEY:
dx= (float)(0.1154*(G.v2d->cur.xmax-G.v2d->cur.xmin));
G.v2d->cur.xmin+= dx;
@@ -676,6 +1067,7 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
doredraw= 1;
break;
case HOMEKEY:
+ snode_home(sa, snode);
doredraw= 1;
break;
@@ -692,19 +1084,22 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
node_border_select(snode);
break;
case CKEY: /* sort again, showing cyclics */
- nodeSolveOrder(snode->nodetree);
+ if(G.qual==LR_ALTKEY)
+ convert_nodes(snode); /* temporal for layers */
+ ntreeSolveOrder(snode->nodetree);
doredraw= 1;
break;
case DKEY:
if(G.qual==LR_SHIFTKEY)
node_adduplicate(snode);
break;
- case EKEY:
- nodeExecTree(snode->nodetree);
- break;
case GKEY:
- transform_nodes(snode, "Translate Node");
+ transform_nodes(snode, 'g', "Translate Node");
+ break;
+ case HKEY:
+ node_hide(snode);
break;
+
case DELKEY:
case XKEY:
if( okee("Erase selected")==0 ) break;
@@ -715,6 +1110,8 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(doredraw)
scrarea_queue_winredraw(sa);
+ if(doredraw==2)
+ scrarea_queue_headredraw(sa);
}
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index 73fff83f98d..ea640897963 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -1039,8 +1039,10 @@ void set_active_base(Base *base)
/* signal to ipo */
allqueue(REDRAWIPO, base->object->ipowin);
+
allqueue(REDRAWACTION, 0);
allqueue(REDRAWNLA, 0);
+ allqueue(REDRAWNODE, 0);
/* signal to action */
select_actionchannel_by_name(base->object->action, "Object", 1);
@@ -1957,7 +1959,7 @@ void set_render_border(void)
if(G.vd->persp!=2) return;
- val= get_border(&rect, 2);
+ val= get_border(&rect, 3);
if(val) {
rcti vb;
diff --git a/source/blender/src/glutil.c b/source/blender/src/glutil.c
index 16571fbec95..ae7cf300844 100644
--- a/source/blender/src/glutil.c
+++ b/source/blender/src/glutil.c
@@ -220,9 +220,9 @@ static int get_cached_work_texture(int *w_r, int *h_r)
glBindTexture(GL_TEXTURE_2D, texid);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
tbuf= MEM_callocN(tex_w*tex_h*4, "tbuf");
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tex_w, tex_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, tbuf);
@@ -236,9 +236,10 @@ static int get_cached_work_texture(int *w_r, int *h_r)
return texid;
}
-void glaDrawPixelsTex(float x, float y, int img_w, int img_h, void *rect)
+void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *rect)
{
unsigned char *uc_rect= (unsigned char*) rect;
+ float *f_rect= (float *)rect;
float xzoom= glaGetOneFloat(GL_ZOOM_X), yzoom= glaGetOneFloat(GL_ZOOM_Y);
int ltexid= glaGetOneInteger(GL_TEXTURE_2D);
int lrowlength= glaGetOneInteger(GL_UNPACK_ROW_LENGTH);
@@ -256,9 +257,12 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, void *rect)
int subpart_h= (subpart_y==nsubparts_y-1)?(img_h-subpart_y*tex_h):tex_h;
float rast_x= x+subpart_x*tex_w*xzoom;
float rast_y= y+subpart_y*tex_h*yzoom;
-
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, GL_RGBA, GL_UNSIGNED_BYTE, &uc_rect[(subpart_y*tex_w)*img_w*4 + (subpart_x*tex_w)*4]);
-
+
+ if(format==GL_FLOAT)
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, GL_RGBA, GL_FLOAT, &f_rect[(subpart_y*tex_w)*img_w*4 + (subpart_x*tex_w)*4]);
+ else
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, GL_RGBA, GL_UNSIGNED_BYTE, &uc_rect[(subpart_y*tex_w)*img_w*4 + (subpart_x*tex_w)*4]);
+
glColor3ub(255, 255, 255);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
@@ -282,10 +286,8 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, void *rect)
glPixelStorei(GL_UNPACK_ROW_LENGTH, lrowlength);
}
-void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, void *rect)
+void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int format, void *rect)
{
- unsigned char *uc_rect= (unsigned char*) rect;
-
float xzoom= glaGetOneFloat(GL_ZOOM_X);
float yzoom= glaGetOneFloat(GL_ZOOM_Y);
@@ -337,7 +339,15 @@ void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, void *rect)
}
glPixelStorei(GL_UNPACK_ROW_LENGTH, img_w);
- glDrawPixels(draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, uc_rect + (off_y*img_w + off_x)*4);
+ if(format==GL_FLOAT) {
+ float *f_rect= (float *)rect;
+ glDrawPixels(draw_w, draw_h, GL_RGBA, GL_FLOAT, f_rect + (off_y*img_w + off_x)*4);
+ }
+ else {
+ unsigned char *uc_rect= (unsigned char *) rect;
+ glDrawPixels(draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, uc_rect + (off_y*img_w + off_x)*4);
+ }
+
glPixelStorei(GL_UNPACK_ROW_LENGTH, old_row_length);
}
}
diff --git a/source/blender/src/header_buttonswin.c b/source/blender/src/header_buttonswin.c
index 02c79f43b8f..e6869256402 100644
--- a/source/blender/src/header_buttonswin.c
+++ b/source/blender/src/header_buttonswin.c
@@ -137,7 +137,7 @@ void do_buts_buttons(short event)
scrarea_queue_winredraw(curarea);
break;
case B_BUTSPREVIEW:
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_TE);
G.buts->oldkeypress = 0;
scrarea_queue_headredraw(curarea);
scrarea_queue_winredraw(curarea);
@@ -203,7 +203,7 @@ void do_buts_buttons(short event)
for(ml= ma->layers.first; ml; ml= ml->next)
if(ml->mat) ml->mat->id.us++;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
BIF_undo_push("Paste material settings");
scrarea_queue_winredraw(curarea);
}
diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c
index b4e8a19d94d..78490172d2c 100644
--- a/source/blender/src/header_info.c
+++ b/source/blender/src/header_info.c
@@ -471,7 +471,7 @@ void do_info_buttons(unsigned short event)
set_scene(sce);
}
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_TE);
break;
case B_INFODELSCE:
diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c
index 1bfef7a6567..edd7602a3ea 100644
--- a/source/blender/src/header_ipo.c
+++ b/source/blender/src/header_ipo.c
@@ -886,7 +886,7 @@ void do_ipo_buttons(short event)
scrarea_queue_winredraw(curarea);
break;
case B_IPOBORDER:
- val= get_border(&rect, 2);
+ val= get_border(&rect, 3);
if(val) {
mval[0]= rect.xmin;
mval[1]= rect.ymin;
diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c
index ca5cacedac6..2d60825730b 100644
--- a/source/blender/src/header_node.c
+++ b/source/blender/src/header_node.c
@@ -33,6 +33,9 @@
#include <stdio.h>
#include "DNA_ID.h"
+#include "DNA_material_types.h"
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
@@ -41,6 +44,7 @@
#include "BIF_gl.h"
#include "BIF_interface.h"
+#include "BIF_previewrender.h"
#include "BIF_resources.h"
#include "BIF_screen.h"
#include "BIF_space.h"
@@ -49,8 +53,10 @@
#include "BKE_global.h"
#include "BKE_main.h"
+#include "BKE_material.h"
#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "blendef.h"
#include "butspace.h"
@@ -58,17 +64,29 @@
void do_node_buttons(ScrArea *sa, unsigned short event)
{
-// SpaceNode *snode= sa->spacedata.first;
+ SpaceNode *snode= sa->spacedata.first;
+ Material *ma;
switch(event) {
- ;
+ case B_NODE_USEMAT:
+ ma= (Material *)snode->id;
+ if(ma) {
+ if(ma->use_nodes && ma->nodetree==NULL) {
+ node_shader_default(ma);
+ snode_set_context(snode);
+ }
+ BIF_preview_changed(ID_MA);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ }
+ break;
}
}
void node_buttons(ScrArea *sa)
{
-// SpaceNode *snode= sa->spacedata.first;
+ SpaceNode *snode= sa->spacedata.first;
uiBlock *block;
short xco;
char name[256];
@@ -106,7 +124,6 @@ void node_buttons(ScrArea *sa)
&(sa->flag), 0, 0, 0, 0,
"Hide pulldown menus");
}
- uiBlockSetEmboss(block, UI_EMBOSS);
xco+=XIC;
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
@@ -119,6 +136,25 @@ void node_buttons(ScrArea *sa)
// xco+= xmax;
}
+ uiBlockSetEmboss(block, UI_EMBOSS);
+
+ /* find and set the context */
+ snode_set_context(snode);
+
+ if(snode->treetype==NTREE_SHADER) {
+ if(snode->from) {
+ /* 0, NULL -> pin */
+ xco= std_libbuttons(block, xco, 0, 0, NULL, B_MATBROWSE, snode->id, snode->from, &(snode->menunr),
+ B_MATALONE, B_MATLOCAL, B_MATDELETE, B_AUTOMATNAME, B_KEEPDATA);
+
+ if(snode->id) {
+ Material *ma= (Material *)snode->id;
+ uiDefButC(block, TOG, B_NODE_USEMAT, "Use Nodes", xco+5,0,70,19, &ma->use_nodes, 0.0f, 0.0f, 0, 0, "");
+ xco+=80;
+ }
+ }
+ }
+
/* always as last */
sa->headbutlen= xco+2*XIC;
diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c
index c2551bd265a..38b0e604a01 100644
--- a/source/blender/src/headerbuttons.c
+++ b/source/blender/src/headerbuttons.c
@@ -782,7 +782,8 @@ void do_global_buttons(unsigned short event)
BIF_undo_push("Browse Material");
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ allqueue(REDRAWNODE, 0);
+ BIF_preview_changed(ID_MA);
}
}
@@ -799,7 +800,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
}
break;
@@ -819,7 +820,7 @@ void do_global_buttons(unsigned short event)
ma->mtex[ ma->texact ]= NULL;
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
}
}
@@ -833,7 +834,7 @@ void do_global_buttons(unsigned short event)
wrld->mtex[ wrld->texact ]= NULL;
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
}
}
@@ -847,7 +848,7 @@ void do_global_buttons(unsigned short event)
la->mtex[ la->texact ]= NULL;
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
}
}
@@ -913,7 +914,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
}
break;
@@ -1101,7 +1102,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
break;
case B_WORLDDELETE:
@@ -1169,7 +1170,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
}
break;
@@ -1209,7 +1210,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
break;
@@ -1266,7 +1267,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
}
break;
diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c
index 26784712b0c..351deab0e4b 100644
--- a/source/blender/src/interface.c
+++ b/source/blender/src/interface.c
@@ -69,11 +69,13 @@
#include "DNA_userdef_types.h"
#include "DNA_vec_types.h"
#include "DNA_object_types.h"
+#include "DNA_texture_types.h"
#include "DNA_vfont_types.h"
#include "BKE_blender.h"
#include "BKE_global.h"
#include "BKE_library.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -908,6 +910,9 @@ void uiDrawBlock(uiBlock *block)
uiBut *but;
short testmouse=0, mouse[2];
+ /* we set this only once */
+ glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+
/* handle pending stuff */
if(block->autofill) ui_autofill(block);
if(block->minx==0.0 && block->maxx==0.0) uiBoundsBlock(block, 0);
@@ -2453,7 +2458,7 @@ static int ui_do_but_NUMSLI(uiBut *but)
}
/* event denotes if we make first item active or not */
-static int ui_do_but_BLOCK(uiBut *but, int event)
+static uiBlock *ui_do_but_BLOCK(uiBut *but, int event)
{
uiBlock *block;
uiBut *bt;
@@ -2494,7 +2499,7 @@ static int ui_do_but_BLOCK(uiBut *but, int event)
but->flag &= ~UI_SELECT;
uibut_do_func(but);
- return 0;
+ return block;
}
static int ui_do_but_BUTM(uiBut *but)
@@ -2510,9 +2515,25 @@ static int ui_do_but_BUTM(uiBut *but)
static int ui_do_but_LABEL(uiBut *but)
{
-
- uibut_do_func(but);
- return but->retval;
+ /* new label type, for nodes, ctrl+clock on text gives options */
+ if(but->block_func) {
+ if(G.qual & LR_CTRLKEY) {
+ ListBase listb={NULL, NULL};
+ uiBlock *block= ui_do_but_BLOCK(but, 0);
+
+ BLI_addtail(&listb, block);
+ block->parent= NULL; /* we abused ui_do_but_BLOCK */
+ uiDoBlocks(&listb, 0);
+
+ uibut_do_func(but);
+ return but->retval;
+ }
+ return 0;
+ }
+ else {
+ uibut_do_func(but);
+ return but->retval;
+ }
}
static uiBut *ui_get_valid_link_button(uiBlock *block, uiBut *but, short *mval)
@@ -3147,6 +3168,104 @@ static int ui_do_but_CHARTAB(uiBut *but)
#endif
+static int vergcband(const void *a1, const void *a2)
+{
+ const CBData *x1=a1, *x2=a2;
+
+ if( x1->pos > x2->pos ) return 1;
+ else if( x1->pos < x2->pos) return -1;
+ return 0;
+}
+
+
+static void do_colorband_evt(ColorBand *coba)
+{
+ int a;
+
+ if(coba==NULL) return;
+
+ if(coba->tot<2) return;
+
+ for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
+ qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+ for(a=0; a<coba->tot; a++) {
+ if(coba->data[a].cur==coba->cur) {
+ if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); /* button cur */
+ coba->cur= a;
+ break;
+ }
+ }
+}
+
+
+static int ui_do_but_COLORBAND(uiBut *but)
+{
+ ColorBand *coba= (ColorBand *)but->poin;
+ CBData *cbd;
+ float dx, width= but->x2-but->x1;
+ int a;
+ int mindist= 12, xco;
+ short mval[2], mvalo[2];
+
+ uiGetMouse(mywinget(), mvalo);
+
+ if(G.qual & LR_CTRLKEY) {
+ /* insert new key on mouse location */
+ if(coba->tot < MAXCOLORBAND-1) {
+ float pos= ((float)(mvalo[0] - but->x1))/width;
+ float col[4];
+
+ do_colorband(coba, pos, col); /* executes it */
+
+ coba->tot++;
+ coba->cur= coba->tot-1;
+
+ coba->data[coba->cur].r= col[0];
+ coba->data[coba->cur].g= col[1];
+ coba->data[coba->cur].b= col[2];
+ coba->data[coba->cur].a= col[3];
+ coba->data[coba->cur].pos= pos;
+
+ do_colorband_evt(coba);
+ }
+ }
+ else {
+
+ /* first, activate new key when mouse is close */
+ for(a=0, cbd= coba->data; a<coba->tot; a++, cbd++) {
+ xco= but->x1 + (cbd->pos*width);
+ xco= ABS(xco-mvalo[0]);
+ if(a==coba->cur) xco+= 5; // selected one disadvantage
+ if(xco<mindist) {
+ coba->cur= a;
+ mindist= xco;
+ }
+ }
+
+ cbd= coba->data + coba->cur;
+
+ while(get_mbut() & L_MOUSE) {
+ uiGetMouse(mywinget(), mval);
+ if(mval[0]!=mvalo[0]) {
+ dx= mval[0]-mvalo[0];
+ dx/= width;
+ cbd->pos+= dx;
+ CLAMP(cbd->pos, 0.0, 1.0);
+
+ ui_draw_but(but);
+ ui_block_flush_back(but->block);
+
+ do_colorband_evt(coba);
+ cbd= coba->data + coba->cur; /* because qsort */
+
+ mvalo[0]= mval[0];
+ }
+ BIF_wait_for_statechange();
+ }
+ }
+
+ return but->retval;
+}
/* ************************************************ */
@@ -3320,7 +3439,8 @@ static int ui_do_button(uiBlock *block, uiBut *but, uiEvent *uevent)
case BLOCK:
case PULLDOWN:
if(uevent->val) {
- retval= ui_do_but_BLOCK(but, uevent->event);
+ ui_do_but_BLOCK(but, uevent->event);
+ retval= 0;
if(block->auto_open==0) block->auto_open= 1;
}
break;
@@ -3341,6 +3461,9 @@ static int ui_do_button(uiBlock *block, uiBut *but, uiEvent *uevent)
case HSVCUBE:
retval= ui_do_but_HSVCUBE(but);
break;
+ case BUT_COLORBAND:
+ retval= ui_do_but_COLORBAND(but);
+ break;
#ifdef INTERNATIONAL
case CHARTAB:
@@ -4869,36 +4992,31 @@ void ui_check_but(uiBut *but)
/* calc but->ofs, to draw the string shorter if too long */
but->ofs= 0;
while(but->strwidth > (int)okwidth ) {
- but->ofs++;
- if(but->drawstr[but->ofs])
+ if ELEM(but->type, NUM, TEX) { // only these cut off left
+ but->ofs++;
but->strwidth= but->aspect*BIF_GetStringWidth(but->font, but->drawstr+but->ofs, transopts);
- else but->strwidth= 0;
-
- /* textbut exception */
- if(but->pos != -1) {
- pos= but->pos+strlen(but->str);
- if(pos-1 < but->ofs) {
- pos= but->ofs-pos+1;
- but->ofs -= pos;
- if(but->ofs<0) {
- but->ofs= 0;
- pos--;
+
+ /* textbut exception */
+ if(but->pos != -1) {
+ pos= but->pos+strlen(but->str);
+ if(pos-1 < but->ofs) {
+ pos= but->ofs-pos+1;
+ but->ofs -= pos;
+ if(but->ofs<0) {
+ but->ofs= 0;
+ pos--;
+ }
+ but->drawstr[ strlen(but->drawstr)-pos ]= 0;
}
- but->drawstr[ strlen(but->drawstr)-pos ]= 0;
}
}
-
- if(but->strwidth < 10) break;
- }
-
- /* fix for buttons that better not have text cut off to the right */
- if(but->ofs) {
- if ELEM(but->type, NUM, TEX); // only these cut off left
else {
- but->drawstr[ strlen(but->drawstr)-but->ofs ]= 0;
- but->ofs= 0;
+ but->drawstr[ strlen(but->drawstr)-1 ]= 0;
+ but->strwidth= but->aspect*BIF_GetStringWidth(but->font, but->drawstr, transopts);
}
+
+ if(but->strwidth < 10) break;
}
}
}
diff --git a/source/blender/src/interface_draw.c b/source/blender/src/interface_draw.c
index 44da2c488c5..a0a0afcb728 100644
--- a/source/blender/src/interface_draw.c
+++ b/source/blender/src/interface_draw.c
@@ -55,17 +55,19 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "DNA_packedFile_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
#include "DNA_vec_types.h"
#include "DNA_vfont_types.h"
-#include "DNA_packedFile_types.h"
#include "BKE_blender.h"
-#include "BKE_utildefines.h"
#include "BKE_font.h"
#include "BKE_global.h"
+#include "BKE_utildefines.h"
+
#include "datatoc.h" /* std font */
#include "BIF_gl.h"
@@ -151,15 +153,24 @@ void uiEmboss(float x1, float y1, float x2, float y2, int sel)
/* ************** GENERIC ICON DRAW, NO THEME HERE ************* */
+/* icons have been standardized... and this call draws in untransformed coordinates */
+#define ICON_HEIGHT 16.0f
+
static void ui_draw_icon(uiBut *but, BIFIconID icon)
{
- // void BIF_icon_pos(float xs, float ys);
+ float xs=0, ys=0, aspect, height;
int blend= 0;
- float xs=0, ys=0;
- // this icon doesn't need draw...
+ /* this icon doesn't need draw... */
if(icon==ICON_BLANK1) return;
-
+
+ /* we need aspect from block, for menus... these buttons are scaled in uiPositionBlock() */
+ aspect= but->block->aspect;
+ if(aspect != but->aspect)
+ height= ICON_HEIGHT/aspect;
+ else
+ height= ICON_HEIGHT;
+
if(but->flag & UI_ICON_LEFT) {
if (but->type==BUTM) {
xs= but->x1+1.0;
@@ -170,22 +181,21 @@ static void ui_draw_icon(uiBut *but, BIFIconID icon)
else {
xs= but->x1+6.0;
}
- ys= (but->y1+but->y2- BIF_icon_get_height(icon))/2.0;
+ ys= (but->y1+but->y2- height)/2.0;
}
if(but->flag & UI_ICON_RIGHT) {
xs= but->x2-17.0;
- ys= (but->y1+but->y2- BIF_icon_get_height(icon))/2.0;
+ ys= (but->y1+but->y2- height)/2.0;
}
if (!((but->flag & UI_ICON_RIGHT) || (but->flag & UI_ICON_LEFT))) {
- xs= (but->x1+but->x2- BIF_icon_get_width(icon))/2.0;
- ys= (but->y1+but->y2- BIF_icon_get_height(icon))/2.0;
+ xs= (but->x1+but->x2- height)/2.0;
+ ys= (but->y1+but->y2- height)/2.0;
}
- if(but->aspect>1.1) glPixelZoom(1.0/but->aspect, 1.0/but->aspect);
- else if(but->aspect<0.9) glPixelZoom(1.0/but->aspect, 1.0/but->aspect);
+ /* aspect for the icon has to be stored */
+ BIF_icon_set_aspect(icon, aspect);
glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* calculate blend color */
if ELEM4(but->type, ICONTOG, TOG, ROW, TOGN) {
@@ -193,12 +203,10 @@ static void ui_draw_icon(uiBut *but, BIFIconID icon)
else if(but->flag & UI_ACTIVE);
else blend= -60;
}
- BIF_icon_draw_blended(xs, ys, icon, but->themecol, blend);
+ BIF_icon_draw_blended((int)(xs+0.5f), (int)(ys+0.5f), icon, but->themecol, blend);
- glBlendFunc(GL_ONE, GL_ZERO);
glDisable(GL_BLEND);
- glPixelZoom(1.0, 1.0);
}
@@ -406,7 +414,6 @@ static void ui_default_iconrow_arrows(float x1, float y1, float x2, float y2)
{
glEnable( GL_POLYGON_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
@@ -430,7 +437,6 @@ static void ui_default_menu_arrows(float x1, float y1, float x2, float y2)
{
glEnable( GL_POLYGON_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
@@ -456,7 +462,6 @@ static void ui_default_num_arrows(float x1, float y1, float x2, float y2)
glEnable( GL_POLYGON_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
@@ -486,7 +491,6 @@ static void ui_tog3_invert(float x1, float y1, float x2, float y2, int seltype)
short alpha = 30;
if (seltype == 0) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(0, 0, 0, alpha);
@@ -497,7 +501,6 @@ static void ui_tog3_invert(float x1, float y1, float x2, float y2, int seltype)
glDisable(GL_BLEND);
} else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(255, 255, 255, alpha);
@@ -521,7 +524,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
if (!((align == UI_BUT_ALIGN_DOWN) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT)) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT)))) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
MM_WHITE_OP;
fdrawline(x1, y1-1, x2, y1-1);
@@ -547,7 +549,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -564,7 +565,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -590,7 +590,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -607,7 +606,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -628,7 +626,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
}
}
else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
@@ -663,7 +660,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case ICONROW:
case ICONTEXTROW:
/* DARKENED AREA */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(0, 0, 0, 30);
@@ -679,7 +675,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
break;
case MENU:
/* DARKENED AREA */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(0, 0, 0, 30);
@@ -708,7 +703,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
if (!((align == UI_BUT_ALIGN_DOWN) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT)) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT)))) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
MM_WHITE_OP;
fdrawline(x1, y1-1, x2, y1-1);
@@ -734,7 +728,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -751,7 +744,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -777,7 +769,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -794,7 +785,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -816,7 +806,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
}
else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
@@ -1079,7 +1068,6 @@ static void round_button(float x1, float y1, float x2, float y2, float asp,
/* fake AA */
uiSetRoundBox(round);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
BIF_GetThemeColor3ubv(colorid, col);
@@ -1318,7 +1306,6 @@ static void ui_draw_slider(int colorid, float fac, float aspect, float x1, float
static void ui_shadowbox(float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
@@ -1399,7 +1386,6 @@ static void ui_draw_pulldown_item(int type, int colorid, float asp, float x1, fl
BIF_GetThemeColor4ubv(TH_MENU_BACK, col);
if(col[3]!=255) {
glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
if((flag & UI_ACTIVE) && type!=LABEL) {
@@ -1427,7 +1413,6 @@ static void ui_draw_pulldown_round(int type, int colorid, float asp, float x1, f
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gl_round_box(GL_LINE_LOOP, x1, y1+3, x2, y2-3, 7.0);
glDisable( GL_LINE_SMOOTH );
glDisable( GL_BLEND );
@@ -1873,9 +1858,120 @@ static void ui_draw_but_CHARTAB(uiBut *but)
#endif // INTERNATIONAL
+static void ui_draw_but_COLORBAND(uiBut *but)
+{
+ ColorBand *coba= (ColorBand *)but->poin;
+ CBData *cbd;
+ float x1, y1, sizex, sizey;
+ float dx, v3[2], v1[2], v2[2];
+ int a;
+
+ if(coba==NULL) return;
+
+ x1= but->x1;
+ y1= but->y1;
+ sizex= but->x2-x1;
+ sizey= but->y2-y1;
+
+ /* first background, to show tranparency */
+ dx= sizex/12.0;
+ v1[0]= x1;
+ for(a=0; a<12; a++) {
+ if(a & 1) glColor3f(0.3, 0.3, 0.3); else glColor3f(0.8, 0.8, 0.8);
+ glRectf(v1[0], y1, v1[0]+dx, y1+0.5*sizey);
+ if(a & 1) glColor3f(0.8, 0.8, 0.8); else glColor3f(0.3, 0.3, 0.3);
+ glRectf(v1[0], y1+0.5*sizey, v1[0]+dx, y1+sizey);
+ v1[0]+= dx;
+ }
+
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_BLEND);
+
+ cbd= coba->data;
+
+ v1[0]= v2[0]= x1;
+ v1[1]= y1;
+ v2[1]= y1+sizey;
+
+ glBegin(GL_QUAD_STRIP);
+
+ glColor4fv( &cbd->r );
+ glVertex2fv(v1); glVertex2fv(v2);
+
+ for(a=0; a<coba->tot; a++, cbd++) {
+
+ v1[0]=v2[0]= x1+ cbd->pos*sizex;
+
+ glColor4fv( &cbd->r );
+ glVertex2fv(v1); glVertex2fv(v2);
+ }
+
+ v1[0]=v2[0]= x1+ sizex;
+ glVertex2fv(v1); glVertex2fv(v2);
+
+ glEnd();
+ glShadeModel(GL_FLAT);
+ glDisable(GL_BLEND);
+
+ /* outline */
+ v1[0]= x1; v1[1]= y1;
+
+ cpack(0x0);
+ glBegin(GL_LINE_LOOP);
+ glVertex2fv(v1);
+ v1[0]+= sizex;
+ glVertex2fv(v1);
+ v1[1]+= sizey;
+ glVertex2fv(v1);
+ v1[0]-= sizex;
+ glVertex2fv(v1);
+ glEnd();
+
+
+ /* help lines */
+ v1[0]= v2[0]=v3[0]= x1;
+ v1[1]= y1;
+ v2[1]= y1+0.5*sizey;
+ v3[1]= y1+sizey;
+
+ cbd= coba->data;
+ glBegin(GL_LINES);
+ for(a=0; a<coba->tot; a++, cbd++) {
+ v1[0]=v2[0]=v3[0]= x1+ cbd->pos*sizex;
+
+ glColor3ub(0, 0, 0);
+ glVertex2fv(v1);
+ glVertex2fv(v2);
+
+ if(a==coba->cur) {
+ glVertex2f(v1[0]-1, v1[1]);
+ glVertex2f(v2[0]-1, v2[1]);
+ glVertex2f(v1[0]+1, v1[1]);
+ glVertex2f(v2[0]+1, v2[1]);
+ }
+
+ glColor3ub(255, 255, 255);
+ glVertex2fv(v2);
+ glVertex2fv(v3);
+
+ if(a==coba->cur) {
+ if(cbd->pos>0.01) {
+ glVertex2f(v2[0]-1, v2[1]);
+ glVertex2f(v3[0]-1, v3[1]);
+ }
+ if(cbd->pos<0.99) {
+ glVertex2f(v2[0]+1, v2[1]);
+ glVertex2f(v3[0]+1, v3[1]);
+ }
+ }
+ }
+ glEnd();
+}
+
+
+
static void ui_draw_roundbox(uiBut *but)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
BIF_ThemeColorShadeAlpha(TH_PANEL, but->a2, but->a2);
@@ -1988,7 +2084,12 @@ void ui_draw_but(uiBut *but)
case ROUNDBOX:
ui_draw_roundbox(but);
-
+ break;
+
+ case BUT_COLORBAND:
+ ui_draw_but_COLORBAND(but);
+ break;
+
default:
but->embossfunc(but->type, but->themecol, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
ui_draw_text_icon(but);
diff --git a/source/blender/src/interface_icons.c b/source/blender/src/interface_icons.c
index 84ed6f8f29e..686c70295c8 100644
--- a/source/blender/src/interface_icons.c
+++ b/source/blender/src/interface_icons.c
@@ -470,13 +470,18 @@ static void clear_transp_rect(unsigned char *transp, unsigned char *rect, int w,
static void prepare_internal_icons(ImBuf* bbuf)
{
int x, y;
-
+ int rowstride= bbuf->x*4;
+ char *back= (char *)bbuf->rect;
+ unsigned char transp[4];
+
+ /* this sets blueish outside of icon to zero alpha */
+ QUATCOPY(transp, back);
+ clear_transp_rect(transp, back, bbuf->x, bbuf->y, rowstride);
+
/* hack! */
for (y=0; y<12; y++) {
for (x=0; x<21; x++) {
- int rowstride= bbuf->x*4;
unsigned char *start= ((unsigned char*) bbuf->rect) + (y*21 + 3)*rowstride + (x*20 + 3)*4;
- unsigned char transp[4];
/* this sets backdrop of icon to zero alpha */
transp[0]= start[0];
transp[1]= start[1];
@@ -485,10 +490,6 @@ static void prepare_internal_icons(ImBuf* bbuf)
clear_transp_rect(transp, start, 20, 21, rowstride);
clear_transp_rect_soft(transp, start, 20, 21, rowstride);
- /* this sets outside of icon to zero alpha */
- start= ((unsigned char*) bbuf->rect) + (y*21)*rowstride + (x*20)*4;
- QUATCOPY(transp, start);
- clear_transp_rect(transp, start, 20, 21, rowstride);
}
}
}
@@ -503,13 +504,7 @@ static void init_internal_icons()
for (y=0; y<12; y++) {
for (x=0; x<21; x++) {
- if (x==11 && y==6) {
- def_internal_icon(bbuf, ICON_BEVELBUT_HLT, (x*20 + 3 + 4), (y*21 + 3 + 2), 7, 13);
- } else if (x==12 && y==6) {
- def_internal_icon(bbuf, ICON_BEVELBUT_DEHLT, (x*20 + 3 + 4), (y*21 + 3 + 2), 7, 13);
- } else {
- def_internal_icon(bbuf, BIFICONID_FIRST + y*21 + x, x*20+3, y*21+3, 15, 16);
- }
+ def_internal_icon(bbuf, BIFICONID_FIRST + y*21 + x, x*20+3, y*21+3, 16, 16);
}
}
@@ -617,6 +612,51 @@ void BIF_icons_init(int first_dyn_id)
init_internal_icons();
}
+/* create single icon from jpg, png etc. */
+static void icon_from_image(Image* img, RenderInfo* ri, unsigned int w, unsigned int h)
+{
+ struct ImBuf *ima;
+ float scaledx, scaledy;
+ int pr_size = w*h*sizeof(unsigned int);
+ short ex, ey, dx, dy;
+
+ if (!img)
+ return;
+
+ if (!ri->rect) {
+ ri->rect= MEM_callocN(sizeof(int)*ri->pr_rectx*ri->pr_recty, "butsrect");
+ memset(ri->rect, 0xFF, w*h*sizeof(unsigned int));
+ }
+
+ if(img->ibuf==NULL) {
+ load_image(img, IB_rect, G.sce, G.scene->r.cfra);
+ }
+ ima = IMB_dupImBuf(img->ibuf);
+
+ if (!ima)
+ return;
+
+ if (ima->x > ima->y) {
+ scaledx = (float)w;
+ scaledy = ( (float)ima->y/(float)ima->x )*(float)w;
+ }
+ else {
+ scaledx = ( (float)ima->x/(float)ima->y )*(float)h;
+ scaledy = (float)h;
+ }
+
+ ex = (short)scaledx;
+ ey = (short)scaledy;
+
+ dx = (w - ex) / 2;
+ dy = (h - ey) / 2;
+
+ IMB_scaleImBuf(ima, ex, ey);
+ memcpy(ri->rect, ima->rect, pr_size);
+ IMB_freeImBuf(ima);
+}
+
+
/* only called when icon has changed */
/* only call with valid pointer from BIF_icon_draw */
static void icon_set_image(ID* id, DrawInfo* di)
@@ -636,16 +676,9 @@ static void icon_set_image(ID* id, DrawInfo* di)
/* no drawing (see last parameter doDraw, just calculate preview image
- hopefully small enough to be fast */
if (GS(id->name) == ID_IM)
- BIF_calcpreview_image((struct Image*)id, &ri, ri.pr_rectx, ri.pr_recty);
+ icon_from_image((struct Image*)id, &ri, ri.pr_rectx, ri.pr_recty);
else {
- BIF_previewrender(id, &ri, NULL, 0);
-
- /* need to correct alpha */
- /*
- for( it = 0; it < ri.pr_rectx*ri.pr_recty; ++it) {
- ri.rect[it] |= 0xFF000000;
- }
- */
+ BIF_previewrender(id, &ri, NULL, PR_ICON_RENDER);
}
/* and copy the image into the icon */
@@ -657,13 +690,11 @@ static void icon_set_image(ID* id, DrawInfo* di)
}
-void BIF_icon_draw( int x, int y, int icon_id)
+void BIF_icon_draw(float x, float y, int icon_id)
{
Icon* icon = 0;
DrawInfo* di = 0;
- ImBuf *ima;
-
icon = BKE_icon_get(icon_id);
if (!icon) {
@@ -694,24 +725,28 @@ void BIF_icon_draw( int x, int y, int icon_id)
if (!di->rect) return; /* something has gone wrong! */
- /* di->rect contains image in 'rendersize' */
-
- /* first allocate imbuf for scaling and copy preview into it */
- ima = IMB_allocImBuf(di->rw, di->rh, 32, IB_rect, 0);
- memcpy(ima->rect, di->rect,di->rw*di->rh*sizeof(unsigned int));
-
- /* scale it */
- IMB_scaleImBuf(ima, di->w, di->h);
-
glRasterPos2f(x, y);
- glDrawPixels(di->w, di->h, GL_RGBA, GL_UNSIGNED_BYTE, ima->rect);
-
- IMB_freeImBuf(ima);
+
+ /* di->rect contains image in 'rendersize', we only scale if needed */
+ if(di->rw!=di->w && di->rh!=di->h) {
+ ImBuf *ima;
+ /* first allocate imbuf for scaling and copy preview into it */
+ ima = IMB_allocImBuf(di->rw, di->rh, 32, IB_rect, 0);
+ memcpy(ima->rect, di->rect, di->rw*di->rh*sizeof(unsigned int));
+
+ /* scale it */
+ IMB_scaleImBuf(ima, di->w, di->h);
+ glDrawPixels(di->w, di->h, GL_RGBA, GL_UNSIGNED_BYTE, ima->rect);
+
+ IMB_freeImBuf(ima);
+ }
+ else
+ glDrawPixels(di->w, di->h, GL_RGBA, GL_UNSIGNED_BYTE, di->rect);
}
}
-void BIF_icon_draw_blended(int x, int y, int icon_id, int colorid, int shade)
+void BIF_icon_draw_blended(float x, float y, int icon_id, int colorid, int shade)
{
if(shade < 0) {
@@ -724,7 +759,8 @@ void BIF_icon_draw_blended(int x, int y, int icon_id, int colorid, int shade)
glPixelTransferf(GL_ALPHA_SCALE, 1.0);
}
-void BIF_icon_set_aspect(int icon_id, float aspect) {
+void BIF_icon_set_aspect(int icon_id, float aspect)
+{
Icon* icon = 0;
DrawInfo* di = 0;
@@ -746,8 +782,8 @@ void BIF_icon_set_aspect(int icon_id, float aspect) {
}
di->aspect = aspect;
/* scale width and height according to aspect */
- di->w = 16.0 / di->aspect;
- di->h = 16.0 / di->aspect;
+ di->w = (int)(16.0f/di->aspect + 0.5f);
+ di->h = (int)(16.0f/di->aspect + 0.5f);
}
diff --git a/source/blender/src/interface_panel.c b/source/blender/src/interface_panel.c
index 74cb87a5bbf..09a50faeff9 100644
--- a/source/blender/src/interface_panel.c
+++ b/source/blender/src/interface_panel.c
@@ -344,7 +344,6 @@ void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad,
color[3]= 0.5;
glColor4fv(color);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
}
/* solid part */
@@ -357,7 +356,6 @@ void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad,
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
/* top shade */
gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad);
@@ -387,13 +385,11 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad)
color[3]= 0.5;
glColor4fv(color);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
}
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -413,7 +409,6 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
color[3]= 0.5;
glColor4fv(color);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
}
/* solid part */
@@ -422,7 +417,6 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -764,7 +758,6 @@ static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3,
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glBegin(GL_LINE_LOOP);
glVertex2f(x1, y1);
@@ -778,7 +771,7 @@ static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3,
}
/* triangle 'icon' for panel header */
-static void ui_draw_tria_icon(float x, float y, float aspect, char dir)
+void ui_draw_tria_icon(float x, float y, float aspect, char dir)
{
BIF_ThemeColor(TH_TEXT_HI);
@@ -790,13 +783,12 @@ static void ui_draw_tria_icon(float x, float y, float aspect, char dir)
}
}
-static void ui_draw_anti_x(float x1, float y1, float x2, float y2)
+void ui_draw_anti_x(float x1, float y1, float x2, float y2)
{
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glLineWidth(2.0);
@@ -1039,7 +1031,6 @@ void ui_draw_panel(uiBlock *block)
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
// blend now for panels in 3d window, test...
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable(GL_BLEND);
BIF_ThemeColor4(TH_PANEL);
@@ -1070,7 +1061,6 @@ void ui_draw_panel(uiBlock *block)
uiSetRoundBox(3);
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable(GL_BLEND);
BIF_ThemeColor4(TH_PANEL);
glRectf(block->minx, block->miny, block->maxx, block->maxy);
@@ -1100,7 +1090,6 @@ void ui_draw_panel(uiBlock *block)
/* and a soft shadow-line for now */
/*
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glColor4ub(0, 0, 0, 50);
fdrawline(block->maxx, block->miny, block->maxx, block->maxy+PNL_HEADER/2);
fdrawline(block->minx, block->miny, block->maxx, block->miny);
diff --git a/source/blender/src/outliner.c b/source/blender/src/outliner.c
index 2eb71014e0f..1f6c94cf5b0 100644
--- a/source/blender/src/outliner.c
+++ b/source/blender/src/outliner.c
@@ -1033,8 +1033,9 @@ static int tree_element_active_material(SpaceOops *soops, TreeElement *te, int s
}
if(set) {
extern_set_butspace(F5KEY); // force shading buttons
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 1);
+ allqueue(REDRAWNODE, 0);
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWIPO, 0);
}
@@ -1128,7 +1129,7 @@ static int tree_element_active_lamp(SpaceOops *soops, TreeElement *te, int set)
if(set) {
extern_set_butspace(F5KEY);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_LA);
allqueue(REDRAWBUTSSHADING, 1);
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWIPO, 0);
diff --git a/source/blender/src/previewrender.c b/source/blender/src/previewrender.c
index 650f4c87a58..5d58d19bad2 100644
--- a/source/blender/src/previewrender.c
+++ b/source/blender/src/previewrender.c
@@ -47,7 +47,6 @@
#endif
#include "MEM_guardedalloc.h"
#include "BLI_arithb.h"
-#include "BKE_utildefines.h"
#include "MTC_matrixops.h"
@@ -60,6 +59,7 @@
#include "DNA_camera_types.h"
#include "DNA_image_types.h"
#include "DNA_material_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_lamp_types.h"
#include "DNA_space_types.h"
@@ -71,13 +71,16 @@
#include "BKE_icons.h"
#include "BKE_texture.h"
#include "BKE_material.h"
+#include "BKE_node.h"
#include "BKE_world.h"
#include "BKE_texture.h"
+#include "BKE_utildefines.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "BIF_gl.h"
#include "BIF_screen.h"
@@ -101,8 +104,6 @@
#define PR_XMAX 200
#define PR_YMAX 195
-#define PREVIEW_RENDERSIZE 141;
-
#define PR_FACY (PR_YMAX-PR_YMIN-4)/(PR_RECTY)
static rctf prerect;
@@ -111,7 +112,7 @@ static float pr_facx, pr_facy;
/* implementation */
-static short snijpunt(float *v1, float *v2, float *v3, float *rtlabda, float *ray1, float *ray2)
+static short intersect(float *v1, float *v2, float *v3, float *rtlabda, float *ray1, float *ray2)
{
float x0,x1,x2,t00,t01,t02,t10,t11,t12,t20,t21,t22;
float m0,m1,m2,deeldet,det1,det2,det3;
@@ -192,13 +193,13 @@ static int ray_previewrender(int x, int y, float *vec, float *vn, short pr_rec
minlabda= 1.0f;
for(a=0; a<totface; a++) {
- if(snijpunt( rcubev[rcubi[a][0]], rcubev[rcubi[a][1]], rcubev[rcubi[a][2]], &labda, ray1, ray2)) {
+ if(intersect( rcubev[rcubi[a][0]], rcubev[rcubi[a][1]], rcubev[rcubi[a][2]], &labda, ray1, ray2)) {
if( labda < minlabda) {
minlabda= labda;
hitface= a;
}
}
- if(snijpunt( rcubev[rcubi[a][0]], rcubev[rcubi[a][2]], rcubev[rcubi[a][3]], &labda, ray1, ray2)) {
+ if(intersect( rcubev[rcubi[a][0]], rcubev[rcubi[a][2]], rcubev[rcubi[a][3]], &labda, ray1, ray2)) {
if( labda < minlabda) {
minlabda= labda;
hitface= a;
@@ -219,14 +220,13 @@ static int ray_previewrender(int x, int y, float *vec, float *vn, short pr_rec
return 0;
}
-
static unsigned int previewback(int type, int x, int y)
{
unsigned int col;
char* pcol;
/* checkerboard, for later
- x+= PR_RECTX/2;
+ x+= PR_RECTX/2;
y+= PR_RECTX/2;
if( ((x/24) + (y/24)) & 1) return 0x40404040;
else return 0xa0a0a0a0;
@@ -246,7 +246,22 @@ static unsigned int previewback(int type, int x, int y)
return col;
}
-void BIF_set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short pr_rectx, short pr_recty)
+static float previewbackf(int type, int x, int y)
+{
+ float col;
+
+ if(type & MA_DARK) {
+ if(abs(x)>abs(y)) col= 0.0f;
+ else col= 0.25f;
+ }
+ else {
+ if(abs(x)>abs(y)) col= 0.25f;
+ else col= 0.625f;
+ }
+ return col;
+}
+
+void set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short pr_rectx, short pr_recty)
{
float pr_sizex, pr_sizey;
@@ -279,7 +294,7 @@ void BIF_set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short
}
-void BIF_end_previewrect(void)
+static void end_previewrect(void)
{
glMatrixMode(GL_PROJECTION);
glPopMatrix();
@@ -301,11 +316,11 @@ static void display_pr_scanline(unsigned int *rect, int recty, short pr_rectx)
if( (recty & 3)==3) {
if(recty == 3) {
- glaDrawPixelsSafe(prerect.xmin, prerect.ymin, pr_rectx, 4, rect);
+ glaDrawPixelsSafe(prerect.xmin, prerect.ymin, pr_rectx, 4, GL_UNSIGNED_BYTE, rect);
}
else {
rect+= (recty-4)*pr_rectx;
- glaDrawPixelsSafe(prerect.xmin, prerect.ymin + (((float)recty-4.0)*pr_facy), pr_rectx, 5, rect);
+ glaDrawPixelsSafe(prerect.xmin, prerect.ymin + (((float)recty-4.0)*pr_facy), pr_rectx, 5, GL_UNSIGNED_BYTE, rect);
}
}
}
@@ -342,47 +357,43 @@ static void draw_tex_crop(Tex *tex)
}
-void BIF_all_preview_changed(void)
+void BIF_preview_changed(short id_code)
{
ScrArea *sa;
- SpaceButs *sbuts;
- sa= G.curscreen->areabase.first;
- while(sa) {
+ for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
if(sa->spacetype==SPACE_BUTS) {
- sbuts= sa->spacedata.first;
- if (sbuts->ri) sbuts->ri->cury= 0;
- addafterqueue(sa->win, RENDERPREVIEW, 1);
- }
- sa= sa->next;
- }
-}
-
-/* signal all previews in current screen of current type */
-void BIF_preview_changed(SpaceButs *sbuts)
-{
-
- /* can be called when no buttonswindow visible */
- if(sbuts) {
- ScrArea *sa;
- short mainb= sbuts->mainb;
- short tab= sbuts->tab[mainb];
-
- sa= G.curscreen->areabase.first;
- while(sa) {
- if(sa->spacetype==SPACE_BUTS) {
- sbuts= sa->spacedata.first;
- if(sbuts->mainb==mainb && sbuts->tab[mainb]==tab) {
+ SpaceButs *sbuts= sa->spacedata.first;
+ if(sbuts->mainb==CONTEXT_SHADING) {
+ int tab= sbuts->tab[CONTEXT_SHADING];
+ if(tab==TAB_SHADING_MAT && (id_code==ID_MA || id_code==ID_TE)) {
+ if (sbuts->ri) sbuts->ri->cury= 0;
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ }
+ else if(tab==TAB_SHADING_TEX && (id_code==ID_TE)) {
+ if (sbuts->ri) sbuts->ri->cury= 0;
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ }
+ else if(tab==TAB_SHADING_LAMP && (id_code==ID_LA || id_code==ID_TE)) {
if (sbuts->ri) sbuts->ri->cury= 0;
- addafterqueue(sbuts->area->win, RENDERPREVIEW, 1);
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
}
+ else if(tab==TAB_SHADING_WORLD && (id_code==ID_WO || id_code==ID_TE)) {
+ if (sbuts->ri) sbuts->ri->cury= 0;
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ }
+ }
+ }
+ else if(sa->spacetype==SPACE_NODE) {
+ SpaceNode *snode= sa->spacedata.first;
+ if(snode->treetype==NTREE_SHADER && (id_code==ID_MA || id_code==ID_TE)) {
+ snode_tag_dirty(snode);
}
- sa= sa->next;
}
}
}
-void BIF_previewdraw_render(struct RenderInfo* ri, ScrArea* area)
+static void previewdraw_render(struct RenderInfo* ri, ScrArea* area)
{
int y;
@@ -395,28 +406,6 @@ void BIF_previewdraw_render(struct RenderInfo* ri, ScrArea* area)
}
}
-/* is panel callback, supposed to be called with correct panel offset matrix */
-void BIF_previewdraw(void)
-{
- SpaceButs *sbuts= curarea->spacedata.first;
-
- if (!sbuts->ri) {
- sbuts->ri= MEM_callocN(sizeof(RenderInfo), "butsrenderinfo");
- sbuts->ri->cury = 0;
- sbuts->ri->rect = 0;
- sbuts->ri->pr_rectx = PREVIEW_RENDERSIZE;
- sbuts->ri->pr_recty = PREVIEW_RENDERSIZE;
- }
-
- if (sbuts->ri->rect==0) BIF_preview_changed(sbuts);
- else {
- BIF_set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty);
- BIF_previewdraw_render(sbuts->ri, sbuts->area);
- BIF_end_previewrect();
- }
- if(sbuts->ri->cury==0) BIF_preview_changed(sbuts);
-
-}
static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rectx, short pr_recty)
{
@@ -479,16 +468,16 @@ static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rec
the preview, because this only works for the
current selected lamp.
*/
- static LampRen* create_preview_render_lamp(Lamp* la)
- {
+static LampRen* create_preview_render_lamp(Lamp* la)
+{
LampRen *lar;
int c;
-
+
lar= (LampRen *)MEM_callocN(sizeof(LampRen),"lampren");
-
+
MTC_Mat3One(lar->mat);
MTC_Mat3One(lar->imat);
-
+
lar->type= la->type;
lar->mode= la->mode;
lar->energy= la->energy;
@@ -500,25 +489,25 @@ static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rec
lar->dist= la->dist;
lar->ld1= la->att1;
lar->ld2= la->att2;
-
+
/* exceptions: */
lar->spottexfac= 1.0;
lar->spotsi= cos( M_PI/3.0 );
lar->spotbl= (1.0-lar->spotsi)*la->spotblend;
MTC_Mat3One(lar->imat);
-
+
if(lar->type==LA_SPOT) {
if(lar->mode & LA_ONLYSHADOW) {
if((lar->mode & (LA_SHAD|LA_SHAD_RAY))==0) lar->mode -= LA_ONLYSHADOW;
}
}
memcpy(lar->mtex, la->mtex, MAX_MTEX*sizeof(void *));
-
+
for(c=0; c<MAX_MTEX; c++) {
if(la->mtex[c] && la->mtex[c]->tex) {
lar->mode |= LA_TEXTURE;
-
+
if(R.flag & R_RENDERING) {
if(R.osa) {
if(la->mtex[c]->tex->type==TEX_IMAGE) lar->mode |= LA_OSATEX;
@@ -526,7 +515,7 @@ static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rec
}
}
}
-
+
return lar;
}
@@ -670,13 +659,13 @@ static void halo_preview_pixel(HaloRen *har, int startx, int endx, int y, char *
if(dist<har->radsq) {
RE_shadehalo(har, front, colf, 0, dist, xn, yn, har->flarec);
RE_addalphaAddfac(rect, front, har->add);
- rect[3] = 0xFF;
+ rect[3] = 0xFF; /* makes icon display all pixels */
}
rect+= 4;
}
}
-static void previewflare(RenderInfo *ri, HaloRen *har, short pr_rectx, short pr_recty, int doDraw)
+static void previewflare(RenderInfo *ri, HaloRen *har, short pr_rectx, short pr_recty, int pr_method)
{
float ycor;
unsigned int *rectot;
@@ -707,8 +696,8 @@ static void previewflare(RenderInfo *ri, HaloRen *har, short pr_rectx, short pr_
// not sure why, either waitcursor or renderflare screws up (disabled then)
//areawinset(curarea->win);
- /* draw can just be this way, all settings are OK */
- if (doDraw) {
+ /* draw can just be called this way, all settings are OK */
+ if (pr_method==PR_DRAW_RENDER) {
for (y=0; y<pr_recty; y++) {
display_pr_scanline(ri->rect, y, pr_rectx);
}
@@ -851,7 +840,7 @@ static void refraction_prv(int *x, int *y, float *n, float index)
*y= (int)(len*(index*view[1] + fac*n[1]));
}
-static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_lamp)
+static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr)
{
extern float fresnel_fac(float *view, float *vn, float ior, float fac);
Material *mat= shi->mat;
@@ -889,9 +878,19 @@ static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_la
}
else {
+ if(mat->texco & TEXCO_REFL) {
+ inp= -2.0*(shi->vn[0]*shi->view[0]+shi->vn[1]*shi->view[1]+shi->vn[2]*shi->view[2]);
+ shi->ref[0]= (shi->view[0]+inp*shi->vn[0]);
+ shi->ref[1]= (shi->view[1]+inp*shi->vn[1]);
+ shi->ref[2]= (shi->view[2]+inp*shi->vn[2]);
+ /* normals in render are pointing different... rhm */
+ if(shi->pr_type==MA_SPHERE)
+ shi->ref[1]= -shi->ref[1];
+ }
+
for(a=0; a<2; a++) {
- if((pr_lamp & (1<<a))==0) continue;
+ if((mat->pr_lamp & (1<<a))==0) continue;
if(a==0) la= pr1_lamp;
else la= pr2_lamp;
@@ -1000,6 +999,8 @@ static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_la
shi->refcol[3]= shi->refcol[0]*0.8f*div;
}
}
+ else
+ shi->refcol[0]= 0.0f;
shr->diff[0]+= shi->ambr;
shr->diff[1]+= shi->ambg;
@@ -1025,14 +1026,13 @@ static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_la
}
}
-static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char *rect, int smooth, short pr_rectx, short pr_recty)
+static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char *rect, short pr_rectx, short pr_recty)
{
Material *mat;
MaterialLayer *ml;
ShadeResult shr;
- float v1, inp;
- float eul[3], tmat[3][3], imat[3][3], col[3];
- char tracol;
+ float v1;
+ float eul[3], tmat[3][3], imat[3][3], col[4];
mat= shi->mat;
@@ -1042,8 +1042,8 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
shi->view[2]= 1.0f;
Normalise(shi->view);
- shi->xs= (float)x;
- shi->ys= (float)y;
+ shi->xs= x + pr_rectx/2;
+ shi->ys= y + pr_recty/2;
shi->refcol[0]= shi->refcol[1]= shi->refcol[2]= shi->refcol[3]= 0.0f;
VECCOPY(shi->co, vec);
@@ -1092,22 +1092,10 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
shi->orn[1]= shi->vn[1];
shi->orn[2]= shi->vn[2];
}
- if(mat->texco & TEXCO_REFL) {
-
- inp= -2.0*(shi->vn[0]*shi->view[0]+shi->vn[1]*shi->view[1]+shi->vn[2]*shi->view[2]);
- shi->ref[0]= (shi->view[0]+inp*shi->vn[0]);
- shi->ref[1]= (shi->view[1]+inp*shi->vn[1]);
- shi->ref[2]= (shi->view[2]+inp*shi->vn[2]);
- }
/* Clear displase vec for preview */
shi->displace[0]= shi->displace[1]= shi->displace[2]= 0.0;
- if(mat->texco & TEXCO_REFL) {
- /* normals in render are pointing different... rhm */
- if(smooth) shi->ref[1]= -shi->ref[1];
- }
-
if(mat->pr_type==MA_CUBE) {
/* rotate normal back for normals texture */
SWAP(float, shi->vn[0], shi->vn[1]);
@@ -1127,24 +1115,29 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
/* ------ main shading loop with material layers */
VECCOPY(shi->vno, shi->vn);
if(mat->ml_flag & ML_RENDER)
- shade_lamp_loop_preview(shi, &shr, mat->pr_lamp);
+ shade_lamp_loop_preview(shi, &shr);
else {
memset(&shr, 0, sizeof(ShadeResult));
shr.alpha= 1.0f;
}
- for(ml= mat->layers.first; ml; ml= ml->next) {
- if(ml->mat && (ml->flag & ML_RENDER)) {
- ShadeResult shrlay;
-
- shi->mat= ml->mat;
- shi->layerfac= ml->blendfac;
- VECCOPY(shi->vn, shi->vno);
- if(ml->flag & ML_NEG_NORMAL)
- VecMulf(shi->vn, -1.0);
-
- shade_lamp_loop_preview(shi, &shrlay, mat->pr_lamp);
- matlayer_blend(ml, shi->layerfac, &shr, &shrlay);
+ if(mat->nodetree && mat->use_nodes) {
+ ntreeShaderExecTree(mat->nodetree, shi, &shr);
+ }
+ else {
+ for(ml= mat->layers.first; ml; ml= ml->next) {
+ if(ml->mat && (ml->flag & ML_RENDER)) {
+ ShadeResult shrlay;
+
+ shi->mat= ml->mat;
+ shi->layerfac= ml->blendfac;
+ VECCOPY(shi->vn, shi->vno);
+ if(ml->flag & ML_NEG_NORMAL)
+ VecMulf(shi->vn, -1.0);
+
+ shade_lamp_loop_preview(shi, &shrlay);
+ matlayer_blend(ml, shi->layerfac, &shr, &shrlay);
+ }
}
}
@@ -1160,34 +1153,40 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
if(shr.diff[2]<0.0f) shr.diff[2]= 0.0f;
VECADD(col, shr.diff, shr.spec);
- if(col[0]<=0.0f) rect[0]= 0; else if(col[0]>=1.0f) rect[0]= 255; else rect[0]= (char)(255.0*col[0]);
- if(col[1]<=0.0f) rect[1]= 0; else if(col[1]>=1.0f) rect[1]= 255; else rect[1]= (char)(255.0*col[1]);
- if(col[2]<=0.0f) rect[2]= 0; else if(col[2]>=1.0f) rect[2]= 255; else rect[2]= (char)(255.0*col[2]);
+ col[3]= shr.alpha;
- if(shr.alpha!=1.0f) {
+ /* handle backdrop now */
+
+ if(col[3]!=1.0f) {
+ float back, backm;
+
+ /* distorts x and y */
if(mat->mode & MA_RAYTRANSP) {
refraction_prv(&x, &y, shi->vn, shi->ang);
}
- tracol= previewback(mat->pr_back, x, y) & 255;
-
- tracol= (1.0f-shr.alpha)*tracol;
+ back= previewbackf(mat->pr_back, x, y);
+ backm= (1.0f-shr.alpha)*back;
if((mat->mode & MA_RAYTRANSP) && mat->filter!=0.0) {
float fr= 1.0f+ mat->filter*(shr.diff[0]-1.0f);
- rect[0]= fr*tracol+ (rect[0]*shr.alpha) ;
- fr= 1.0f+ mat->filter*(shr.diff[0]-1.0f);
- rect[1]= fr*tracol+ (rect[1]*shr.alpha) ;
- fr= 1.0f+ mat->filter*(shr.diff[0]-1.0f);
- rect[2]= fr*tracol+ (rect[2]*shr.alpha) ;
+ col[0]= fr*backm+ (col[3]*col[0]);
+ fr= 1.0f+ mat->filter*(shr.diff[1]-1.0f);
+ col[1]= fr*backm+ (col[3]*col[1]);
+ fr= 1.0f+ mat->filter*(shr.diff[2]-1.0f);
+ col[2]= fr*backm+ (col[3]*col[2]);
}
else {
- rect[0]= tracol+ (rect[0]*shr.alpha) ;
- rect[1]= tracol+ (rect[1]*shr.alpha) ;
- rect[2]= tracol+ (rect[2]*shr.alpha) ;
+ col[0]= backm + (col[3]*col[0]);
+ col[1]= backm + (col[3]*col[1]);
+ col[2]= backm + (col[3]*col[2]);
}
}
- rect[3] = 0xFF;
+
+ if(col[0]<=0.0f) rect[0]= 0; else if(col[0]>=1.0f) rect[0]= 255; else rect[0]= (char)(255.0f*col[0]);
+ if(col[1]<=0.0f) rect[1]= 0; else if(col[1]>=1.0f) rect[1]= 255; else rect[1]= (char)(255.0f*col[1]);
+ if(col[2]<=0.0f) rect[2]= 0; else if(col[2]>=1.0f) rect[2]= 255; else rect[2]= (char)(255.0f*col[2]);
+ if(col[3]<=0.0f) rect[3]= 0; else if(col[3]>=1.0f) rect[3]= 255; else rect[3]= (char)(255.0f*col[3]);
}
static void preview_init_render_textures(MTex **mtex)
@@ -1210,65 +1209,8 @@ static void preview_init_render_textures(MTex **mtex)
}
-void BIF_previewrender_buts(SpaceButs *sbuts)
-{
- uiBlock *block;
- struct ID* id = 0;
- struct ID* idfrom = 0;
- struct ID* idshow = 0;
- Object *ob;
-
- if (!sbuts->ri) return;
-
- /* we safely assume curarea has panel "preview" */
- /* quick hack for now, later on preview should become uiBlock itself */
-
- block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Preview");
- if(block==NULL) return;
-
- ob= ((G.scene->basact)? (G.scene->basact)->object: 0);
-
- /* we cant trust this global lockpoin.. for example with headerless window */
- buttons_active_id(&id, &idfrom);
- G.buts->lockpoin= id;
-
- if(sbuts->mainb==CONTEXT_SHADING) {
- int tab= sbuts->tab[CONTEXT_SHADING];
-
- if(tab==TAB_SHADING_MAT)
- idshow = sbuts->lockpoin;
- else if(tab==TAB_SHADING_TEX)
- idshow = sbuts->lockpoin;
- else if(tab==TAB_SHADING_LAMP) {
- if(ob && ob->type==OB_LAMP) idshow= ob->data;
- }
- else if(tab==TAB_SHADING_WORLD)
- idshow = sbuts->lockpoin;
- }
- else if(sbuts->mainb==CONTEXT_OBJECT) {
- if(ob && ob->type==OB_LAMP) idshow = ob->data;
- }
-
- if (idshow) {
- BKE_icon_changed(BKE_icon_getid(idshow));
- uiPanelPush(block);
- BIF_set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty); // uses UImat
- BIF_previewrender(idshow, sbuts->ri, sbuts->area, 1);
- uiPanelPop(block);
- BIF_end_previewrect();
- }
- else {
- /* no active block to draw. But we do draw black if possible */
- if(sbuts->ri->rect) {
- memset(sbuts->ri->rect, 0, sizeof(int)*sbuts->ri->pr_rectx*sbuts->ri->pr_recty);
- sbuts->ri->cury= sbuts->ri->pr_recty;
- addqueue(curarea->win, REDRAW, 1);
- }
- return;
- }
-}
-
-void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *area, int doDraw)
+/* main previewrender loop */
+void BIF_previewrender(struct ID *id, struct RenderInfo *ri, struct ScrArea *area, int pr_method)
{
static double lasttime= 0;
Material *mat= NULL;
@@ -1303,9 +1245,9 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
}
har.flarec= 0; /* below is a test for postrender flare */
-
- if(doDraw && qtest()) {
+ /* no event escape for icon render */
+ if(pr_method!=PR_ICON_RENDER && qtest()) {
addafterqueue(curarea->win, RENDERPREVIEW, 1);
return;
}
@@ -1331,11 +1273,33 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
mat->texco |= ml->mat->texco;
}
}
-
+ if(mat->nodetree && mat->use_nodes) {
+ bNode *node;
+ for(node=mat->nodetree->nodes.first; node; node= node->next) {
+ if(node->id && GS(node->id->name)==ID_MA) {
+ Material *ma= (Material *)node->id;
+ init_render_material(ma);
+ preview_init_render_textures(ma->mtex);
+ mat->texco |= ma->texco;
+ }
+ }
+ /* signal to node editor to store previews or not */
+ if(pr_method==PR_ICON_RENDER) {
+ ntreeBeginExecTree(mat->nodetree, 0, 0);
+ shi.do_preview= 0;
+ }
+ else {
+ ntreeBeginExecTree(mat->nodetree, ri->pr_rectx, ri->pr_recty);
+ shi.do_preview= 1;
+ }
+ }
shi.vlr= NULL;
shi.mat= mat;
-
+ shi.pr_type= mat->pr_type;
+
if(mat->mode & MA_HALO) init_previewhalo(&har, mat, ri->pr_rectx, ri->pr_recty);
+
+ set_node_shader_lamp_loop(shade_lamp_loop_preview);
}
else if(tex) {
@@ -1384,39 +1348,18 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
preview_init_render_textures(wrld->mtex);
}
- if (doDraw) {
- /* BIF_set_previewrect(area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, ri->pr_rectx, ri->pr_recty); // uses UImat */
- }
-
if(ri->rect==NULL) {
ri->rect= MEM_callocN(sizeof(int)*ri->pr_rectx*ri->pr_recty, "butsrect");
-
- /* built in emboss */
- if (doDraw) {
- rect= ri->rect;
- for(y=0; y<ri->pr_recty; y++, rect++) *rect= 0xFFFFFFFF;
-
- rect= ri->rect + ri->pr_rectx-1;
- for(y=0; y<ri->pr_recty; y++, rect+=ri->pr_rectx) *rect= 0xFFFFFFFF;
- }
}
starty= -ri->pr_recty/2;
endy= starty+ri->pr_recty;
starty+= ri->cury;
- if (doDraw) {
- /* offset +1 for emboss */
- startx= -ri->pr_rectx/2 +1;
- endx= startx+ri->pr_rectx -2;
- }
- else {
- /* offset +1 for emboss */
- startx= -ri->pr_rectx/2;
- endx= startx+ri->pr_rectx-1;
- }
+ startx= -ri->pr_rectx/2;
+ endx= startx+ri->pr_rectx;
- radsq= (ri->pr_rectx/2-1)*(ri->pr_recty/2-1); /* -1 to make sure sphere fits into preview rect completely */
+ radsq= (ri->pr_rectx/2)*(ri->pr_recty/2);
if(mat) {
if(mat->pr_type==MA_SPHERE) {
@@ -1429,24 +1372,23 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
}
}
- /* here it starts! */
- if (doDraw) glDrawBuffer(GL_FRONT);
+ if (pr_method==PR_DRAW_RENDER)
+ glDrawBuffer(GL_FRONT);
+ /* here it starts! */
for(y=starty; y<endy; y++) {
- rect= ri->rect + 1 + ri->pr_rectx*ri->cury;
+ rect= ri->rect + ri->pr_rectx*ri->cury;
- if(y== -ri->pr_recty/2 || y==endy-1); /* emboss */
- else if(mat) {
+ if(mat) {
if(mat->mode & MA_HALO) {
for(x=startx; x<endx; x++, rect++) {
rect[0]= previewback(mat->pr_back, x, y);
- rect[0] |= 0xFF000000;
}
if(har.flarec) {
- if(y==endy-2) previewflare(ri, &har, ri->pr_rectx, ri->pr_recty, doDraw);
+ if(y==endy-2) previewflare(ri, &har, ri->pr_rectx, ri->pr_recty, pr_method);
}
else {
halo_preview_pixel(&har, startx, endx, y, (char *) (rect-ri->pr_rectx), ri->pr_rectx);
@@ -1476,19 +1418,25 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
Normalise(shi.tang);
}
- shade_preview_pixel(&shi, vec, x, y, (char *)rect, 1, ri->pr_rectx, ri->pr_recty);
+ shade_preview_pixel(&shi, vec, x, y, (char *)rect, ri->pr_rectx, ri->pr_recty);
}
else {
rect[0]= previewback(mat->pr_back, x, y);
+
+ if(pr_method!=PR_ICON_RENDER && mat->nodetree && mat->use_nodes)
+ ntreeClearPixelTree(mat->nodetree, x+ri->pr_rectx/2, y+ri->pr_recty/2);
}
}
else if(mat->pr_type==MA_CUBE) {
if( ray_previewrender(x, y, vec, shi.vn, ri->pr_rectx, ri->pr_recty) ) {
- shade_preview_pixel(&shi, vec, x, y, (char *)rect, 0, ri->pr_rectx, ri->pr_recty);
+ shade_preview_pixel(&shi, vec, x, y, (char *)rect, ri->pr_rectx, ri->pr_recty);
}
else {
rect[0]= previewback(mat->pr_back, x, y);
+
+ if(pr_method!=PR_ICON_RENDER && mat->nodetree && mat->use_nodes)
+ ntreeClearPixelTree(mat->nodetree, x+ri->pr_rectx/2, y+ri->pr_recty/2);
}
}
else {
@@ -1499,7 +1447,7 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
shi.vn[0]= shi.vn[1]= 0.0f;
shi.vn[2]= 1.0f;
- shade_preview_pixel(&shi, vec, x, y, (char *)rect, 0, ri->pr_rectx, ri->pr_recty);
+ shade_preview_pixel(&shi, vec, x, y, (char *)rect, ri->pr_rectx, ri->pr_recty);
}
}
}
@@ -1520,7 +1468,7 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
}
}
- if (doDraw) {
+ if (pr_method!=PR_ICON_RENDER) {
if(y<endy-2) {
if(qtest()) {
addafterqueue(curarea->win, RENDERPREVIEW, 1);
@@ -1538,15 +1486,13 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
ri->cury++;
}
- if (doDraw) {
- /* BIF_end_previewrect(); */
-
+ if (pr_method==PR_DRAW_RENDER) {
if(ri->cury>=ri->pr_recty && tex)
- draw_tex_crop((Tex*)id);
+ draw_tex_crop((Tex*)id);
glDrawBuffer(GL_BACK);
/* draw again for clean swapbufers */
- BIF_previewdraw_render(ri, area);
+ previewdraw_render(ri, area);
}
if(lar) {
@@ -1556,59 +1502,99 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
R.lights.first= R.lights.last= NULL;
*/
}
+
+ if(mat && mat->nodetree && mat->use_nodes) {
+ ntreeEndExecTree(mat->nodetree);
+ if(ri->cury>=ri->pr_recty)
+ allqueue(REDRAWNODE, 0);
+ }
}
-/* create single icon from jpg, png etc. */
-void BIF_calcpreview_image(Image* img, RenderInfo* ri, unsigned int w, unsigned int h)
+void BIF_previewrender_buts(SpaceButs *sbuts)
{
- struct ImBuf *ima;
- struct ImBuf *imb;
- short ex, ey, dx, dy;
- float scaledx, scaledy;
- int pr_size = w*h*sizeof(unsigned int);
-
- if (!img)
- return;
-
- if (!ri->rect) {
- ri->rect= MEM_callocN(sizeof(int)*ri->pr_rectx*ri->pr_recty, "butsrect");
- memset(ri->rect, 0xFF, w*h*sizeof(unsigned int));
+ uiBlock *block;
+ struct ID* id = 0;
+ struct ID* idfrom = 0;
+ struct ID* idshow = 0;
+ Object *ob;
+
+ if (!sbuts->ri) return;
+
+ /* we safely assume curarea has panel "preview" */
+ /* quick hack for now, later on preview should become uiBlock itself */
+
+ block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Preview");
+ if(block==NULL) return;
+
+ ob= ((G.scene->basact)? (G.scene->basact)->object: 0);
+
+ /* we cant trust this global lockpoin.. for example with headerless window */
+ buttons_active_id(&id, &idfrom);
+ G.buts->lockpoin= id;
+
+ if(sbuts->mainb==CONTEXT_SHADING) {
+ int tab= sbuts->tab[CONTEXT_SHADING];
+
+ if(tab==TAB_SHADING_MAT)
+ idshow = sbuts->lockpoin;
+ else if(tab==TAB_SHADING_TEX)
+ idshow = sbuts->lockpoin;
+ else if(tab==TAB_SHADING_LAMP) {
+ if(ob && ob->type==OB_LAMP) idshow= ob->data;
+ }
+ else if(tab==TAB_SHADING_WORLD)
+ idshow = sbuts->lockpoin;
}
-
- if(img->ibuf==0) {
- load_image(img, IB_rect, G.sce, G.scene->r.cfra);
+ else if(sbuts->mainb==CONTEXT_OBJECT) {
+ if(ob && ob->type==OB_LAMP) idshow = ob->data;
}
- ima = IMB_dupImBuf(img->ibuf);
-
- if (!ima)
+
+ if (idshow) {
+ BKE_icon_changed(BKE_icon_getid(idshow));
+ uiPanelPush(block);
+ set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty); // uses UImat
+ BIF_previewrender(idshow, sbuts->ri, sbuts->area, PR_DRAW_RENDER);
+ uiPanelPop(block);
+ end_previewrect();
+ }
+ else {
+ /* no active block to draw. But we do draw black if possible */
+ if(sbuts->ri->rect) {
+ memset(sbuts->ri->rect, 0, sizeof(int)*sbuts->ri->pr_rectx*sbuts->ri->pr_recty);
+ sbuts->ri->cury= sbuts->ri->pr_recty;
+ addqueue(curarea->win, REDRAW, 1);
+ }
return;
+ }
+}
- if (ima->x > ima->y) {
- scaledx = (float)w;
- scaledy = ( (float)ima->y/(float)ima->x )*(float)w;
+/* is panel callback, supposed to be called with correct panel offset matrix */
+void BIF_previewdraw(void)
+{
+ SpaceButs *sbuts= curarea->spacedata.first;
+ short id_code= 0;
+
+ if(sbuts->lockpoin) {
+ ID *id= sbuts->lockpoin;
+ id_code= GS(id->name);
}
- else {
- scaledx = ( (float)ima->x/(float)ima->y )*(float)h;
- scaledy = (float)h;
+
+ if (!sbuts->ri) {
+ sbuts->ri= MEM_callocN(sizeof(RenderInfo), "butsrenderinfo");
+ sbuts->ri->cury = 0;
+ sbuts->ri->rect = NULL;
+ sbuts->ri->pr_rectx = PREVIEW_RENDERSIZE;
+ sbuts->ri->pr_recty = PREVIEW_RENDERSIZE;
}
-
- ex = (short)scaledx;
- ey = (short)scaledy;
- dx = (w - ex) / 2;
- dy = (h - ey) / 2;
+ if (sbuts->ri->rect==NULL) BIF_preview_changed(id_code);
+ else {
+ set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty);
+ previewdraw_render(sbuts->ri, sbuts->area);
+ end_previewrect();
+ }
+ if(sbuts->ri->cury==0) BIF_preview_changed(id_code);
- IMB_scaleImBuf(ima, ex, ey);
-
- imb = IMB_allocImBuf(w, h, 32, IB_rect, 0);
-
- IMB_rectop(imb, 0, 0, 0, 0, 0, w, h, IMB_rectfill, 0x00000000);
-
- IMB_rectop(imb, ima, dx, dy, 0, 0, ex, ey, IMB_rectcpy, 0);
-
- IMB_freeImBuf(ima);
+}
- memcpy(ri->rect, imb->rect,pr_size);
- IMB_freeImBuf(imb);
-}
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c
index 637c018587d..ae6ffee5df5 100644
--- a/source/blender/src/renderwin.c
+++ b/source/blender/src/renderwin.c
@@ -329,16 +329,16 @@ static void renderwin_draw(RenderWin *rw, int just_clear)
char *rect= (char *)R.rectot;
glColorMask(1, 0, 0, 0);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, rect+3);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, rect+3);
glColorMask(0, 1, 0, 0);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, rect+2);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, rect+2);
glColorMask(0, 0, 1, 0);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, rect+1);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, rect+1);
glColorMask(1, 1, 1, 1);
}
else {
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, R.rectot);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, R.rectot);
}
glPixelZoom(1.0, 1.0);
}
@@ -743,7 +743,7 @@ static void renderwin_progress(RenderWin *rw, int start_y, int nlines, int rect_
glDrawBuffer(GL_FRONT);
glPixelZoom(rw->zoom, rw->zoom);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1] + start_y*rw->zoom, rect_w, nlines, &rect[start_y*rect_w*4]);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1] + start_y*rw->zoom, rect_w, nlines, GL_UNSIGNED_BYTE, &rect[start_y*rect_w*4]);
glPixelZoom(1.0, 1.0);
glFlush();
glDrawBuffer(GL_BACK);
@@ -830,7 +830,7 @@ static void renderview_progress_display_cb(int y1, int y2, int w, int h, unsigne
sy= vb.ymin + facy*y1;
glPixelZoom(facx, facy);
- glaDrawPixelsSafe(sx, sy, w, nlines, rect+w*y1);
+ glaDrawPixelsSafe(sx, sy, w, nlines, GL_UNSIGNED_BYTE, rect+w*y1);
glPixelZoom(1.0, 1.0);
glFlush();
@@ -1090,7 +1090,7 @@ static void do_render(View3D *ogl_render_view3d, int anim, int force_dispwin)
/* after an envmap creation... */
if(R.flag & R_REDRAW_PRV) {
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
allqueue(REDRAWBUTSSCENE, 0); // visualize fbuf for example
}
diff --git a/source/blender/src/resources.c b/source/blender/src/resources.c
index c206f12d01f..6049c34b31e 100644
--- a/source/blender/src/resources.c
+++ b/source/blender/src/resources.c
@@ -185,6 +185,9 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case SPACE_TIME:
ts= &btheme->ttime;
break;
+ case SPACE_NODE:
+ ts= &btheme->tnode;
+ break;
default:
ts= &btheme->tv3d;
break;
@@ -272,6 +275,17 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_SYNTAX_N:
cp= ts->syntaxn; break;
+ case TH_NODE:
+ cp= ts->syntaxl; break;
+ case TH_NODE_IN_OUT:
+ cp= ts->syntaxn; break;
+ case TH_NODE_OPERATOR:
+ cp= ts->syntaxb; break;
+ case TH_NODE_GENERATOR:
+ cp= ts->syntaxv; break;
+ case TH_NODE_FREE:
+ cp= ts->syntaxc; break;
+
}
}
@@ -463,6 +477,15 @@ void BIF_InitTheme(void)
/* space time */
btheme->ttime= btheme->tsnd; // same as sound space
+
+ /* space node, re-uses syntax color storage */
+ btheme->tnode= btheme->tv3d;
+ SETCOL(btheme->tnode.syntaxl, 120, 120, 120, 255); /* TH_NODE */
+ SETCOL(btheme->tnode.syntaxn, 110, 110, 120, 255); /* in-out */
+ SETCOL(btheme->tnode.syntaxb, 140, 140, 140, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 120, 120, 120, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxc, 120, 120, 120, 255); /* free */
+
}
char *BIF_ThemeColorsPup(int spacetype)
@@ -590,6 +613,14 @@ char *BIF_ThemeColorsPup(int spacetype)
else if(spacetype==SPACE_TIME) {
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
}
+ else if(spacetype==SPACE_NODE) {
+ strcat(cp,"%l|");
+ sprintf(str, "Default Node %%x%d|", TH_NODE); strcat(cp, str);
+ sprintf(str, "In/Out Node %%x%d|", TH_NODE_IN_OUT); strcat(cp, str);
+ sprintf(str, "Operator Node %%x%d|", TH_NODE_OPERATOR); strcat(cp, str);
+ sprintf(str, "Generator Node %%x%d|", TH_NODE_GENERATOR); strcat(cp, str);
+// sprintf(str, " %%x%d|", TH_NODE_FREE); strcat(cp, str);
+ }
}
return cp;
}
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index 159d3e0e7ff..f94a459bfad 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -3362,11 +3362,12 @@ void extern_set_butspace(int fkey)
sbuts->mainb= CONTEXT_SHADING;
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT;
}
-
+ BIF_preview_changed(ID_TE);
}
else if(fkey==F6KEY) {
sbuts->mainb= CONTEXT_SHADING;
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_TEX;
+ BIF_preview_changed(ID_TE);
}
else if(fkey==F7KEY) {
/* if it's already in object context, cycle between tabs with the same key */
@@ -3403,7 +3404,6 @@ void extern_set_butspace(int fkey)
scrarea_queue_headredraw(sa);
scrarea_queue_winredraw(sa);
- BIF_preview_changed(sbuts);
}
/* ******************** SPACE: SEQUENCE ********************** */
@@ -4639,9 +4639,7 @@ void freespacelist(ListBase *lb)
free_soundspace((SpaceSound *)sl);
}
else if(sl->spacetype==SPACE_NODE) {
- SpaceNode *snode= (SpaceNode *)sl;
- if(snode->nodetree)
- nodeFreeTree(snode->nodetree);
+/* SpaceNode *snode= (SpaceNode *)sl; */
}
}
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index a6f51f92c2d..52d853cd984 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -96,10 +96,11 @@
#include "BIF_cursors.h"
#include "BSE_drawview.h"
-#include "BSE_headerbuttons.h"
+#include "BSE_edit.h"
#include "BSE_editipo.h"
#include "BSE_filesel.h"
-#include "BSE_edit.h"
+#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "BLO_readfile.h"
#include "BLO_writefile.h"
@@ -265,10 +266,23 @@ static void init_userdef_file(void)
255);
}
}
-
if(U.obcenter_dia==0) U.obcenter_dia= 6;
}
-
+ if (G.main->versionfile <= 240) {
+ bTheme *btheme;
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* Node editor theme, check for alpha==0 is safe, then color was never set */
+ if(btheme->tnode.syntaxn[3]==0) {
+ /* re-uses syntax color storage */
+ btheme->tnode= btheme->tv3d;
+ SETCOL(btheme->tnode.syntaxl, 120, 120, 120, 255); /* TH_NODE */
+ SETCOL(btheme->tnode.syntaxn, 110, 110, 120, 255); /* in-out */
+ SETCOL(btheme->tnode.syntaxb, 140, 140, 140, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 120, 120, 120, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxc, 120, 120, 120, 255); /* free */
+ }
+ }
+ }
if (U.undosteps==0) U.undosteps=32;
@@ -660,6 +674,7 @@ void BIF_init(void)
initbuttons();
InitCursorData();
sound_init_listener();
+ init_node_butfuncs();
BIF_read_homefile();
init_gl_stuff(); /* drawview.c, after homefile */